Contents

KCTF 2022春季赛 第四题 飞蛾扑火

文章发布至看雪《KCTF 2022春季赛 第四题 飞蛾扑火》

简单分析

周末饭后,打开网站,查看html源码如下:

<img src="url.php?url=https://ctf.pediy.com/upload/team/762/team236762.png">

url.php可以加载网站,换个地址提示"host not allow",很明显用了白名单。

尝试127.0.0.1,提示not found,说明可访问本地,于是用file://配合burp爆破目录,找到file://127.0.0.1/../../../../../etc/passwd。

看了一圈docker信息,pid/uid/status,找到web目录,没找到突破口,后面才看到注释里写了phpinfo.php,眼神不好…

根据phpinfo找到网站目录:/var/www/html,拿到url.php源码,完成第一步。

陷入僵局

源码提示:

//echo curl_request("http://123.57.254.42/flag.php","get",[],true,5);//get flag

请求提示error ip,说明得通过ssrf去请求。

现场学习《SSRF-Exploiting-URL》,slide里提示了利用php的parse_url和curl解析不一致来实现绕过。例如:http://@{curl_host}@{php_host}/flag.php,试了几次不行,但又看不到错误。

于是把php包下载下来,开启curl extension,修改代码把curl的错误信息打出来:php.exe test.php,调试输出各种信息,最后确定这个bug已经修复。

尝试绕过伪造IP也不行,暂时陷入僵局…

神秘代码

周末这大好天气不能浪费了,出去逛一圈… ………. ………. ………. 回来后,继续思考:

坚信这个curl一定存在某个神秘bug...

于是从phpinfo拿到curl版本,google搜索神秘代码:

curl 7.64.0 parse_url

找到https://hackerone.com/reports/1049624,看来这个版本真存在问题(解析scheme时),本地调试curl 7.64.0 确认解析host通过后,请求服务端拿到flag:

url.php?url=123.57.254.42://127.0.0.1/../flag.php
flag{xxx_999()xx*@eeEEE}