记对某.net系统的审计
字数 1962 2025-08-29 08:31:53

.NET系统安全审计实战教学

0x01 前言

本教学文档基于对某高校.NET平台的安全审计过程,详细记录了从反编译到漏洞发现的完整流程。该系统基于SilverLight框架开发,存在多处安全漏洞,包括逻辑缺陷、SQL注入和任意文件上传等。

0x02 环境准备

必要工具

  1. dnSpy:.NET程序集反编译工具
  2. Burp Suite:网络抓包和修改工具
  3. WinHex:二进制文件查看器
  4. SQLMap:SQL注入自动化测试工具

目标文件

  1. .xap文件:SilverLight编译打包后的文件
  2. .dll文件:.NET程序集文件
  3. 配置文件:如web.config和iBatis映射文件

0x03 反编译过程

1. 解包SilverLight应用

  1. 定位ClientBin目录下的.xap文件
  2. 修改文件后缀为.zip并解压
  3. 获取其中的USTCORi.WebLab.WebUI.dll等程序集文件

2. 使用dnSpy反编译

  1. 打开dnSpy并加载目标.dll文件
  2. 定位关键类和方法:
    • MainPage类中的MainPage()初始化方法
    • GetSession()函数获取用户session
    • WLService.svc服务文件

0x04 逻辑缺陷审计

1. 登录流程分析

  1. 请求路径:WLService.svc
  2. 关键参数:
    • BizName:必须非空
    • ActionName:必须非空
  3. 登录操作特殊检查:
    • BizName="USTCORi.WebLab.BLL.BLLSystemUser"
    • ActionName="CheckLogin"CheckLoginValue"
    • 会执行CheckTime()过期检查

2. 过期检查机制

  1. 读取/Image/cdx.bin文件
  2. 检查第一个符号位是否为200(十六进制C8)
  3. 使用WinHex验证文件内容

3. 用户验证流程

  1. 程序集加载:USTCORi.WebLab.BLL
  2. 定位到BLLSystemUser类的CheckLogin()方法
  3. 关键验证步骤:
    • JSON反序列化用户输入
    • 读取web.config配置
    • 调用CheckUserRight()进行正版验证
    • 使用iBatis框架执行SQL查询

4. SQL查询分析

  1. 映射文件:SystemUser.BatisMap.xml
  2. 查询语句:SELECT * FROM SystemUser WHERE UserID = "用户名"
  3. 密码验证:MD5哈希比对

5. 权限验证缺陷

  1. 管理员判断逻辑:
    • IsLogined=true
    • UserType="1"ROLE_ADMIN常量)
  2. 漏洞利用:
    • 使用普通用户登录(如student/123)
    • 拦截响应包
    • 修改usertype字段为"1"
    • 放行数据包获取管理员权限

0x05 SQL注入审计

1. iBatis框架分析

  1. 安全注意事项:
    • 使用#进行参数绑定是安全的
    • 使用$进行字符串拼接可能导致注入

2. 漏洞定位

  1. 搜索映射文件中的LIKE关键字
  2. 发现SystemUser.BatisMap.xml中的不安全拼接

3. 漏洞验证

  1. 定位功能点:"学生管理"
  2. 抓包并修改请求
  3. UserName参数中添加*以便SQLMap识别
  4. 使用SQLMap进行自动化测试

0x06 任意文件上传审计

1. 功能点分析

  1. 定位:"班级管理"->"数据导入"
  2. 前端限制:仅允许.xls.xlsx文件

2. 后端处理分析

  1. 请求路径:WebClientExcelUpload.ashx
  2. 定位WebClientExeclUpload
  3. 发现漏洞:
    • 直接从GET参数获取文件名和路径
    • 无任何过滤措施
    • 上传路径可控

