记一次Net代码审计之mou应用云平台
字数 2159 2025-09-23 19:27:46
.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鉴权实现
// 伪代码示例
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");
}
安全缺陷:
- 未验证文件类型和扩展名
- 未检查文件内容(如魔数验证)
- 未限制文件大小
- 使用原始文件名,可能包含路径遍历字符
- 无病毒扫描机制
第二处文件上传漏洞
位置:另一处Page_Load方法中的上传功能
漏洞特征:
- 同样缺乏文件内容过滤机制
- 直接接收并保存用户上传的文件
- 未实施任何安全防护措施
第三处文件上传漏洞
位置:LLUserFileUpload.aspx页面
技术细节:
- 文件接收:
HttpPostedFile = Request.Files[...] - 路径构造方式:
Server.MapPath("~/Upload/...")SettingGroupConfig.*UploadPath配置项
- 目标文件名来源:
- 直接使用
httpPostedFile.FileName - 或从表单中获取filename字段值
- 直接使用
过滤机制分析:
- 扩展名白名单来源:
SettingGroupConfig.UploadIMGType、UploadFileType等配置 - 扩展名校验:使用
Path.GetExtension(safeName),但可能存在绕过问题 - 内容类型检查:仅依赖Content-Type(可被伪造)
- 内容校验缺失:无魔数检测、无图像二次处理
可能的绕过技术:
- 大小写绕过:
.ASPXvs.aspx - 特殊字符:
poc.aspx;.jpg、poc.asp%00.jpg - NTFS流特性:
poc.aspx::$DATA - 非常规扩展名:
.asa、.cdx、.asmx - 双扩展名:
file.aspx.jpg
任意文件下载漏洞
漏洞位置:未对file参数进行校验的文件下载接口
漏洞代码分析:
string file = Request.QueryString["file"];
// 直接拼接路径,无任何防护
string physicalPath = Server.MapPath("~" + file);
// 下载文件
ResponseFile(physicalPath);
安全风险:
- 路径遍历:可通过
../../访问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密钥管理和访问控制
监控与审计
- 部署文件操作监控
- 实施异常下载行为检测
- 定期审计系统权限配置
- 建立安全漏洞应急响应流程
参考资源
通过本教学文档,安全审计人员可以全面了解Mou应用云平台的安全漏洞及其修复方法,提高.NET应用程序的安全防护能力。