This commit is contained in:
zlwu committed 2026-09-18 23:42:09 +08:00
1 parent c2905e78f1
commit 65abe022c7
44 files changed
+1543 -387

No files matched your search

@@ -0,0 +1,172 @@
# SQL 注入攻击日志摘录(对应攻防演练报告)
> 来源日志包:`问题整改/日志.rar`
> 对照报告:`问题整改/杭州第一技师学院智慧校园系统存在SQL注入漏洞(补充成果).docx`
> 整理日期:2026-09-17
---
## 1. 结论
在客户提供的 `日志.rar` 中,**已定位到与 Word 报告完全吻合的 SQL 注入攻击痕迹**。
核心对应关系:
| Word 报告描述 | 日志证据 |
|---------------|----------|
| 入口 `POST /prod-api/auth/register` | 大量 `请求地址'/auth/register',发生未知异常` |
| `tenantId` 注入进 SQL | `sys_config ... AND tenant_id = '000000' AND extractvalue(...)` |
| 报错型注入 `extractvalue` / XPATH | `java.sql.SQLException: XPATH syntax error: '~...'` |
| 落点 `SysConfigMapper` | `The error may exist in org/dromara/system/mapper/SysConfigMapper.java` |
| 泄露 `root@172.16.0.68` | `XPATH syntax error: '~root@172.16.0.68'`(约 200 次) |
| 查注册开关触发 | 参数 `sys.account.registerUser` |
| 拖库用户/配置 | 报错片段中出现表字段、时间戳、BCrypt 哈希分片等 |
**主证据文件(推荐引用):**
- `日志/ruoyi-admin-68-9901.log`(节点 68,体量最大、攻击痕迹最完整)
- 同内容副本:`日志/68/ruoyi-admin-68-9901.log`
---
## 2. 日志包结构说明
`日志.rar` 解压后主要包含双机节点日志:
| 目录 | 说明 |
|------|------|
| `日志/67/` | 节点 67 应用/系统日志 |
| `日志/68/` | 节点 68 应用/系统日志 |
| `日志/*.log` | 根目录另有一份拷贝(与 67/68 有重叠) |
攻击相关命中主要集中在 **68 节点** 的 `ruoyi-admin-68-9901.log`。
---
## 3. 攻击时间线(基于主日志)
主日志:`ruoyi-admin-68-9901.log`
| 统计项 | 数值 |
|--------|------|
| `XPATH syntax error` | **42230** 次 |
| `extractvalue` | **16726** 次 |
| `/auth/register` 异常 | **8644** 次 |
| `SysConfigMapper` | **8540** 次 |
| `root@172.16.0.68` 泄露 | **200** 次 |
| 参数 `sys.account.registerUser` | **8747** 次 |
| 首次 XPATH 关联时间 | **2026-09-16 10:43:25** |
| 末次 XPATH 关联时间 | **2026-09-16 23:36:48** |
按小时分布(XPATH 相关):
| 时段 | 相对强度 |
|------|----------|
| 10 时 | 少量探测 |
| 14 时 | 明确命中(含 `root@`、版本探测) |
| **15 时** | **高峰(约 3.1 万行级)** |
| 16 时 | 仍高强度 |
| 17 / 21 / 22 / 23 时 | 持续/回扫 |
与报告截图高度吻合的关键时刻示例:
- **2026-09-16 14:49:32**:`/auth/register` + `extractvalue(SELECT version())` → `~5.7.39-log`
- **2026-09-16 14:50:08**:`/auth/register` + `extractvalue(SELECT user())` → `~root@172.16.0.68`
---
## 4. 关键证据摘录(与报告逐条对应)
### 4.1 攻击入口:注册接口
```text
请求地址'/auth/register',发生未知异常.
```
(同秒内连续多次,符合自动化注入工具特征)
### 4.2 注入点:tenant_id 拼进 sys_config 查询
```text
==> Preparing: SELECT config_id, config_name, config_key, config_value, ...
FROM sys_config
WHERE (config_key = ?)
AND tenant_id = '000000' AND extractvalue(1,concat(0x7e,(SELECT user()))) AND '1'='1'
==> Parameters: sys.account.registerUser(String)
```
说明:注册流程先查“是否开启注册”,恶意 `tenantId` 被多租户插件拼进 SQL,从而触发注入。
### 4.3 报错栈落点:SysConfigMapper
```text
### The error may exist in org/dromara/system/mapper/SysConfigMapper.java (best guess)
### Cause: java.sql.SQLException: XPATH syntax error: '~root@172.16.0.68'
```
### 4.4 与报告完全一致的库账号泄露
```text
java.sql.SQLException: XPATH syntax error: '~root@172.16.0.68'
```
### 4.5 信息探测与拖数痕迹(报错回显)
XPATH 回显片段(日志统计 Top)可见攻击者在逐步抽取元数据/业务数据,例如:
| 回显片段(截断) | 含义(推断) |
|------------------|--------------|
| `~5.7.39-log` | MySQL 版本 |
| `~root@172.16.0.68` | 当前数据库用户 |
| `~tenant_id` / `~create_time` / `~create_by` 等 | 表字段枚举 |
| `~2025-12-23 13:1...` | 用户创建时间等数据分片 |
| `~$2a$10$...` | 密码哈希分片(敏感) |
另有 SQL 探测 `information_schema` / `table_schema='hzdyjs_xg'` 的记录,表明已进入库表枚举阶段。
> 完整敏感哈希与用户明细不在正文展开;原始摘录见同目录附件。
---
## 5. 典型攻击链路(日志还原)
```text
POST /auth/register
→ selectRegisterEnabled(tenantId) // 参数含恶意 tenantId
→ 查询 sys_config(config_key=sys.account.registerUser)
→ 多租户插件拼接: AND tenant_id = '<恶意内容>'
→ extractvalue(...) 报错回显
→ 泄露 version / user() / database / 表字段 / 业务数据分片
```
该链路与 Word 报告 Burp 截图、成果描述(root 权限判定、用户数据拖取、初始密码配置等)一致。
---
## 6. 附件清单(本目录)
目录:`问题整改/攻击日志摘录/`
| 文件 | 内容 |
|------|------|
| `stats.txt` | 主日志命中统计与时间分布 |
| `primary-xpath-context.txt` | 首批 XPATH 上下文(含 register + root) |
| `primary-extract-sql-samples.txt` | 被注入的 SQL 样本 |
| `primary-register-hits.txt` | `/auth/register` 异常样本 |
| `primary-root-leaks.txt` | `root@172.16.0.68` 泄露样本 |
| `primary-sysconfig-hits.txt` | SysConfigMapper 报错样本 |
| `evidence-block-auth-register-root.txt` | 连续证据块(从版本探测到 root 泄露) |
---
## 7. 处置建议(日志侧)
1. 将本摘录作为攻防复盘/整改验收附件归档。
2. 代码侧已完成 `tenantId` 白名单与注册接口加固后,需在**生产发布**后再做一次同类关键字复查(应不再出现 `extractvalue`/`XPATH`/`tenant_id = '...extractvalue`)。
3. 因日志显示存在密码哈希分片外泄痕迹,建议同步:**强制相关账号改密、轮换初始密码与第三方密钥、审计异常登录**。
---
## 8. 一句话结论
**客户日志可证实:2026-09-16 当日存在针对 `/auth/register` + `tenantId` 的报错型 SQL 注入,成功回显 `root@172.16.0.68`,并持续拖取库表元数据与业务数据;与 Word 补充成果报告一致。**