# 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 补充成果报告一致。**