跨目录上传+任意文件读取rce记录
字数 1283 2025-08-06 08:34:49

跨目录上传与任意文件读取漏洞利用实战教学

漏洞概述

本文记录了一个通过跨目录上传结合任意文件读取漏洞实现远程代码执行(RCE)的完整过程。该漏洞链涉及两个关键漏洞:

  1. 跨目录文件上传漏洞
  2. 任意文件读取漏洞

通过这两个漏洞的组合利用,最终实现了系统控制。

1. 跨目录上传漏洞利用

1.1 漏洞发现

在对某系统测试时发现一个上传附件功能,上传文件后返回包中包含了:

  • 重命名后的文件名
  • 系统绝对路径

1.2 参数分析

上传请求中的type参数值出现在返回的绝对路径中,推测type参数控制上传目录。

测试验证:

  • type值改为1,确认上传目录随之改变
  • 确认可以上传.jsp文件

1.3 目录穿越测试

尝试在type参数中使用../进行目录穿越:

type=../../../path

测试成功,实现了跨目录上传。

1.4 关键信息收集

从上传返回的绝对路径中获取了当前用户名称,为后续利用提供关键信息。

2. 任意文件读取漏洞利用

2.1 漏洞发现

在文件预览功能处发现请求链接格式:

DownloadServlet?type=W***J&filename=QQ图片20230414145425.jpg&pyName=9be6c164-d5a9-4a1e-a555-139ec1ce383d.jpg

通过构造filenamepyName参数,实现了任意文件读取。

2.2 关键配置文件路径

通过任意文件读取可以获取以下关键信息:

Tomcat相关路径

/usr/local/tomcat/conf/tomcat-users.xml
/usr/local/tomcat/bin/catalina.sh

Apache相关路径

/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/httpd/access_log
/etc/httpd/logs/access_log
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log

Nginx相关路径

/var/log/nginx/access.log
/var/log/nginx/error.log
/usr/local/var/log/nginx/access.log
/usr/local/nginx/logs
/etc/nginx/nginx.conf

Linux系统关键文件

/etc/passwd                     账户信息
/etc/shadow                     账户密码文件
/etc/my.cnf                     mysql配置文件
/root/.ssh/id_rsa               ssh-rsa私钥
/etc/redhat-release             系统版本 
/root/.bash_history             用户历史命令记录文件
/home/user/.bash_history        特定用户的历史命令记录文件
/root/.mysql_history            mysql历史命令记录文件
/var/lib/mlocate/mlocate.db     全文件路径
/proc/net/fib_trie              内网IP
/proc/self/environ              环境变量
/proc/self/loginuid             当前用户uid

2.3 实际利用

通过读取/home/user/.bash_history文件,成功获取了Tomcat的web路径。

3. 获取Shell

3.1 上传Webshell

利用跨目录上传漏洞,将JSP Webshell上传至获取到的Tomcat web路径。

3.2 访问Webshell

直接访问上传的Webshell时遇到问题:

  • 根目录下不解析,跳转到登录页面
  • 但跳转目录携带了访问的jsp路径

解决方案:

  • 如果系统提供注册功能,注册账号后登录访问
  • 或尝试其他访问方式

4. 拓展利用技巧

4.1 无账号情况下的利用方案

  1. 上传至系统静态目录(如自动加载的JS文件目录)
  2. 尝试绕过Filter鉴权:
    • 目录白名单绕过
    • 文件后缀白名单绕过
  3. 寻找其他可直接访问且已知路径的Web目录

4.2 实战绕过案例

目录白名单绕过

通过构造特殊路径绕过目录限制

文件后缀白名单绕过

通过特殊文件后缀或双写绕过

其他情况绕过

根据具体系统特性寻找特殊绕过方式

