记一次Net代码审计之mou应用云平台
字数 2159 2025-09-23 19:27:46

.NET代码审计实战:Mou应用云平台漏洞分析与复现

环境准备

  1. 获取目标应用程序的二进制文件
  2. 使用反编译工具(如dnSpy、ILSpy或dotPeek)反编译bin目录下的所有DLL文件
  3. 分析反编译后的源代码,重点关注权限控制和文件操作相关代码

鉴权机制分析

API权限控制

  • Web API部分采用"请求头token校验+服务鉴权"双重机制
  • 典型示例:APPController类中的大部分API方法
  • 工作流程:
    1. 检查请求头中的token
    2. 调用Authorize方法进行鉴权验证
    3. 鉴权通过→执行后续业务逻辑
    4. 鉴权失败→直接返回错误信息

MVC Controller权限风险

  • 大量Action方法使用[IgnoreRightFilter]特性标记
  • 此特性导致系统统一权限过滤器被绕过,支持匿名访问
  • 受影响的功能模块:
    • 内容管理接口(如NewsManage/UploadNewsImg)
    • 开关查询接口(如Swicth/*下的多数查询接口)
    • 数据导出与统计接口
    • 地图相关接口

会话管理问题

  • 系统生成ASP.NET_SessionId会话标识
  • 但多数接口未依赖Session进行鉴权或授权
  • 会话机制未有效利用,存在资源浪费
  • 无法通过Session强化身份验证安全性

Header Token鉴权实现

// 伪代码示例
string token = Request.Headers["token"];
if(!Authorize(token))
{
    return "Error: Authentication failed";
}
// 继续执行业务逻辑

IgnoreRightFilter滥用问题

  • MVC Controller使用IgnoreRightFilter作为统一权限过滤器
  • 导致接口可匿名访问
  • 返回直达Web根目录的URL,增加安全风险

文件上传漏洞分析

第一处文件上传漏洞

位置:Page_Load事件中的文件上传处理代码

漏洞代码分析

if (Request.Files.Count > 0)
{
    HttpPostedFile file = Request.Files[0];
    string fileName = file.FileName;
    
    // 文件名校验逻辑薄弱
    int underlineIndex = fileName.IndexOf('_');
    string subDir = fileName.Substring(underlineIndex + 1).Replace(".mp4", "");
    
    // 路径拼接
    string savePath = "~/Upload/Video/" + subDir + "/";
    string fullPath = Server.MapPath(savePath);
    
    // 目录不存在则创建
    if (!Directory.Exists(fullPath))
    {
        Directory.CreateDirectory(fullPath);
    }
    
    // 直接保存文件,无任何安全过滤
    file.SaveAs(Path.Combine(fullPath, fileName));
    Response.Write("Success");
}

安全缺陷

  1. 未验证文件类型和扩展名
  2. 未检查文件内容(如魔数验证)
  3. 未限制文件大小
  4. 使用原始文件名,可能包含路径遍历字符
  5. 无病毒扫描机制

第二处文件上传漏洞

位置:另一处Page_Load方法中的上传功能

漏洞特征

  • 同样缺乏文件内容过滤机制
  • 直接接收并保存用户上传的文件
  • 未实施任何安全防护措施

第三处文件上传漏洞

位置:LLUserFileUpload.aspx页面

技术细节

  1. 文件接收:HttpPostedFile = Request.Files[...]
  2. 路径构造方式:
    • Server.MapPath("~/Upload/...")
    • SettingGroupConfig.*UploadPath配置项
  3. 目标文件名来源:
    • 直接使用httpPostedFile.FileName
    • 或从表单中获取filename字段值

过滤机制分析

  • 扩展名白名单来源:SettingGroupConfig.UploadIMGTypeUploadFileType等配置
  • 扩展名校验:使用Path.GetExtension(safeName),但可能存在绕过问题
  • 内容类型检查:仅依赖Content-Type(可被伪造)
  • 内容校验缺失:无魔数检测、无图像二次处理

可能的绕过技术

  1. 大小写绕过:.ASPX vs .aspx
  2. 特殊字符:poc.aspx;.jpgpoc.asp%00.jpg
  3. NTFS流特性:poc.aspx::$DATA
  4. 非常规扩展名:.asa.cdx.asmx
  5. 双扩展名:file.aspx.jpg

任意文件下载漏洞

漏洞位置:未对file参数进行校验的文件下载接口

漏洞代码分析

string file = Request.QueryString["file"];
// 直接拼接路径,无任何防护
string physicalPath = Server.MapPath("~" + file);

// 下载文件
ResponseFile(physicalPath);

安全风险

  1. 路径遍历:可通过../../访问Web根目录外的文件
  2. 敏感文件泄露:可下载web.config、.aspx源代码、.dll程序集等
  3. 系统文件泄露:可能访问系统关键文件

漏洞复现指南

文件上传漏洞复现

  1. 构造恶意请求,上传包含恶意代码的文件
  2. 绕过技巧:
    • 修改Content-Type为允许的类型
    • 使用特殊文件名格式
    • 利用解析差异

任意文件下载复现

  1. 构造URL:http://target.com/Download?file=../../web.config
  2. 尝试下载各种敏感文件:
    • 配置文件:web.config、appsettings.json
    • 源代码文件:.aspx、.cs
    • 程序集文件:bin/*.dll

修复建议

文件上传漏洞修复

  1. 实施多层次验证:
    • 扩展名白名单验证
    • 文件内容魔数验证
    • 病毒扫描
  2. 安全存储:
    • 文件重命名(使用GUID)
    • 存储路径不可预测
    • 文件存储在Web根目录外

任意文件下载修复

  1. 移除非必要的文件下载功能
  2. 实施严格的路径验证:
    • 禁止路径遍历字符
    • 基于ID的文件映射系统
  3. 权限验证:下载前验证用户权限
  4. 日志记录:记录所有下载操作

鉴权机制修复

  1. 移除不必要的IgnoreRightFilter特性
  2. 实施统一的权限验证框架
  3. 加强会话管理,充分利用ASP.NET会话机制
  4. 实施API密钥管理和访问控制

监控与审计

  1. 部署文件操作监控
  2. 实施异常下载行为检测
  3. 定期审计系统权限配置
  4. 建立安全漏洞应急响应流程

参考资源

  1. .NET安全编码指南
  2. OWASP文件上传安全指南
  3. ASP.NET MVC安全最佳实践

通过本教学文档,安全审计人员可以全面了解Mou应用云平台的安全漏洞及其修复方法,提高.NET应用程序的安全防护能力。

.NET代码审计实战:Mou应用云平台漏洞分析与复现 环境准备 获取目标应用程序的二进制文件 使用反编译工具(如dnSpy、ILSpy或dotPeek)反编译bin目录下的所有DLL文件 分析反编译后的源代码,重点关注权限控制和文件操作相关代码 鉴权机制分析 API权限控制 Web API部分采用"请求头token校验+服务鉴权"双重机制 典型示例:APPController类中的大部分API方法 工作流程: 检查请求头中的token 调用Authorize方法进行鉴权验证 鉴权通过→执行后续业务逻辑 鉴权失败→直接返回错误信息 MVC Controller权限风险 大量Action方法使用 [IgnoreRightFilter] 特性标记 此特性导致系统统一权限过滤器被绕过,支持匿名访问 受影响的功能模块: 内容管理接口(如NewsManage/UploadNewsImg) 开关查询接口(如Swicth/* 下的多数查询接口) 数据导出与统计接口 地图相关接口 会话管理问题 系统生成ASP.NET_ SessionId会话标识 但多数接口未依赖Session进行鉴权或授权 会话机制未有效利用,存在资源浪费 无法通过Session强化身份验证安全性 Header Token鉴权实现 IgnoreRightFilter滥用问题 MVC Controller使用IgnoreRightFilter作为统一权限过滤器 导致接口可匿名访问 返回直达Web根目录的URL,增加安全风险 文件上传漏洞分析 第一处文件上传漏洞 位置 :Page_ Load事件中的文件上传处理代码 漏洞代码分析 : 安全缺陷 : 未验证文件类型和扩展名 未检查文件内容(如魔数验证) 未限制文件大小 使用原始文件名,可能包含路径遍历字符 无病毒扫描机制 第二处文件上传漏洞 位置 :另一处Page_ Load方法中的上传功能 漏洞特征 : 同样缺乏文件内容过滤机制 直接接收并保存用户上传的文件 未实施任何安全防护措施 第三处文件上传漏洞 位置 :LLUserFileUpload.aspx页面 技术细节 : 文件接收: HttpPostedFile = Request.Files[...] 路径构造方式: Server.MapPath("~/Upload/...") SettingGroupConfig.*UploadPath 配置项 目标文件名来源: 直接使用 httpPostedFile.FileName 或从表单中获取filename字段值 过滤机制分析 : 扩展名白名单来源: SettingGroupConfig.UploadIMGType 、 UploadFileType 等配置 扩展名校验:使用 Path.GetExtension(safeName) ,但可能存在绕过问题 内容类型检查:仅依赖Content-Type(可被伪造) 内容校验缺失:无魔数检测、无图像二次处理 可能的绕过技术 : 大小写绕过: .ASPX vs .aspx 特殊字符: poc.aspx;.jpg 、 poc.asp%00.jpg NTFS流特性: poc.aspx::$DATA 非常规扩展名: .asa 、 .cdx 、 .asmx 双扩展名: file.aspx.jpg 任意文件下载漏洞 漏洞位置 :未对file参数进行校验的文件下载接口 漏洞代码分析 : 安全风险 : 路径遍历:可通过 ../../ 访问Web根目录外的文件 敏感文件泄露:可下载web.config、.aspx源代码、.dll程序集等 系统文件泄露:可能访问系统关键文件 漏洞复现指南 文件上传漏洞复现 构造恶意请求,上传包含恶意代码的文件 绕过技巧: 修改Content-Type为允许的类型 使用特殊文件名格式 利用解析差异 任意文件下载复现 构造URL: http://target.com/Download?file=../../web.config 尝试下载各种敏感文件: 配置文件:web.config、appsettings.json 源代码文件: .aspx、 .cs 程序集文件:bin/* .dll 修复建议 文件上传漏洞修复 实施多层次验证: 扩展名白名单验证 文件内容魔数验证 病毒扫描 安全存储: 文件重命名(使用GUID) 存储路径不可预测 文件存储在Web根目录外 任意文件下载修复 移除非必要的文件下载功能 实施严格的路径验证: 禁止路径遍历字符 基于ID的文件映射系统 权限验证:下载前验证用户权限 日志记录:记录所有下载操作 鉴权机制修复 移除不必要的IgnoreRightFilter特性 实施统一的权限验证框架 加强会话管理,充分利用ASP.NET会话机制 实施API密钥管理和访问控制 监控与审计 部署文件操作监控 实施异常下载行为检测 定期审计系统权限配置 建立安全漏洞应急响应流程 参考资源 .NET安全编码指南 OWASP文件上传安全指南 ASP.NET MVC安全最佳实践 通过本教学文档,安全审计人员可以全面了解Mou应用云平台的安全漏洞及其修复方法,提高.NET应用程序的安全防护能力。