原理

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

尽管文件下载漏洞不会直接触及网站权限,但是会泄露敏感信息,间接导致权限丢失

产生条件

  1. 存在读文件的函数

  2. 读取文件的路径用户可控且未校验或校验不严

  3. 输出了文件内容

危害

  • 直接泄露敏感信息
  • 间接导致权限丢失

分类

无

检测

检测方法

分白盒、黑盒测试,这里重点讲手工看参数值及功能点

检测位置

文件名、参数值、目录符号

1
2
3
4
5
6
download.php?path=
download.php?file=
down.php?file=
data.php?file=
readfile.php?file=
read.php?filename=

利用

利用目的

常见文件

  • 后台日志等可见文件

敏感文件

  • 数据库配置文件
  • 各种接口文件
  • 秘钥信息等文件

利用方法

下载或读取敏感文件

敏感信息位置

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参数

如何获取要下载的文件路径

  1. 扫描工具爬行或扫描地址
  2. 下载好的文件代码中去分析路径或包含文件路径

修复与防御方案

  • 部署WAF产品
  • 固定目录或过滤目录符号
  • 目录权限设置或单独文件权限设置

站内搜索

没有找到内容!