记对某.net系统的审计
字数 1962 2025-08-29 08:31:53
.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()函数获取用户sessionWLService.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=trueUserType="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系统审计的基本方法和常见漏洞模式,为类似系统的安全评估提供参考。