3. 漏洞利用

  1. 准备webshell文件(如.aspx
  2. 上传时拦截请求
  3. 修改文件后缀绕过前端验证
  4. 访问上传的webshell获取系统权限

0x07 防御建议

1. 逻辑缺陷修复

  1. 增加服务端权限验证
  2. 使用不可篡改的令牌机制
  3. 避免仅依赖客户端传回的权限标识

2. SQL注入防御

  1. 统一使用参数化查询
  2. 在iBatis映射中使用#而非$
  3. 实施输入验证和过滤

3. 文件上传安全

  1. 实施严格的白名单验证
  2. 文件内容检查而不仅依赖扩展名
  3. 使用随机生成的文件名
  4. 限制上传目录的执行权限

0x08 总结

本审计过程展示了从反编译到漏洞发现的完整流程,关键点包括:

  1. SilverLight应用的反编译技巧
  2. 权限验证逻辑的深入分析
  3. iBatis框架的安全使用规范
  4. 文件上传功能的全面安全考量

通过此案例,安全研究人员可以学习到.NET系统审计的基本方法和常见漏洞模式,为类似系统的安全评估提供参考。

.NET系统安全审计实战教学 0x01 前言 本教学文档基于对某高校.NET平台的安全审计过程,详细记录了从反编译到漏洞发现的完整流程。该系统基于SilverLight框架开发,存在多处安全漏洞,包括逻辑缺陷、SQL注入和任意文件上传等。 0x02 环境准备 必要工具 dnSpy :.NET程序集反编译工具 Burp Suite :网络抓包和修改工具 WinHex :二进制文件查看器 SQLMap :SQL注入自动化测试工具 目标文件 .xap 文件:SilverLight编译打包后的文件 .dll 文件:.NET程序集文件 配置文件:如 web.config 和iBatis映射文件 0x03 反编译过程 1. 解包SilverLight应用 定位 ClientBin 目录下的 .xap 文件 修改文件后缀为 .zip 并解压 获取其中的 USTCORi.WebLab.WebUI.dll 等程序集文件 2. 使用dnSpy反编译 打开dnSpy并加载目标 .dll 文件 定位关键类和方法: MainPage 类中的 MainPage() 初始化方法 GetSession() 函数获取用户session WLService.svc 服务文件 0x04 逻辑缺陷审计 1. 登录流程分析 请求路径: WLService.svc 关键参数: BizName :必须非空 ActionName :必须非空 登录操作特殊检查: 当 BizName="USTCORi.WebLab.BLL.BLLSystemUser" 且 ActionName="CheckLogin" 或 CheckLoginValue" 会执行 CheckTime() 过期检查 2. 过期检查机制 读取 /Image/cdx.bin 文件 检查第一个符号位是否为200(十六进制C8) 使用WinHex验证文件内容 3. 用户验证流程 程序集加载: USTCORi.WebLab.BLL 定位到 BLLSystemUser 类的 CheckLogin() 方法 关键验证步骤: JSON反序列化用户输入 读取 web.config 配置 调用 CheckUserRight() 进行正版验证 使用iBatis框架执行SQL查询 4. SQL查询分析 映射文件: SystemUser.BatisMap.xml 查询语句: SELECT * FROM SystemUser WHERE UserID = "用户名" 密码验证:MD5哈希比对 5. 权限验证缺陷 管理员判断逻辑: IsLogined=true UserType="1" ( ROLE_ADMIN 常量) 漏洞利用: 使用普通用户登录(如student/123) 拦截响应包 修改 usertype 字段为"1" 放行数据包获取管理员权限 0x05 SQL注入审计 1. iBatis框架分析 安全注意事项: 使用 # 进行参数绑定是安全的 使用 $ 进行字符串拼接可能导致注入 2. 漏洞定位 搜索映射文件中的 LIKE 关键字 发现 SystemUser.BatisMap.xml 中的不安全拼接 3. 漏洞验证 定位功能点:"学生管理" 抓包并修改请求 在 UserName 参数中添加 * 以便SQLMap识别 使用SQLMap进行自动化测试 0x06 任意文件上传审计 1. 功能点分析 定位:"班级管理"->"数据导入" 前端限制:仅允许 .xls 和 .xlsx 文件 2. 后端处理分析 请求路径: WebClientExcelUpload.ashx 定位 WebClientExeclUpload 类 发现漏洞: 直接从GET参数获取文件名和路径 无任何过滤措施 上传路径可控 3. 漏洞利用 准备webshell文件(如 .aspx ) 上传时拦截请求 修改文件后缀绕过前端验证 访问上传的webshell获取系统权限 0x07 防御建议 1. 逻辑缺陷修复 增加服务端权限验证 使用不可篡改的令牌机制 避免仅依赖客户端传回的权限标识 2. SQL注入防御 统一使用参数化查询 在iBatis映射中使用 # 而非 $ 实施输入验证和过滤 3. 文件上传安全 实施严格的白名单验证 文件内容检查而不仅依赖扩展名 使用随机生成的文件名 限制上传目录的执行权限 0x08 总结 本审计过程展示了从反编译到漏洞发现的完整流程,关键点包括: SilverLight应用的反编译技巧 权限验证逻辑的深入分析 iBatis框架的安全使用规范 文件上传功能的全面安全考量 通过此案例,安全研究人员可以学习到.NET系统审计的基本方法和常见漏洞模式,为类似系统的安全评估提供参考。