记一次实战从任意文件下载到代码审计RCE
字数 1657 2025-09-23 19:27:46

从任意文件下载到代码审计RCE实战教学

前言

本教学文档详细记录了一次完整的渗透测试过程,从黑盒测试发现任意文件下载漏洞开始,通过代码审计最终实现远程代码执行(RCE)的完整流程。该案例针对.NET框架的Web应用,涉及Windows Server环境下的漏洞利用。

第一阶段:目标发现与信息收集

目标发现

  1. 使用fofa等工具提取目标子域
  2. 测试子域存活状态并进行去重筛查
  3. 逐个访问筛选后的目标进行初步测试

发现漏洞入口

在目标站点https://edocs.xxx.ccc发现可疑接口:

  • 接口命名表明是文件下载功能
  • 构造测试POC:https://edocs.xxx.ccc/Home/DownloadXXXXXXt?filename=../../../../../../../../etc/passwd
  • 虽然.NET报错未找到文件,但确认了环境为Windows Server + .NET组合

第二阶段:任意文件下载漏洞利用

尝试获取敏感文件

尝试下载Windows系统中的关键文件:

C:\Windows\System32\config\SAM       # 本地用户密码哈希(NTLM)
C:\Windows\System32\config\SYSTEM    # SAM数据库的启动密钥
C:\Windows\System32\config\SECURITY  # 安全策略和缓存域登录信息
C:\Windows\System32\config\SOFTWARE  # 软件配置和安装信息
C:\Windows\System32\config\DEFAULT   # 默认用户配置文件
C:\lsass.dmp                         # LSASS进程内存转储(含明文密码)
C:\Windows\MEMORY.DMP                # 系统完整内存转储
C:\hiberfil.sys                      # 系统休眠文件
C:\pagefile.sys                      # 虚拟内存页面文件

获取源码策略

由于无法直接获取敏感凭证文件,转向获取源码:

  1. 猜测项目存放磁盘:C、D、E等
  2. 爆破源码存放目录:wwwroot、Webapp、inetpub、App_[Name]等
  3. 根据域名edocs猜测源码目录名称
  4. 尝试爆破bin目录下的dll名称

最终成功构造路径:D:/webapp/edocs_v2/bin/edocs.dll

源码分析工具

使用ILSpy工具对下载的DLL进行反编译并导出源码

拓展思路:通过第一个DLL中的依赖包引用,拼接bin目录下的其他DLL进行下载

第三阶段:代码审计

项目结构分析

  1. 路由配置:经典MVC路由模式{controller}/{action}/{id}

    • 默认控制器:"Home"
    • 默认动作:"Index"
    • id参数可选
  2. 鉴权机制

    • 使用SsoAuthorize属性控制接口访问权限
    • 设置了SsoAuthorize的接口至少需要登录才能访问
    • 审计重点:
      • 系统如何校验登录状态,凭据能否伪造
      • 寻找未设置SsoAuthorize的高危接口

前台任意文件下载漏洞分析

发现未设置SsoAuthorize的下载接口:

  • 传入filenametitle参数
  • 关键代码:
    string filename = array; // 直接使用用户输入的filename
    if (filename.EndsWith(".zip")) {
        // 设置zip的MIME类型
    } else {
        // 设置其他MIME类型
    }
    
  • 漏洞点:未对filename进行路径限制,导致目录遍历

后台文件上传与ZIP解压RCE

发现需登录且有create/update权限的文件上传接口:

  1. 接收文件数组和报告ID参数
  2. 获取文件名和后缀
  3. 检查文件存在且有内容
  4. 创建上传目录(如不存在)
  5. 仅接收zip和pdf文件

ZIP解压漏洞

if (fileExtension == ".zip") {
    ZipLibs.UnZip(tempFilePath, uploadPath);
}

解压方法UnZip实现:

  • 遍历zip中的条目
  • 跳过.ini文件
  • 创建对应文件并写入内容
  • 漏洞点:未校验文件名合法性,可解压文件到任意目录

利用链

  1. 上传恶意zip文件
  2. 利用解压功能将文件写入可执行目录
  3. 实现远程代码执行

第四阶段:其他发现

  • FTP硬编码配置等凭证泄露问题
  • 其他未设置SsoAuthorize的高危接口

总结与防御建议

漏洞总结

  1. 任意文件下载

    • 未限制文件路径
    • 未验证用户权限
  2. ZIP解压RCE

    • 未校验解压路径
    • 未限制解压文件类型

