记一次对某收费协同办公系统的审计(.Net审计)
字数 1589 2025-08-05 19:10:09

.NET协同办公系统安全审计报告

系统概述

  • 目标系统:某收费协同办公系统(中型系统,约1万+用户)
  • 审计时间:2021年2-3月
  • 技术栈:.NET框架,使用ASP.NET开发

发现的主要漏洞

1. 任意文件删除漏洞

位置Ajax/upload.ashx
漏洞分析

  • 直接引用DLL文件程序处理请求
  • Name参数通过context.Request["name"]获取,无任何过滤
  • 直接检查文件是否存在后执行删除操作
  • 无权限限制,可前台直接调用

风险:攻击者可删除服务器上任意文件,可能导致系统瘫痪或数据丢失

2. SQL注入漏洞(多重)

2.1 文件下载功能注入

位置Ajax/upload.ashx
漏洞分析

  • trueFileName参数通过context.Request["trueFileName"]获取
  • 直接拼接SQL语句查询数据库
  • 可构造如1' and (select @@version)>0--的payload获取数据库信息
  • 报错信息泄露绝对路径

利用方式

  • 可构造MSSQL语句将../../../../路径写入FileSaveName字段
  • 通过dataSource.Rows[0]["FileSaveName"]返回自定义路径
  • 实现任意文件下载

2.2 FID参数注入

位置Ajax/upload.ashx
漏洞分析

  • FID参数通过context.Request.QueryString["FID"]获取
  • 直接拼接SQL语句执行查询

2.3 Name参数注入

位置Ajax/AjaxMethod.ashx
漏洞分析

  • 调用链:GetEmpByName(text2)CreatePageDao().GetEmpByName(empname)
  • 最终SQL语句:SELECT count(*) FROM bfEMP WHERE upper(LoginUser)='{0}'
  • 参数直接拼接,无过滤

2.4 密码重置功能注入

位置initpwd.aspx
漏洞分析

  • 通过GetCookieValue获取cookie值
  • cookie以JSON格式存储用户信息
  • 直接拼接SQL语句执行查询
  • 可修改cookie构造恶意SQL语句

利用方式

  • 构造SQL使条件返回为真
  • 可重置任意用户密码

3. 其他潜在漏洞

  • 文件上传漏洞AjaxImgUpload.ashx文件可能存在shell上传风险(部分站点无此文件)
  • 越权访问:多处功能无权限验证
  • XSS漏洞:未明确描述但存在可能性

漏洞成因总结

  1. 输入验证缺失:几乎所有参数都未进行有效过滤
  2. SQL拼接风险:大量使用字符串拼接SQL语句而非参数化查询
  3. 权限控制不足:关键功能无权限验证
  4. 错误处理不当:报错信息泄露敏感数据
  5. 客户端信任问题:过度信任客户端提交的数据

修复建议

  1. 输入验证

    • 对所有用户输入进行严格过滤
    • 实现白名单机制限制特殊字符
  2. 数据库操作

    • 全面改用参数化查询
    • 使用ORM框架或存储过程
  3. 权限控制

    • 实现基于角色的访问控制(RBAC)
    • 关键操作添加权限验证
  4. 错误处理

    • 自定义错误页面
    • 禁止显示详细错误信息
  5. 文件操作

    • 限制文件操作目录
    • 实现操作日志记录
  6. 安全开发实践

    • 实施安全编码规范
    • 进行代码安全审计

审计方法论

  1. 静态分析

    • 使用ILSpy反编译.NET程序集
    • 追踪敏感函数调用链
  2. 动态测试

    • 构造各种边界条件测试输入
    • 监控系统响应和错误信息
  3. 漏洞验证

    • 搭建测试环境复现漏洞
    • 评估漏洞实际影响

本报告展示了该协同办公系统中存在的多重安全风险,特别是SQL注入和任意文件删除等高危漏洞。开发团队应优先修复这些漏洞,并建立长期的安全开发流程以防止类似问题再次发生。

.NET协同办公系统安全审计报告 系统概述 目标系统:某收费协同办公系统(中型系统,约1万+用户) 审计时间:2021年2-3月 技术栈:.NET框架,使用ASP.NET开发 发现的主要漏洞 1. 任意文件删除漏洞 位置 : Ajax/upload.ashx 漏洞分析 : 直接引用DLL文件程序处理请求 Name 参数通过 context.Request["name"] 获取,无任何过滤 直接检查文件是否存在后执行删除操作 无权限限制,可前台直接调用 风险 :攻击者可删除服务器上任意文件,可能导致系统瘫痪或数据丢失 2. SQL注入漏洞(多重) 2.1 文件下载功能注入 位置 : Ajax/upload.ashx 漏洞分析 : trueFileName 参数通过 context.Request["trueFileName"] 获取 直接拼接SQL语句查询数据库 可构造如 1' and (select @@version)>0-- 的payload获取数据库信息 报错信息泄露绝对路径 利用方式 : 可构造MSSQL语句将 ../../../../ 路径写入 FileSaveName 字段 通过 dataSource.Rows[0]["FileSaveName"] 返回自定义路径 实现任意文件下载 2.2 FID参数注入 位置 : Ajax/upload.ashx 漏洞分析 : FID 参数通过 context.Request.QueryString["FID"] 获取 直接拼接SQL语句执行查询 2.3 Name参数注入 位置 : Ajax/AjaxMethod.ashx 漏洞分析 : 调用链: GetEmpByName(text2) → CreatePageDao().GetEmpByName(empname) 最终SQL语句: SELECT count(*) FROM bfEMP WHERE upper(LoginUser)='{0}' 参数直接拼接,无过滤 2.4 密码重置功能注入 位置 : initpwd.aspx 漏洞分析 : 通过 GetCookieValue 获取cookie值 cookie以JSON格式存储用户信息 直接拼接SQL语句执行查询 可修改cookie构造恶意SQL语句 利用方式 : 构造SQL使条件返回为真 可重置任意用户密码 3. 其他潜在漏洞 文件上传漏洞 : AjaxImgUpload.ashx 文件可能存在shell上传风险(部分站点无此文件) 越权访问 :多处功能无权限验证 XSS漏洞 :未明确描述但存在可能性 漏洞成因总结 输入验证缺失 :几乎所有参数都未进行有效过滤 SQL拼接风险 :大量使用字符串拼接SQL语句而非参数化查询 权限控制不足 :关键功能无权限验证 错误处理不当 :报错信息泄露敏感数据 客户端信任问题 :过度信任客户端提交的数据 修复建议 输入验证 : 对所有用户输入进行严格过滤 实现白名单机制限制特殊字符 数据库操作 : 全面改用参数化查询 使用ORM框架或存储过程 权限控制 : 实现基于角色的访问控制(RBAC) 关键操作添加权限验证 错误处理 : 自定义错误页面 禁止显示详细错误信息 文件操作 : 限制文件操作目录 实现操作日志记录 安全开发实践 : 实施安全编码规范 进行代码安全审计 审计方法论 静态分析 : 使用ILSpy反编译.NET程序集 追踪敏感函数调用链 动态测试 : 构造各种边界条件测试输入 监控系统响应和错误信息 漏洞验证 : 搭建测试环境复现漏洞 评估漏洞实际影响 本报告展示了该协同办公系统中存在的多重安全风险,特别是SQL注入和任意文件删除等高危漏洞。开发团队应优先修复这些漏洞,并建立长期的安全开发流程以防止类似问题再次发生。