记一次对某收费协同办公系统的审计(.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漏洞:未明确描述但存在可能性
漏洞成因总结
- 输入验证缺失:几乎所有参数都未进行有效过滤
- SQL拼接风险:大量使用字符串拼接SQL语句而非参数化查询
- 权限控制不足:关键功能无权限验证
- 错误处理不当:报错信息泄露敏感数据
- 客户端信任问题:过度信任客户端提交的数据
修复建议
-
输入验证:
- 对所有用户输入进行严格过滤
- 实现白名单机制限制特殊字符
-
数据库操作:
- 全面改用参数化查询
- 使用ORM框架或存储过程
-
权限控制:
- 实现基于角色的访问控制(RBAC)
- 关键操作添加权限验证
-
错误处理:
- 自定义错误页面
- 禁止显示详细错误信息
-
文件操作:
- 限制文件操作目录
- 实现操作日志记录
-
安全开发实践:
- 实施安全编码规范
- 进行代码安全审计
审计方法论
-
静态分析:
- 使用ILSpy反编译.NET程序集
- 追踪敏感函数调用链
-
动态测试:
- 构造各种边界条件测试输入
- 监控系统响应和错误信息
-
漏洞验证:
- 搭建测试环境复现漏洞
- 评估漏洞实际影响
本报告展示了该协同办公系统中存在的多重安全风险,特别是SQL注入和任意文件删除等高危漏洞。开发团队应优先修复这些漏洞,并建立长期的安全开发流程以防止类似问题再次发生。