5. 防御建议

  1. 文件上传功能:

    • 严格限制上传目录
    • 过滤../等目录穿越字符
    • 限制上传文件类型
    • 使用随机文件名存储
  2. 文件下载/预览功能:

    • 实现严格的路径校验
    • 禁止使用用户输入直接构造文件路径
    • 实现权限校验
  3. 系统配置:

    • 避免使用默认路径和配置
    • 限制敏感文件的访问权限
    • 定期清理历史命令记录
  4. 日志监控:

    • 监控异常文件访问行为
    • 对多次尝试访问敏感文件的行为进行告警

总结

本案例展示了如何通过组合利用跨目录上传和任意文件读取漏洞实现系统控制。关键在于:

  1. 发现并验证初始漏洞
  2. 通过漏洞获取更多系统信息
  3. 利用获取的信息扩大攻击面
  4. 最终实现远程代码执行

这种漏洞链利用方式在实际渗透测试中非常常见,防御时需要从多个层面进行防护。

跨目录上传与任意文件读取漏洞利用实战教学 漏洞概述 本文记录了一个通过跨目录上传结合任意文件读取漏洞实现远程代码执行(RCE)的完整过程。该漏洞链涉及两个关键漏洞: 跨目录文件上传漏洞 任意文件读取漏洞 通过这两个漏洞的组合利用,最终实现了系统控制。 1. 跨目录上传漏洞利用 1.1 漏洞发现 在对某系统测试时发现一个上传附件功能,上传文件后返回包中包含了: 重命名后的文件名 系统绝对路径 1.2 参数分析 上传请求中的 type 参数值出现在返回的绝对路径中,推测 type 参数控制上传目录。 测试验证: 将 type 值改为 1 ,确认上传目录随之改变 确认可以上传 .jsp 文件 1.3 目录穿越测试 尝试在 type 参数中使用 ../ 进行目录穿越: 测试成功,实现了跨目录上传。 1.4 关键信息收集 从上传返回的绝对路径中获取了当前用户名称,为后续利用提供关键信息。 2. 任意文件读取漏洞利用 2.1 漏洞发现 在文件预览功能处发现请求链接格式: 通过构造 filename 和 pyName 参数,实现了任意文件读取。 2.2 关键配置文件路径 通过任意文件读取可以获取以下关键信息: Tomcat相关路径 Apache相关路径 Nginx相关路径 Linux系统关键文件 2.3 实际利用 通过读取 /home/user/.bash_history 文件,成功获取了Tomcat的web路径。 3. 获取Shell 3.1 上传Webshell 利用跨目录上传漏洞,将JSP Webshell上传至获取到的Tomcat web路径。 3.2 访问Webshell 直接访问上传的Webshell时遇到问题: 根目录下不解析,跳转到登录页面 但跳转目录携带了访问的jsp路径 解决方案: 如果系统提供注册功能,注册账号后登录访问 或尝试其他访问方式 4. 拓展利用技巧 4.1 无账号情况下的利用方案 上传至系统静态目录(如自动加载的JS文件目录) 尝试绕过Filter鉴权: 目录白名单绕过 文件后缀白名单绕过 寻找其他可直接访问且已知路径的Web目录 4.2 实战绕过案例 目录白名单绕过 通过构造特殊路径绕过目录限制 文件后缀白名单绕过 通过特殊文件后缀或双写绕过 其他情况绕过 根据具体系统特性寻找特殊绕过方式 5. 防御建议 文件上传功能: 严格限制上传目录 过滤 ../ 等目录穿越字符 限制上传文件类型 使用随机文件名存储 文件下载/预览功能: 实现严格的路径校验 禁止使用用户输入直接构造文件路径 实现权限校验 系统配置: 避免使用默认路径和配置 限制敏感文件的访问权限 定期清理历史命令记录 日志监控: 监控异常文件访问行为 对多次尝试访问敏感文件的行为进行告警 总结 本案例展示了如何通过组合利用跨目录上传和任意文件读取漏洞实现系统控制。关键在于: 发现并验证初始漏洞 通过漏洞获取更多系统信息 利用获取的信息扩大攻击面 最终实现远程代码执行 这种漏洞链利用方式在实际渗透测试中非常常见,防御时需要从多个层面进行防护。