<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
$ip = gethostbyname($x['host']);
echo '</br>'.$ip.'</br>';
if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {die('ip!');
}echo file_get_contents($_POST['url']);
}
else{die('scheme');
}
?> scheme
这块代码审计没碰过废了好大力气才看懂,其实就是post传参url,将 url拆解成 scheme(协议)、host(主机)、path(路径)等部分传给变量x,,然后if语句检测scheme部分是不是http或者https。gethostbyname函数会直接返回主机ip。if语句判断ip是不是私有ip或者回环ip,是的话就输出ip!结束,不是的话就会输出URL读取到的文件内容。如果不是http协议就会输出schema结束
综合上述代码内容,基本上ip转数字,302重定向,多类型回环地址基本都用不了,怎么办呢。别急,还能用DNS重定向。
DNS重定向也就是在DNS解析服务端和客户端url的短暂间隔内,更改url对应的ip即可达到访问内网的目的,但是这个我只能说有可能成功,不一定能完全成功,需要多试几次(运气好一次试出来当我没说)
提供一个实现dns重定向的网站,这里A和B里面公有ip和私有ip写哪都可以
[https://lock.cmpxchg8b.com/rebinder.html?tdsourcetag=s_pctim_aiomsg](https://lock.cmpxchg8b.com/rebinder.html?tdsourcetag=s_pctim_aiomsg)