实战渗透-从敏感文件泄露到Getshell
字数 1396 2025-08-20 18:16:55

实战渗透:从敏感文件泄露到Getshell - 详细教学文档

1. 目标系统信息收集

  • 目标类型:大型仪器预约平台
  • 技术栈
    • 中间件:IIS
    • 开发语言:.NET (MVC架构)
  • 特点:.NET平台不区分大小写,有利于字典生成和攻击尝试

2. 初始攻击路径

2.1 备份文件发现

  1. 使用FOFA搜索相同系统的站点
  2. 使用御剑等扫描工具扫描备份文件
    • 常见备份文件名:web.rar备份.rar.bak
  3. 在某站点发现bak.rar备份文件
  4. 下载并解压后发现包含.NET平台的DLL文件(即网站源代码)

2.2 代码审计准备

  1. 使用.NET反编译工具(如dnSpy、ILSpy等)逆向DLL文件
  2. 重点关注MVC架构中的Controller(控制器)类

3. 漏洞挖掘过程

3.1 文件上传漏洞审计

  1. 搜索Controller类,寻找文件上传功能
  2. 发现两处潜在上传点:
    • 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

  1. 确定上传路由地址:/Lab/UploadLabOrg (MVC路由格式:/控制器名/方法名)
  2. 构造HTML上传表单:
    <form action="/Lab/UploadLabOrg" method="post" enctype="multipart/form-data">
        <input type="file" name="Filedata"/>
        <input type="submit" value="提交"/>
    </form>
    

4.2 绕过防护措施

  1. 初始上传失败原因分析:
    • 需要登录认证
    • 需要验证Referer头
  2. 解决方案:
    • 注册普通用户账户
    • 在请求中添加Referer头(与目标站点相同域)

4.3 最终利用

  1. 使用Burp Suite或修改HTML表单添加Referer头
  2. 上传webshell文件(如aspx、ashx等.NET支持的脚本文件)
  3. 访问上传的webshell获取系统权限

5. 防御建议

5.1 针对文件上传漏洞

  1. 实施严格的文件类型白名单校验
  2. 检查文件内容而不仅是扩展名
  3. 上传文件重命名(避免直接使用用户提供的文件名)
  4. 限制上传目录的执行权限

5.2 针对信息泄露

  1. 避免将备份文件存放在Web可访问目录
  2. 使用规范的版本控制系统而非直接备份源代码
  3. 实施适当的文件权限控制

5.3 其他防护措施

  1. 对所有敏感操作实施身份验证
  2. 对关键操作实施CSRF防护(但不应仅依赖Referer检查)
  3. 定期进行代码审计和安全测试

6. 总结

本案例展示了从信息收集到最终getshell的完整渗透流程,关键点在于:

  1. 通过备份文件泄露获取源代码
  2. 通过代码审计发现未严格校验的文件上传点
  3. 绕过简单的防护措施(Referer检查)
  4. 最终实现webshell上传

这种攻击方式在缺乏严格安全开发的.NET MVC应用中较为常见,开发人员应特别注意文件上传功能的实现安全性。

实战渗透:从敏感文件泄露到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 关键代码分析: ValidateLabOrganizationLogoUpload 方法仅检查: 文件大小限制 基本扩展名检查(无严格白名单) 移除特殊字符操作 关键漏洞 :缺乏严格的文件类型白名单校验 4. 漏洞利用过程 4.1 构造POC 确定上传路由地址: /Lab/UploadLabOrg (MVC路由格式:/控制器名/方法名) 构造HTML上传表单: 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应用中较为常见,开发人员应特别注意文件上传功能的实现安全性。