某.NET仓库管理系统——WMS_APP服务端代码审计一
字数 1931 2025-08-18 17:33:34

.NET仓库管理系统(WMS_APP)服务端代码审计教学文档

1. .NET程序审计关键文件类型

在进行.NET程序审计时,需要重点关注以下文件类型:

  1. .dll文件:动态链接库文件,包含程序运行时需要的函数和数据,可通过ILSpy等工具反编译为.cs源代码文件进行审计
  2. .cs文件:包含C#代码,定义网页或Web应用程序的逻辑和功能
  3. .ashx文件:ASP.NET中的HTTP处理程序文件,专注于处理HTTP请求和生成响应的逻辑
  4. .aspx文件:定义Web页面结构和布局的文件
  5. 配置文件和其他静态资源文件

2. 审计发现的安全漏洞

2.1 GET_GN.ashx和FUHESAOMA.ashx - 未授权访问漏洞

漏洞分析

  1. 请求处理流程

    • 从HTTP请求头中获取名为"param"的值
    • 使用GetParamJson方法处理该值(位于Utils.cs文件)
    • 方法逻辑:查找请求头中键为"param"的值,没有则返回空
  2. 数据处理

    • 对获取的param值进行URL解码
    • 使用JsonConvert.DeserializeObject<dynamic>反序列化JSON数据
    • 从反序列化结果中获取"type"属性值
  3. 数据库操作

    • 创建SqlRun.DBAccess类实例
    • 调用RunProDataSet方法执行SQL操作
    • 参数:APP_WMS_GETData(预定义的SQL命令/函数)和包含type值的数组
  4. 安全问题

    • 无任何token验证机制
    • 任意用户可通过构造特定请求头执行有限的SQL查询
    • FUHESAOMA.ashx页面还可获取"var"参数值查询用户信息

漏洞验证

构造HTTP请求头:

param: {"type":"value"}

2.2 KeyValueJson.ashx - RCE漏洞

漏洞分析

  1. 请求处理流程

    • 同样从请求头param获取值
    • 使用ParamsHelper.ReturnParams方法处理(位于ParamsHelper.cs)
  2. ParamsHelper.ReturnParams方法

    • 输入:json字符串
    • 输出:procName(存储过程名称)
    • 处理逻辑:
      • 查找json中名为"proc"的参数
      • 为其他参数名称前添加"@"符号
      • 返回参数数组
  3. 数据库操作

    • 调用RunProcedureDR方法执行存储过程
    • 存储过程名称和参数完全可控
  4. RCE实现

    • 利用SQL Server内置存储过程xp_cmdshell
    • 构造请求:
      param: {"proc":"xp_cmdshell", "command_string":"系统命令"}
      
    • 其他可利用的危险存储过程:
      • sp_databases:列出所有数据库
      • sp_helpdb:报告数据库信息
      • sp_tables:返回可查询对象列表
      • xp_dirtree:查看目录结构
      • xp_enumdsn:查看ODBC数据源
      • xp_getfiledetails:获取文件属性

漏洞验证

构造HTTP请求头执行系统命令:

param: {"proc":"xp_cmdshell", "command_string":"whoami"}

3. 其他可利用的SQL Server存储过程

  1. 数据库信息收集

    • sp_databases:无参数可查询所有数据库
    • sp_helpdb:报告指定或所有数据库信息
    • sp_renamedb:更改数据库名称
  2. 表结构信息

    • sp_tables:返回可查询对象列表
    • sp_columns:返回表列信息
    • sp_help:查看表的所有信息
    • sp_helpconstraint:查看表约束
    • sp_helpindex:查看表索引
  3. 系统信息收集

    • sp_stored_procedures:列出所有存储过程
    • xp_availablemedia:查看磁盘驱动器空间信息
    • xp_enumgroups:查看系统组信息
    • xp_ntsec_enumdomains:列出机器名和NT域名称
  4. 敏感操作

    • sp_password:添加或修改登录帐户密码
    • xp_sendmail:发送邮件并可附加查询结果
    • xp_makecab:压缩多个文件到目标档案

4. 审计总结与修复建议

发现的安全问题

  1. 未授权访问

    • 关键接口无身份验证
    • 任意用户可执行数据库查询
  2. 存储过程注入

    • 存储过程名称和参数完全可控
    • 可调用危险系统存储过程
  3. 权限控制缺失

    • 数据库连接使用高权限账户
    • 未实现最小权限原则

