buuctf [第二章 web进阶]SSRF Training
首先点击intersting challenge,查看后台源码。可以看到是将输入的ip通过safe_request_url()调用check_inner_ip()来判断是不是内网ip。如果是内网ip,那么直接输出;如果不是,则会创建一个curl会话,并向目标url发起请求,将返回结果输出。
根据主页提示,flag位于flag.php中,但是如果直接输入http://127.0.0.1/flag.php,其hostname是127.0.0.1,会被认为是内网ip,从而输出不了flag(但目前是可以的,存疑)
本题答案是输入
http://@127.0.0.1:80@www.baidu.com/flag.php
可以看到这种写法使得parse_url函数将hostname解析为www.baidu.com,这是一个公网ip,而实际url的ip还是127.0.0.1,这样就成功绕过了检查。