美文网首页ctf
2019-03-14 实验吧CTF_Writeup之WEB(1)

2019-03-14 实验吧CTF_Writeup之WEB(1)

作者: NoelleMu | 来源:发表于2019-03-14 20:55 被阅读23次

    天下武功唯快不破

    考察使用脚本自动读取响应头、进行BASE64解码

    提示“看看响应头”,那就看一下响应头。

    发现一个BASE64编码的字符串:

    看了一眼网页源代码,发现一条注释:

    每次刷新页面这个值都会变,根本就不够手动提交的,只能写脚本了。

    本人极度不熟悉Python,所以只好找了别人的脚本,等以后把Python学好了再自己写一遍:

    import requests
    import base64
    r = requests.post('http://ctf5.shiyanbar.com/web/10/10.php')
    key = r.headers['FLAG']
    flag = base64.b64decode(key).decode().split(':')[1]
    para = {'key':flag}
    r = requests.post('http://ctf5.shiyanbar.com/web/10/10.php',data = para)
    print(r.text)
    

    执行一下就得到flag。

    拐弯抹角

    考察PHP代码审计,其实也就是一些常用的绕过姿势

    其实这道题的主要目的还是教学,真正需要绕过的地方很简单,只有两处:

    payload:http://ctf5.shiyanbar.com/indirection/index.php/index.php

    成功拿到flag。

    天网管理系统

    考察PHP弱类型绕过md5()函数、PHP布尔类型序列化数组绕过

    打开链接,什么都没发现,于是看网页源代码,在注释里发现了一些信息:

    把用户名改成QNKCDZO,提交,出现了一条提示信息:

    访问一下这个链接:

    又发现了一段PHP代码:

    一开始没明白,后来翻了翻网上的资料,才知道这里应该怎么做:

    https://www.cnblogs.com/ssooking/p/5877086.html
    代码意思是把post提交的password值经过"反序列化"得到一个数组,要求数组里的user和pass都等于某个值时就打印flag。
    但是我们不知道两处???到底是什么,因此无法考虑用php函数构造这样的值。
    别忘了还有一个提示: "伟大的科学家php方言道:成也布尔,败也布尔" ,bool类型的true跟任意字符串可以弱类型相等。因此我们可以构造bool类型的序列化数据 ,无论比较的值是什么,结果都为true。(a代表array,s代表string,b代表bool,而数字代表个数/长度)
    构造password值为: a:2:{s:4:"user";b:1;s:4:"pass";b:1;}

    将这个值提交到password得到flag。

    目前还是不是很懂,等以后把PHP再学学应该就能看懂了。

    忘记密码了

    考察vim异常退出产生.swp文件泄露

    一进去是一个页面,没找到什么有效的信息,看了一眼网页源代码发现“Vim”,做HGAME的时候就做到过Vim异常退出产生.swp文件泄露的题目,所以这道题应该也是一样的道理,肯定有一步要用到这个。

    同时,在Vim的上一行也发现了管理员的邮箱。

    试了一下管理员的邮箱,发现不行,于是随便写点什么东西提交一下,得到以下结果:

    访问了一下那个连接,发现页面一闪而过,最终还是回到了step1.php,那么在这个step2.php里肯定有猫腻。

    用Burp Suite抓一下包,并且发送到Repeater模块:

    注意到那个"from action="submit.php",这里应该就是突破口,去访问一下它:

    本来以为是要改Cookie的,但是发现没有。联想到前面分析到的可能有.swp文件泄露,访问一下.submit.php.swp试试看:

    payload为:http://ctf5.shiyanbar.com/10/upload/submit.php?emailAddress=admin@simplexue.com&token=0e00000000

    成功拿到flag。

    Once More

    考察数组绕过正则表达式匹配

    访问一下链接,发现一个输入框,点一下View the source code可以看到一部分源代码:

    图上写错了,是必须有*-*

    随便写点东西提交一下,看看请求方法:

    是GET方法。

    ereg()不能处理数组,所以直接构造一个数组绕过:

    payload:http://ctf5.shiyanbar.com/web/more.php?password[]=1

    提交,得到flag。

    Guess Next Session

    代码审计题,考察Session和Cookies的关系

    查了一下,Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,如果没有Cookie,就得不到Session了。

    看了一眼源代码:

    所以写点东西提交一下,抓包,把Password和Cookie都删了就行。

    发包得到flag。

    相关文章

      网友评论

        本文标题:2019-03-14 实验吧CTF_Writeup之WEB(1)

        本文链接:https://www.haomeiwen.com/subject/emlqmqtx.html