6.2 KiB
6.2 KiB
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 攻击入口:注册接口
请求地址'/auth/register',发生未知异常.
(同秒内连续多次,符合自动化注入工具特征)
4.2 注入点:tenant_id 拼进 sys_config 查询
==> 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
### 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 与报告完全一致的库账号泄露
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. 典型攻击链路(日志还原)
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. 处置建议(日志侧)
- 将本摘录作为攻防复盘/整改验收附件归档。
- 代码侧已完成
tenantId白名单与注册接口加固后,需在生产发布后再做一次同类关键字复查(应不再出现extractvalue/XPATH/tenant_id = '...extractvalue)。 - 因日志显示存在密码哈希分片外泄痕迹,建议同步:强制相关账号改密、轮换初始密码与第三方密钥、审计异常登录。
8. 一句话结论
客户日志可证实:2026-09-16 当日存在针对 /auth/register + tenantId 的报错型 SQL 注入,成功回显 root@172.16.0.68,并持续拖取库表元数据与业务数据;与 Word 补充成果报告一致。