任意文件下载漏洞
概述
网站由于业务需求,提供文件查看或下载功能,如果对用户查看或下载的文件不做限制,恶意用户就能够查看或下载任意文件,任意文件类型包含源代码文件、敏感文件等。
利用条件
- 存在读文件的函数
- 读取文件的路径可控且未校验或校验不严
- 输出了文件内容
常见敏感文件路径
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 //MySQL文件
/etc/httpd/conf/httpd.conf
/root/.bash_history //操作历史文件信息
/root/.MySQL_history //MySQL操作历史文件信息
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts
/proc/config.gz
修复方案
- 过滤
../ ./
等敏感字符,使用户在URL中不能回溯上级目录
Windows中可用..\
来绕过
- 文件下载时判断输入的路径,最好的方法是文件应该在数据库中一一对应,避免通过输入绝对路径来获取文件
- php.ini配置open_basedir限定文件访问范围