原理
一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。
尽管文件下载漏洞不会直接触及网站权限,但是会泄露敏感信息,间接导致权限丢失
产生条件
存在读文件的函数
读取文件的路径用户可控且未校验或校验不严
输出了文件内容
危害
- 直接泄露敏感信息
- 间接导致权限丢失
分类
无
检测
检测方法
分白盒、黑盒测试,这里重点讲手工看参数值及功能点
检测位置
文件名、参数值、目录符号
1 | download.php?path= |
利用
利用目的
常见文件
- 后台日志等可见文件
敏感文件
- 数据库配置文件
- 各种接口文件
- 秘钥信息等文件
利用方法
下载或读取敏感文件
敏感信息位置
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 //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa //ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore //记录每个访问计算机用户的公钥
/root/.ssh/known_hosts
//ssh会把每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf //mysql 配置文件
/etc/httpd/conf/httpd.conf // Apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
如何获取要下载的文件路径
- 扫描工具爬行或扫描地址
- 下载好的文件代码中去分析路径或包含文件路径
修复与防御方案
- 部署WAF产品
- 固定目录或过滤目录符号
- 目录权限设置或单独文件权限设置