实战渗透-从敏感文件泄露到Getshell
字数 1396 2025-08-20 18:16:55
实战渗透:从敏感文件泄露到Getshell - 详细教学文档
1. 目标系统信息收集
- 目标类型:大型仪器预约平台
- 技术栈:
- 中间件:IIS
- 开发语言:.NET (MVC架构)
- 特点:.NET平台不区分大小写,有利于字典生成和攻击尝试
2. 初始攻击路径
2.1 备份文件发现
- 使用FOFA搜索相同系统的站点
- 使用御剑等扫描工具扫描备份文件
- 常见备份文件名:
web.rar、备份.rar、.bak等
- 常见备份文件名:
- 在某站点发现
bak.rar备份文件 - 下载并解压后发现包含.NET平台的DLL文件(即网站源代码)
2.2 代码审计准备
- 使用.NET反编译工具(如dnSpy、ILSpy等)逆向DLL文件
- 重点关注MVC架构中的Controller(控制器)类
3. 漏洞挖掘过程
3.1 文件上传漏洞审计
- 搜索
Controller类,寻找文件上传功能 - 发现两处潜在上传点:
UserController.IniUserPhotoUpload方法LabController.UploadLabOrg方法
3.1.1 第一处上传点分析
- 路径:
UserController.IniUserPhotoUpload - 文件校验通过
MakeThumbnailByImg方法实现 - 限制文件扩展名为:jpg, jpeg, bmp, gif, png, ico
- 结论:有严格白名单校验,无法利用
3.1.2 第二处上传点分析
- 路径:
LabController.UploadLabOrg - 关键代码分析:
if (base.Request.Files.Count > 0) { fileSizeStr = FileUtility.GetFileSizeStr((double)base.Request.Files[0].ContentLength); string fileNameWithExtensionByPath = FileUtility.GetFileNameWithExtensionByPath(base.Request.Files[0].FileName); fileExt = FileUtility.GetFileExtByPath(base.Request.Files[0].FileName); if (!this.ValidateLabOrganizationLogoUpload(System.Web.HttpContext.Current.Request, fileExt, fileSizeStr, out errorMessage)) { result = false; } else { this.IniLabOrganizationLogoUpload(System.Web.HttpContext.Current.Request, fileId, fileExt, fileSizeStr, out saveImgPath, out errorMessage); result = true; } } ValidateLabOrganizationLogoUpload方法仅检查:- 文件大小限制
- 基本扩展名检查(无严格白名单)
- 移除特殊字符操作
- 关键漏洞:缺乏严格的文件类型白名单校验
4. 漏洞利用过程
4.1 构造POC
- 确定上传路由地址:
/Lab/UploadLabOrg(MVC路由格式:/控制器名/方法名) - 构造HTML上传表单:
<form action="/Lab/UploadLabOrg" method="post" enctype="multipart/form-data"> <input type="file" name="Filedata"/> <input type="submit" value="提交"/> </form>
4.2 绕过防护措施
- 初始上传失败原因分析:
- 需要登录认证
- 需要验证Referer头
- 解决方案:
- 注册普通用户账户
- 在请求中添加Referer头(与目标站点相同域)
4.3 最终利用
- 使用Burp Suite或修改HTML表单添加Referer头
- 上传webshell文件(如aspx、ashx等.NET支持的脚本文件)
- 访问上传的webshell获取系统权限
5. 防御建议
5.1 针对文件上传漏洞
- 实施严格的文件类型白名单校验
- 检查文件内容而不仅是扩展名
- 上传文件重命名(避免直接使用用户提供的文件名)
- 限制上传目录的执行权限
5.2 针对信息泄露
- 避免将备份文件存放在Web可访问目录
- 使用规范的版本控制系统而非直接备份源代码
- 实施适当的文件权限控制
5.3 其他防护措施
- 对所有敏感操作实施身份验证
- 对关键操作实施CSRF防护(但不应仅依赖Referer检查)
- 定期进行代码审计和安全测试
6. 总结
本案例展示了从信息收集到最终getshell的完整渗透流程,关键点在于:
- 通过备份文件泄露获取源代码
- 通过代码审计发现未严格校验的文件上传点
- 绕过简单的防护措施(Referer检查)
- 最终实现webshell上传
这种攻击方式在缺乏严格安全开发的.NET MVC应用中较为常见,开发人员应特别注意文件上传功能的实现安全性。