修复建议

  1. 身份验证

    • 为所有接口添加token验证机制
    • 实现基于角色的访问控制
  2. 输入验证

    • 限制可执行的存储过程白名单
    • 对参数进行严格类型和范围检查
  3. 数据库安全

    • 使用最低权限账户连接数据库
    • 禁用危险存储过程如xp_cmdshell
    • 实现参数化查询
  4. 日志监控

    • 记录所有数据库操作
    • 监控异常查询模式
  5. 代码规范

    • 避免从HTTP头获取关键参数
    • 分离数据访问层和业务逻辑层
.NET仓库管理系统(WMS_ APP)服务端代码审计教学文档 1. .NET程序审计关键文件类型 在进行.NET程序审计时,需要重点关注以下文件类型: .dll文件 :动态链接库文件,包含程序运行时需要的函数和数据,可通过ILSpy等工具反编译为.cs源代码文件进行审计 .cs文件 :包含C#代码,定义网页或Web应用程序的逻辑和功能 .ashx文件 :ASP.NET中的HTTP处理程序文件,专注于处理HTTP请求和生成响应的逻辑 .aspx文件 :定义Web页面结构和布局的文件 配置文件和其他静态资源文件 2. 审计发现的安全漏洞 2.1 GET_ GN.ashx和FUHESAOMA.ashx - 未授权访问漏洞 漏洞分析 请求处理流程 : 从HTTP请求头中获取名为"param"的值 使用 GetParamJson 方法处理该值(位于Utils.cs文件) 方法逻辑:查找请求头中键为"param"的值,没有则返回空 数据处理 : 对获取的param值进行URL解码 使用 JsonConvert.DeserializeObject<dynamic> 反序列化JSON数据 从反序列化结果中获取"type"属性值 数据库操作 : 创建 SqlRun.DBAccess 类实例 调用 RunProDataSet 方法执行SQL操作 参数: APP_WMS_GETData (预定义的SQL命令/函数)和包含type值的数组 安全问题 : 无任何token验证机制 任意用户可通过构造特定请求头执行有限的SQL查询 FUHESAOMA.ashx页面还可获取"var"参数值查询用户信息 漏洞验证 构造HTTP请求头: 2.2 KeyValueJson.ashx - RCE漏洞 漏洞分析 请求处理流程 : 同样从请求头param获取值 使用 ParamsHelper.ReturnParams 方法处理(位于ParamsHelper.cs) ParamsHelper.ReturnParams方法 : 输入:json字符串 输出:procName(存储过程名称) 处理逻辑: 查找json中名为"proc"的参数 为其他参数名称前添加"@"符号 返回参数数组 数据库操作 : 调用 RunProcedureDR 方法执行存储过程 存储过程名称和参数完全可控 RCE实现 : 利用SQL Server内置存储过程 xp_cmdshell 构造请求: 其他可利用的危险存储过程: sp_databases :列出所有数据库 sp_helpdb :报告数据库信息 sp_tables :返回可查询对象列表 xp_dirtree :查看目录结构 xp_enumdsn :查看ODBC数据源 xp_getfiledetails :获取文件属性 漏洞验证 构造HTTP请求头执行系统命令: 3. 其他可利用的SQL Server存储过程 数据库信息收集 : sp_databases :无参数可查询所有数据库 sp_helpdb :报告指定或所有数据库信息 sp_renamedb :更改数据库名称 表结构信息 : sp_tables :返回可查询对象列表 sp_columns :返回表列信息 sp_help :查看表的所有信息 sp_helpconstraint :查看表约束 sp_helpindex :查看表索引 系统信息收集 : sp_stored_procedures :列出所有存储过程 xp_availablemedia :查看磁盘驱动器空间信息 xp_enumgroups :查看系统组信息 xp_ntsec_enumdomains :列出机器名和NT域名称 敏感操作 : sp_password :添加或修改登录帐户密码 xp_sendmail :发送邮件并可附加查询结果 xp_makecab :压缩多个文件到目标档案 4. 审计总结与修复建议 发现的安全问题 未授权访问 : 关键接口无身份验证 任意用户可执行数据库查询 存储过程注入 : 存储过程名称和参数完全可控 可调用危险系统存储过程 权限控制缺失 : 数据库连接使用高权限账户 未实现最小权限原则 修复建议 身份验证 : 为所有接口添加token验证机制 实现基于角色的访问控制 输入验证 : 限制可执行的存储过程白名单 对参数进行严格类型和范围检查 数据库安全 : 使用最低权限账户连接数据库 禁用危险存储过程如 xp_cmdshell 实现参数化查询 日志监控 : 记录所有数据库操作 监控异常查询模式 代码规范 : 避免从HTTP头获取关键参数 分离数据访问层和业务逻辑层