防御建议

  1. 对文件下载功能:

    • 限制可访问的文件目录
    • 实现严格的权限验证
    • 对用户输入进行规范化处理
  2. 对文件上传与解压功能:

    • 校验解压路径,限制在指定目录内
    • 检查解压文件类型
    • 实现内容校验机制
    • 使用安全的解压库
  3. 通用安全措施:

    • 最小权限原则
    • 输入验证与输出编码
    • 定期安全审计
    • 敏感信息加密存储

工具与资源

  • 信息收集:fofa、子域名爆破工具
  • 漏洞利用:目录遍历fuzz工具
  • 代码审计:ILSpy、dnSpy等.NET反编译工具
  • 漏洞验证:Burp Suite、Postman等HTTP工具

通过本案例,我们展示了从黑盒测试到白盒审计的完整渗透流程,强调了代码审计在发现复杂漏洞中的重要性,以及防御措施的实施要点。

从任意文件下载到代码审计RCE实战教学 前言 本教学文档详细记录了一次完整的渗透测试过程,从黑盒测试发现任意文件下载漏洞开始,通过代码审计最终实现远程代码执行(RCE)的完整流程。该案例针对.NET框架的Web应用,涉及Windows Server环境下的漏洞利用。 第一阶段:目标发现与信息收集 目标发现 使用fofa等工具提取目标子域 测试子域存活状态并进行去重筛查 逐个访问筛选后的目标进行初步测试 发现漏洞入口 在目标站点 https://edocs.xxx.ccc 发现可疑接口: 接口命名表明是文件下载功能 构造测试POC: https://edocs.xxx.ccc/Home/DownloadXXXXXXt?filename=../../../../../../../../etc/passwd 虽然.NET报错未找到文件,但确认了环境为Windows Server + .NET组合 第二阶段:任意文件下载漏洞利用 尝试获取敏感文件 尝试下载Windows系统中的关键文件: 获取源码策略 由于无法直接获取敏感凭证文件,转向获取源码: 猜测项目存放磁盘:C、D、E等 爆破源码存放目录:wwwroot、Webapp、inetpub、App_ [ Name ]等 根据域名 edocs 猜测源码目录名称 尝试爆破bin目录下的dll名称 最终成功构造路径: D:/webapp/edocs_v2/bin/edocs.dll 源码分析工具 使用ILSpy工具对下载的DLL进行反编译并导出源码 拓展思路 :通过第一个DLL中的依赖包引用,拼接bin目录下的其他DLL进行下载 第三阶段:代码审计 项目结构分析 路由配置 :经典MVC路由模式 {controller}/{action}/{id} 默认控制器:"Home" 默认动作:"Index" id参数可选 鉴权机制 : 使用 SsoAuthorize 属性控制接口访问权限 设置了 SsoAuthorize 的接口至少需要登录才能访问 审计重点: 系统如何校验登录状态,凭据能否伪造 寻找未设置 SsoAuthorize 的高危接口 前台任意文件下载漏洞分析 发现未设置 SsoAuthorize 的下载接口: 传入 filename 和 title 参数 关键代码: 漏洞点:未对 filename 进行路径限制,导致目录遍历 后台文件上传与ZIP解压RCE 发现需登录且有create/update权限的文件上传接口: 接收文件数组和报告ID参数 获取文件名和后缀 检查文件存在且有内容 创建上传目录(如不存在) 仅接收zip和pdf文件 ZIP解压漏洞 : 解压方法 UnZip 实现: 遍历zip中的条目 跳过.ini文件 创建对应文件并写入内容 漏洞点 :未校验文件名合法性,可解压文件到任意目录 利用链 : 上传恶意zip文件 利用解压功能将文件写入可执行目录 实现远程代码执行 第四阶段:其他发现 FTP硬编码配置等凭证泄露问题 其他未设置 SsoAuthorize 的高危接口 总结与防御建议 漏洞总结 任意文件下载 : 未限制文件路径 未验证用户权限 ZIP解压RCE : 未校验解压路径 未限制解压文件类型 防御建议 对文件下载功能: 限制可访问的文件目录 实现严格的权限验证 对用户输入进行规范化处理 对文件上传与解压功能: 校验解压路径,限制在指定目录内 检查解压文件类型 实现内容校验机制 使用安全的解压库 通用安全措施: 最小权限原则 输入验证与输出编码 定期安全审计 敏感信息加密存储 工具与资源 信息收集 :fofa、子域名爆破工具 漏洞利用 :目录遍历fuzz工具 代码审计 :ILSpy、dnSpy等.NET反编译工具 漏洞验证 :Burp Suite、Postman等HTTP工具 通过本案例,我们展示了从黑盒测试到白盒审计的完整渗透流程,强调了代码审计在发现复杂漏洞中的重要性,以及防御措施的实施要点。