记一次实战从任意文件下载到代码审计RCE
字数 1657 2025-09-23 19:27:46
从任意文件下载到代码审计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:\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 # 虚拟内存页面文件
获取源码策略
由于无法直接获取敏感凭证文件,转向获取源码:
- 猜测项目存放磁盘: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参数 - 关键代码:
string filename = array; // 直接使用用户输入的filename if (filename.EndsWith(".zip")) { // 设置zip的MIME类型 } else { // 设置其他MIME类型 } - 漏洞点:未对
filename进行路径限制,导致目录遍历
后台文件上传与ZIP解压RCE
发现需登录且有create/update权限的文件上传接口:
- 接收文件数组和报告ID参数
- 获取文件名和后缀
- 检查文件存在且有内容
- 创建上传目录(如不存在)
- 仅接收zip和pdf文件
ZIP解压漏洞:
if (fileExtension == ".zip") {
ZipLibs.UnZip(tempFilePath, uploadPath);
}
解压方法UnZip实现:
- 遍历zip中的条目
- 跳过.ini文件
- 创建对应文件并写入内容
- 漏洞点:未校验文件名合法性,可解压文件到任意目录
利用链:
- 上传恶意zip文件
- 利用解压功能将文件写入可执行目录
- 实现远程代码执行
第四阶段:其他发现
- FTP硬编码配置等凭证泄露问题
- 其他未设置
SsoAuthorize的高危接口
总结与防御建议
漏洞总结
-
任意文件下载:
- 未限制文件路径
- 未验证用户权限
-
ZIP解压RCE:
- 未校验解压路径
- 未限制解压文件类型
防御建议
-
对文件下载功能:
- 限制可访问的文件目录
- 实现严格的权限验证
- 对用户输入进行规范化处理
-
对文件上传与解压功能:
- 校验解压路径,限制在指定目录内
- 检查解压文件类型
- 实现内容校验机制
- 使用安全的解压库
-
通用安全措施:
- 最小权限原则
- 输入验证与输出编码
- 定期安全审计
- 敏感信息加密存储
工具与资源
- 信息收集:fofa、子域名爆破工具
- 漏洞利用:目录遍历fuzz工具
- 代码审计:ILSpy、dnSpy等.NET反编译工具
- 漏洞验证:Burp Suite、Postman等HTTP工具
通过本案例,我们展示了从黑盒测试到白盒审计的完整渗透流程,强调了代码审计在发现复杂漏洞中的重要性,以及防御措施的实施要点。