Jhatchi/NexaCorp-DFIR-INC-2026-004
GitHub: Jhatchi/NexaCorp-DFIR-INC-2026-004
针对虚构 DVWA 门户 SQL 注入攻击的完整 DFIR 调查项目,涵盖攻击链分析、多源证据关联及 Suricata 检测规则开发与验证。
Stars: 0 | Forks: 0
# NexaCorp DFIR 项目 (INC-2026-004) - SQL Injection 调查
针对 NexaCorp 员工自助服务门户 (`bru-web-01`) 遭受 SQL Injection 攻击的取证调查。外部攻击者滥用门户登录和账户查询表单读取了后端数据库,窃取了完整的 `users` 表,在离线状态下破解了弱凭证,并利用该凭证在同一台服务器上获取了经过身份验证的 SSH 立足点。本项目作为 BeCode Brussels Blue & Red Team 训练营(Mission 04)的个人项目独立完成,是 [INC-2026-001](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-001)、[INC-2026-002](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-002) 和 [INC-2026-003](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-003) 的延续。该系列随后由在同一 `bru-web-01` 门户上进行的 OS command injection 和 web shell 调查 [INC-2026-005](https://github.com/Jhatchi/NexaCorp-DFIR-INC-2026-005) 继续。





[](https://www.linkedin.com/in/johan-emmanuel-hatchi/)
## 运营声明
**这是一次针对虚构基础设施的实验室项目。** NexaCorp Industries 是作为 BeCode Brussels Mission 04 场景的虚构客户。主机 `bru-web-01` 是一台运行着故意设计的脆弱 Web 应用程序 (DVWA) 的独立实验室 VM。没有任何真实的组织、网络或个人受到攻击。
本报告中发布的所有 IP 地址、主机名、账户名、哈希值和妥协指标 (`172.16.50.10`、`bru-web-01`、`j.martin`、`dvwa`、MD5 哈希等) 均为**实验室本地产物**,并非现实世界的威胁情报。请勿将它们作为 IOC 输入到生产环境的 SIEM 中。
**发布已获授权**,由 BeCode 实验室教练 (Thomas B.) 于 2026-05-17 授权,用于展示已完成的 BeCode 任务作品集。完整的保密声明见调查结果报告。
## 概览
| 项目元数据 | 值 |
| ------------------- | ----- |
| 编号 | `BCC-2026 / INC-2026-004` |
| 交付物 | 调查结果报告 (INC-2026-004) |
| 目标 | `bru-web-01`,NexaCorp 员工自助服务门户 |
| 范围 | 对证据包的取证分析 (阶段 1 至 4,仅限调查) |
| 交付日期 | 2026-06-11 |
| 状态 | 已完成并提交 |
| 调查产出 | 值 |
| -------------------- | ----- |
| 攻击类别 | SQL Injection (OWASP A03),先基于错误,后基于 UNION |
| INC-2026-004 调查结果 | **4** (2 个 CRITICAL,2 个 HIGH) |
| 严重性模型 | 分析师评级 (影响 + 技术类别 + 威胁状态),无 CVSS |
| 暴露的账户 | 6 个 (完整的 `users` 表),1 个员工账户遭到端到端入侵 |
| 已分析的证据来源 | web_access.log, attack.pcap, wazuh-alerts.json, auth.log |
| 跨来源印证 | 将 Apache 访问日志 (本地时间 +02:00) 与数据包捕获进行交叉核对 |
## 项目背景
**场景 (虚构)。** NexaCorp Industries 报告了第四起安全事件,这次发生在其 Web 应用层。在 Linux 基础设施上发生三起事件 (INC-2026-001 至 003) 之后,同一威胁行为者转向了新的攻击面:员工自助服务门户 `bru-web-01`。Web 应用程序防火墙记录了针对登录和账户查询表单的异常查询模式 (`syntax error`, `UNION SELECT`),该表单直接与后端数据库进行通信。
**任务要求。** Marc Wauters (IT 基础设施经理) 要求确定该表单是否被成功滥用、攻击者读取了哪些数据、哪些员工账户被暴露,以及攻击者利用窃取的数据做了什么。
**范围。** 仅限对证据包的取证分析。调查涵盖阶段 1 (Web 访问日志)、阶段 2 (PCAP 响应分析)、阶段 3 (SIEM 警报) 和阶段 4 (auth.log 中的后果分析)。它还包括 Suricata 检测工程阶段:编写并针对捕获的数据验证了四个 IDS 特征码,请参阅 `detection/` 文件夹。所调查的攻击窗口为 2026-05-30,09:35 至 14:48 (+02:00)。
**教育背景。** 作为 Mission 04 在 **BeCode Brussels Blue & Red Team 训练营 (2025 年 11 月至 2026 年 9 月)** 期间交付。在 BeCode SOC 培训工作站上进行调查,通过基于 Tailscale VPN 的 SSH 进行远程访问。
## 执行摘要
外部攻击者利用 NexaCorp 员工门户上的脆弱表单对后端数据库执行了 SQL Injection。攻击者首先通过简单的基于错误的探测确认了漏洞,然后映射了数据库并提取了完整的 `users` 表,包括每一个用户名和密码哈希。其中一个账户,即员工 `j.martin`,使用的密码非常脆弱,以至于在不到一秒钟的时间内就在离线状态下被恢复。
数据被盗约五小时后,攻击者利用恢复的密码通过 SSH 登录到同一台服务器,并且登录成功。随后,攻击者尝试通过 SSH 使用其他被盗账户登录,但均告失败。最终结果是确认攻击者以合法员工身份在 `bru-web-01` 上获得了经过身份验证的立足点,并且门户数据库中存储的所有凭证都已暴露。
该操作是有意且有条理的:这是在 Web 层上执行的教科书般的从侦察到利用的序列,紧接着对第二个服务进行凭证重用。最紧迫的要素是实时 SSH 访问权限,这是后续活动的入口点。需要立即进行密码轮换、账户锁定以及门户代码修复。
## INC-2026-004 调查结果摘要
| ID | 严重性 | 标题 | 主要 MITRE 技术 |
| --- | --- | --- | --- |
| **4.1** | 🔴 CRITICAL | 针对 `id` 参数的 SQL Injection (先基于错误,后基于 UNION) | T1190 |
| **4.2** | 🟠 HIGH | 数据库枚举和完整的 `users` 表外泄 | T1213 |
| **4.3** | 🟠 HIGH | 离线恢复弱凭证 (`P@ssw0rd123`, MD5) | T1110.002 |
| **4.4** | 🔴 CRITICAL | 凭证重用,以 `j.martin` 身份成功建立 SSH 立足点 | T1078, T1021.004 |
**严重性分布:** 2 个 CRITICAL / 2 个 HIGH
**严重性模型。** 严重性由分析师进行评级,而非派生自 CVSS。每个评级都是基于对 NexaCorp 的运营影响、MITRE ATT&CK 技术类别以及当前威胁状态 (SSH 立足点是实时的,而非历史性的) 的综合情境评估。调查结果 4.4 最为紧迫:攻击者持有以真实员工身份建立的有效的交互式会话,这直接促成了入侵的下一阶段。
## 如何阅读此存储库
| 如果你是... | 从这里开始 | 时间 |
| --------------- | ---------- | ---- |
| **招聘人员或招聘经理** | 本 README + 报告执行摘要 | 5 分钟 |
| **评估适配度的 SOC 分析师** | [`reports/INC-2026-004_Findings_Report.md`](reports/INC-2026-004_Findings_Report.md) 调查结果部分 + [`evidence-summary/ioc-summary.md`](evidence-summary/ioc-summary.md) | 20 分钟 |
| **DFIR 从业者** | 完整报告 + [`methodology/attack-timeline.md`](methodology/attack-timeline.md) + [`notes/journal.md`](notes/journal.md) 了解调查轨迹 | 40 分钟 |
| **任何想要进行 grep、引用或 diff 的人** | [`reports/INC-2026-004_Findings_Report.md`](reports/INC-2026-004_Findings_Report.md) (Markdown 源码) | 按需 |
**标准交付物:** [`reports/`](reports) 中的 PDF。Markdown 源码内容相同,保存在存储库中是为了便于搜索和版本控制。
## 存储库布局
```
NexaCorp-DFIR-INC-2026-004/
├── README.md (this file)
├── LICENSE (MIT)
├── .gitignore
├── .github/
│ └── workflows/
│ └── ci.yml markdownlint + typography validation
├── reports/
│ ├── INC-2026-004_Findings_Report.pdf canonical deliverable (generated separately)
│ └── INC-2026-004_Findings_Report.md same content, Markdown source
├── methodology/
│ ├── attack-timeline.md minute-by-minute attack timeline
│ └── attck-mapping.md ATT&CK matrix for this incident
├── evidence-summary/
│ └── ioc-summary.md IOCs in SIEM-ingestible format
├── detection/
│ ├── local-sqli.rules four validated Suricata SQLi signatures
│ └── README.md rules, alert counts, MITRE, FP notes
└── notes/
└── journal.md analyst investigation notebook
```
**`detection/` 文件夹。** INC-2026-001 发布了 Suricata 规则集,INC-2026-002 发布了 Wazuh 规则。INC-2026-004 延续了这一路线:使用 Suricata 离线分析捕获的数据,编写、验证并统计了四个本地 SQLi 特征码 (UNION SELECT, 单引号探测, 盲注布尔值, information_schema 枚举) 对 6577 个数据包捕获的匹配情况。有关规则、警报计数、MITRE 映射和误报说明,请参阅 `detection/README.md`。
## 方法论
本项目遵循与之前任务相同的行业标准框架,并应用于 Web 层调查:
- **NIST SP 800-61r2** (计算机安全事件处理指南):提供了检测与分析结构。本次调查对应于“检测与分析”和“事件后活动”阶段。
- **SANS PICERL**:识别阶段是工作的核心 (日志关联、请求-响应重建)。遏制、根除和恢复作为优先建议记录在案,但并未执行。
- **MITRE ATT&CK Enterprise v15**:每个发现都映射到一个或多个技术。请参阅 [`methodology/attck-mapping.md`](methodology/attck-mapping.md)。
- **OWASP**:根本漏洞归类于 OWASP A03:2021 Injection。完整的 SQLi 技术链 (基于错误、列计数、UNION 枚举、盲注布尔值) 记录在报告中。
### 证据和时区处理
Apache 访问日志 (`web_access.log`) 和 auth 日志为本地时间 (UTC+02:00, CEST)。`README.txt` 中的数据包捕获窗口以 UTC 表示。访问日志被视为精确请求时间 (包括数据外泄时刻) 的权威来源。在引用捕获窗口的地方,旁边会注明 UTC 值。
## 使用的工具
### 日志分析
- 在 `web_access.log` 上使用 `grep`、`awk`、`sort`、`uniq`:
- `awk '{print $1}' web_access.log | sort | uniq -c | sort -rn` 以分离出攻击者 IP (内部 `192.168.10.0/24` 范围之外的唯一来源)
- 使用带有 SQL 关键字模式的 `grep` 按攻击顺序提取恶意请求
### 数据包分析
- `tshark` (仅限 CLI):
- `tshark -r attack.pcap -Y 'http.request and ip.src==172.16.50.10' -T fields -e tcp.stream -e http.request.uri` 将恶意请求映射到 TCP 流
- `tshark -r attack.pcap -q -z follow,tcp,ascii,N` 以读取服务器响应 (数据库名称、转储的行)
### 离线哈希破解
- `john` (Raw-MD5) 结合 `rockyou.txt`,仅在分析师工作站上运行,绝不对实时服务器运行。哈希在不到一秒钟的时间内被恢复。
### 环境
- BeCode SOC 培训工作站上的 `bash`,加上用于离线破解的分析师 Mac。使用 VS Code 和 Markdown 编写笔记和报告。
## 可复现性
证据包属于 BeCode 实验室的财产,不予重新分发。报告中的每一个声明都可以追溯到特定的日志来源、数据包流和时间戳,因此任何拥有该副本的人都可以复现分析过程。
### 复现关键发现
需要证据包 (`logs/web_access.log`, `logs/auth.log`, `attack.pcap`):
```
# Finding 4.1:隔离攻击者(仅限 192.168.10.0/24 之外的 IP)
awk '{print $1}' logs/web_access.log | sort | uniq -c | sort -rn
# Finding 4.1:SQLi 技术链,按顺序
grep "172.16.50.10" logs/web_access.log | grep -iE "union|select|order|%27|information_schema"
# Finding 4.2:读取包含导出的 users 表的服务器响应
tshark -r attack.pcap -Y 'http.request and ip.src==172.16.50.10' \
-T fields -e tcp.stream -e http.request.uri | grep -iE "FROM%20users"
tshark -r attack.pcap -q -z follow,tcp,ascii,447 | grep -iE "First name|Surname|[a-f0-9]{32}"
# Finding 4.2:读取枚举的数据库名称
tshark -r attack.pcap -q -z follow,tcp,ascii,14 | grep -iE "Surname|First name"
# Finding 4.3:离线破解 j.martin hash(分析师工作站)
echo 'ccf5538dc31d435d6bab145c924041d8' > jmartin.hash
john --format=raw-md5 --wordlist=/path/to/rockyou.txt jmartin.hash
john --show --format=raw-md5 jmartin.hash
# Finding 4.4:通过 SSH 进行凭据重用
grep -iE "172.16.50.10|j.martin" logs/auth.log
```
## 已知局限性
- **仅限取证范围。** 这是一个调查实验室。严重性由分析师进行评级 (影响、技术类别、威胁状态),而非派生自 CVSS。
- **检测规则为实验室调优。** `detection/` 中的四个 Suricata 特征码有意设计得非常简单,适用于培训门户网站。生产环境的部署需要进行调优 (更严格的源和目标范围、对 SUBSTRING 等通用关键字进行窄的内容匹配)。这记录在 `detection/README.md` 中。
- **证据包未重新分发。** 该包属于 BeCode 实验室的财产。持有自己副本的任何人都可以复现声明,但原始日志和数据包捕获并未在此处发布。
- **服务器端查询未恢复。** 确切的后端 SQL 语句是从注入行为和响应中推断出来的,而不是从应用程序源代码中读取的。
- **立足点后的活动未确定。** 确认了以 `j.martin` 身份进行的 SSH 会话已成功,但无法从此数据包中重建攻击者在会话内部做了什么。这是下一个事件的起点。
- **捕获窗口。** PCAP 仅覆盖攻击窗口,而不包含当天的其余时间。没有内存获取,也没有文件系统镜像。
## 路线图
- **检测规则集 (已完成):** `detection/` 中的四个 Suricata 特征码,已针对捕获的数据进行验证,并提供了每个规则的警报计数和误报说明,这与 INC-2026-001 中提供的 Suricata 规则集保持一致。
- **v2 (可能):** 将实验室规则转换为针对生产环境调优的特征码 (限定源和目标范围、加入 `flow:established`、更窄的内容匹配),并添加等效的 Wazuh 检测逻辑。
## 许可证
[MIT](LICENSE),2026 Johan-Emmanuel Hatchi。
报告文本和方法论笔记在 MIT 许可下发布:可自由复制、改编和重复使用,但需注明出处。证据包、实验室基础设施和原始项目简报仍为 BeCode Brussels 的财产,不予重新分发。
## 关于
在 [BeCode Brussels](https://becode.org) Blue & Red Team 训练营 (2025 年 11 月至 2026 年 9 月) 期间交付的独立 DFIR 调查,Mission 04,提交于 2026-06-11。
作者:**Johan-Emmanuel Hatchi**,法国人,常驻布鲁塞尔,BeCode Brussels 的网络安全学生 (2025 年 11 月至 2026 年 9 月),正在积极寻找 2026 年 9 月的实习机会。
[GitHub](https://github.com/Jhatchi) - [LinkedIn](https://www.linkedin.com/in/johan-emmanuel-hatchi/)
欢迎提供 2026 年 9 月在比利时开始的网络安全实习机会。寻找 SOC L1/L2、初级 DFIR 或检测工程职位,且此类端到端工作 (Web 日志分析、数据包检查、离线凭证破解、跨来源关联、正式客户报告) 属于业务范畴。
标签:CISA项目, Metaprompt, SQL注入分析, Suricata规则, 入侵调查, 安全报告, 应用安全, 数字取证与应急响应, 蓝队演练, 防御加固