dinosn/CVE-2025-13673
GitHub: dinosn/CVE-2025-13673
针对 WordPress Tutor LMS 插件 SQL 注入漏洞(CVE-2025-13673)的 PoC 工具与 Docker 实验环境,支持无认证盲注和认证后 UNION 注入两种利用模式。
Stars: 0 | Forks: 0
# CVE-2025-13673 — Tutor LMS SQL 注入实验
[Tutor LMS](https://wordpress.org/plugins/tutor/) WordPress 插件 (<= 3.9.6) 中通过 `coupon_code` 参数引发的无认证 SQL 注入。
## 快速开始
```
# 1. 克隆并启动 lab
git clone https://github.com/dinosn/CVE-2025-13673.git
cd CVE-2025-13673
./setup.sh # Deploys WordPress + Tutor LMS 3.9.3
# 2. 运行 exploit
pip install requests # only dependency
# Unauthenticated(time-based blind — 无需 credentials)
python3 exploit.py http://localhost:8080
# Authenticated(UNION-based — 即时提取)
python3 exploit.py http://localhost:8080 -u testuser -p test123 --all
```
## 漏洞详情
| 字段 | 值 |
|-------|-------|
| CVE | CVE-2025-13673 |
| 受影响版本 | Tutor LMS <= 3.9.6 |
| 修复版本 | 3.9.7 |
| 类型 | SQL 注入 (CWE-89) |
| CVSS | 7.5 / 9.3 |
| 认证 | 无认证 (盲注) / Subscriber (UNION) |
### 根本原因
`QueryHelper::prepare_where_clause()` 使用原始字符串拼接来构建 SQL WHERE 子句:
```
// helpers/QueryHelper.php — VULNERABLE
$value = is_numeric( $value ) ? $value : "'" . $value . "'";
```
没有任何转义处理。只需一个单引号即可跳出字面量并执行任意 SQL。
### 攻击向量
**无认证:** 携带 `tutor_action=tutor_pay_now` 的 `POST /` 请求。WordPress 的 `init` hook 会为所有访问者分发此操作。`_tutor_nonce` 嵌入在每个前端页面中,并且对匿名会话有效。通过 `SLEEP()` 进行数据提取。
**Subscriber 及以上权限:** 携带 `action=tutor_apply_coupon` 的 `POST /wp-admin/admin-ajax.php` 请求。返回包含注入的 UNION SELECT 数据的 JSON —— 有两列会反映在响应中,从而实现即时提取。
### 补丁 (3.9.7)
```
- $val = is_numeric( $val ) ? $val : "'" . $val . "'";
+ // Value now passed through $wpdb->prepare('%s', $value)
```
## Exploit 用法
```
usage: exploit.py [-h] [-u USERNAME] [-p PASSWORD] [--course-id COURSE_ID]
[--dump-users] [--db-info] [--options] [--all]
[--delay DELAY]
url
Modes:
Default (no -u/-p): Unauthenticated time-based blind SQLi
With -u/-p: Authenticated UNION-based (fast)
Examples:
exploit.py http://target # unauth blind
exploit.py http://target -u student -p pass --all # auth UNION
```
## 测试不同版本
```
# 测试版本 3.9.5(包含 esc_sql partial mitigation)
./setup.sh 3.9.5
# 测试版本 3.9.7(应该已被修复)
./setup.sh 3.9.7
```
## 文件
| 文件 | 描述 |
|------|-------------|
| `exploit.py` | 双模式 PoC:无认证盲注 + 认证 UNION |
| `setup.sh` | 一键部署实验环境 |
| `docker-compose.yml` | WordPress 6.7 + MySQL 8.0 |
## 参考
- [Wordfence 公告](https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/tutor/tutor-lms-396-unauthenticated-sql-injection-via-coupon-code)
- [Patchstack 公告](https://patchstack.com/database/wordpress/plugin/tutor/vulnerability/wordpress-tutor-lms-plugin-3-9-6-unauthenticated-sql-injection-via-coupon-code-vulnerability)
## 免责声明
仅供授权的安全测试和教育培训使用。
标签:CISA项目, Docker靶场, PoC, WordPress插件, 安全漏洞, 文件完整性监控, 暴力破解, 版权保护, 请求拦截, 逆向工具