一次多版本.net系统代码审计
字数 1476 2025-08-23 18:31:25

.NET多版本系统代码审计实战教学

前言

本教学文档基于一次实际的.NET多版本系统代码审计经验,重点分析不同版本系统中存在的安全漏洞,特别是未授权访问和文件上传漏洞。通过本案例,您将学习到如何对.NET系统进行代码审计,发现常见漏洞。

环境准备

  1. 工具准备

    • dnSpy:用于反编译.NET程序集
    • Visual Studio:用于代码分析和调试
    • Nuclei:用于漏洞验证
  2. 目标获取

    • 获取目标系统的bin.rar文件(包含编译后的程序集)
    • 注意不同版本的系统可能存在差异

审计流程

1. 初步分析

  • 快速检查配置文件(如web.config)寻找数据库连接字符串等敏感信息
  • 扫描常见漏洞(如未授权访问接口)

2. 版本差异分析

本案例中发现了三个版本的系统:

  1. 老版本:漏洞较多
  2. 中版本:部分漏洞修复
  3. 新版本:大部分漏洞已修复但引入了新功能

3. 供应商定制化分析

注意不同企业可能有定制化功能,可能导致特有漏洞

漏洞分析

1. 未授权访问漏洞

老版本

  • mobileController下的多个方法未进行授权检查
  • 可利用接口众多,但部分需要特定参数
  • 典型危害:信息泄露(如人员手机号等敏感信息)

中版本改进

  • 开始使用AllowAnonymous特性明确标记无需授权的接口
  • ImgFile功能默认关闭

审计技巧

  • 搜索Controller中未使用[Authorize]特性的方法
  • 检查是否有接口遗漏了权限控制

2. 文件上传漏洞

老版本发现

  1. 直接图片上传getshell:

    • 搜索SaveAs方法找到上传功能
    • 未充分验证文件类型和内容
    • 可直接上传恶意文件获取Webshell
  2. 参数完全可控的上传:

    • 上传路径、文件名等参数均可控
    • 原始附件目录不可解析,但可通过目录穿越上传到Web根目录

版本差异

  • 中版本:修复了文件上传漏洞
  • 新版本:其他漏洞修复但新增了功能(需特别关注)

审计技巧

  • 全局搜索SaveAs方法
  • 检查文件类型验证逻辑
  • 检查上传路径是否可控
  • 检查是否有目录穿越可能

3. SQL注入漏洞

老版本发现

  • 存在传统SQL注入漏洞
  • 未使用参数化查询或ORM

审计技巧

  • 搜索直接拼接SQL字符串的代码
  • 检查数据库操作是否使用参数化查询

4. 反序列化漏洞

经检查,系统中未发现反序列化漏洞

5. 任意用户登录漏洞

特殊案例

  • 某企业定制化功能导致
  • 通过用户名即可获取对应cookie
  • 典型危害:身份认证绕过

代码审计重点区域

  1. Controller层

    • 检查权限控制
    • 检查输入验证
    • 检查敏感操作
  2. 文件操作

    • 文件上传
    • 文件包含
    • 路径操作
  3. 数据库操作

    • SQL拼接
    • ORM使用情况
  4. 身份认证

    • Cookie生成
    • Session管理
    • 认证绕过可能

防御建议

  1. 权限控制

    • 默认拒绝所有请求
    • 明确标记无需授权的接口(使用AllowAnonymous
    • 实施基于角色的访问控制
  2. 文件上传

    • 验证文件类型(内容和扩展名)
    • 限制上传目录权限
    • 使用随机文件名
    • 禁止目录穿越
  3. SQL注入防御

    • 使用参数化查询
    • 使用ORM框架
    • 实施最小权限原则
  4. 定制化功能安全

    • 对定制功能进行安全评审
    • 避免引入认证绕过逻辑

总结

通过本次多版本.NET系统代码审计,我们发现了以下关键点:

  1. 版本迭代过程中,漏洞会被修复但也可能引入新问题
  2. 供应商定制化开发可能带来特有漏洞
  3. 未授权访问和文件上传是高危常见漏洞
  4. 系统重构可能改变安全状况,需要重新评估

代码审计时应关注不同版本差异和定制化功能,这些往往是漏洞的高发区域。

.NET多版本系统代码审计实战教学 前言 本教学文档基于一次实际的.NET多版本系统代码审计经验,重点分析不同版本系统中存在的安全漏洞,特别是未授权访问和文件上传漏洞。通过本案例,您将学习到如何对.NET系统进行代码审计,发现常见漏洞。 环境准备 工具准备 : dnSpy:用于反编译.NET程序集 Visual Studio:用于代码分析和调试 Nuclei:用于漏洞验证 目标获取 : 获取目标系统的bin.rar文件(包含编译后的程序集) 注意不同版本的系统可能存在差异 审计流程 1. 初步分析 快速检查配置文件(如web.config)寻找数据库连接字符串等敏感信息 扫描常见漏洞(如未授权访问接口) 2. 版本差异分析 本案例中发现了三个版本的系统: 老版本:漏洞较多 中版本:部分漏洞修复 新版本:大部分漏洞已修复但引入了新功能 3. 供应商定制化分析 注意不同企业可能有定制化功能,可能导致特有漏洞 漏洞分析 1. 未授权访问漏洞 老版本 : mobileController 下的多个方法未进行授权检查 可利用接口众多,但部分需要特定参数 典型危害:信息泄露(如人员手机号等敏感信息) 中版本改进 : 开始使用 AllowAnonymous 特性明确标记无需授权的接口 ImgFile 功能默认关闭 审计技巧 : 搜索Controller中未使用 [Authorize] 特性的方法 检查是否有接口遗漏了权限控制 2. 文件上传漏洞 老版本发现 : 直接图片上传getshell: 搜索 SaveAs 方法找到上传功能 未充分验证文件类型和内容 可直接上传恶意文件获取Webshell 参数完全可控的上传: 上传路径、文件名等参数均可控 原始附件目录不可解析,但可通过目录穿越上传到Web根目录 版本差异 : 中版本:修复了文件上传漏洞 新版本:其他漏洞修复但新增了功能(需特别关注) 审计技巧 : 全局搜索 SaveAs 方法 检查文件类型验证逻辑 检查上传路径是否可控 检查是否有目录穿越可能 3. SQL注入漏洞 老版本发现 : 存在传统SQL注入漏洞 未使用参数化查询或ORM 审计技巧 : 搜索直接拼接SQL字符串的代码 检查数据库操作是否使用参数化查询 4. 反序列化漏洞 经检查,系统中未发现反序列化漏洞 5. 任意用户登录漏洞 特殊案例 : 某企业定制化功能导致 通过用户名即可获取对应cookie 典型危害:身份认证绕过 代码审计重点区域 Controller层 : 检查权限控制 检查输入验证 检查敏感操作 文件操作 : 文件上传 文件包含 路径操作 数据库操作 : SQL拼接 ORM使用情况 身份认证 : Cookie生成 Session管理 认证绕过可能 防御建议 权限控制 : 默认拒绝所有请求 明确标记无需授权的接口(使用 AllowAnonymous ) 实施基于角色的访问控制 文件上传 : 验证文件类型(内容和扩展名) 限制上传目录权限 使用随机文件名 禁止目录穿越 SQL注入防御 : 使用参数化查询 使用ORM框架 实施最小权限原则 定制化功能安全 : 对定制功能进行安全评审 避免引入认证绕过逻辑 总结 通过本次多版本.NET系统代码审计,我们发现了以下关键点: 版本迭代过程中,漏洞会被修复但也可能引入新问题 供应商定制化开发可能带来特有漏洞 未授权访问和文件上传是高危常见漏洞 系统重构可能改变安全状况,需要重新评估 代码审计时应关注不同版本差异和定制化功能,这些往往是漏洞的高发区域。