dis0rder0x00/DbgNexum
GitHub: dis0rder0x00/DbgNexum
DbgNexum是一个利用Windows调试API进行shellcode注入的工具。
Stars: 179 | Forks: 39
# DbgNexum - Shellcode 注入
**DbgNexum** 是一个使用 Windows 调试 API 和共享内存(文件映射)注入 shellcode 的概念验证。它避免了直接写入和读取远程内存,而是通过上下文操作强制目标进程加载并执行有效负载。
## 概述
注入器连接到目标进程并创建一个挂起的线程。通过调试循环,它设置一个硬件断点以在特定的返回地址处捕获执行。在每次捕获时,注入器修改 CPU 寄存器以模拟函数调用,在目标进程内部编排一系列 Windows API 函数调用。
### 关键特性
- **无 `WriteProcessMemory` / `VirtualAllocEx`:** 有效负载通过 `CreateFileMapping` 和 `MapViewOfFile` 传输。
- **无 `ReadProcessMemory`:** 该方法从线程上下文中获取所有关键信息。
## 使用方法
1. 将您的 shellcode(和 XOR 密钥)包含在 `shellcode.h` 中
2. 查找目标进程的进程 ID。
3. 运行注入器:
```
DbgNexum.exe
```
**示例输出:**
```
[i] Section 'MZ' created and shellcode copied
[+] Bait thread created. Setting HWBP on FileTimeToSystemTime
[i] Execution Redirected:
|-> [0] Preparation & anchoring stack
|-> [1] Setting HWBP & buffer alloc
|-> [2] Copying File-Mapping name
|-> [3] Zeroing stack slot
|-> [4] Opening handle to named file mapping
|-> [5] Mapping payload into mem. with exec. perm.
|-> [6] Cleanup & shellcode execution
[+] Successfully detached from process 19256
[i] Orchestration complete.
```
## 工作原理
执行流程是注入器的调试循环和目标进程之间的持续往返。
**注入阶段**
`DebugLoop` 函数包含主要的注入逻辑并编排“状态机”:
**0. 准备:**
- 注入器保存当前堆栈指针以供每个阶段重用
- 为了获取锚定堆栈的返回地址,我们设置陷阱标志并将执行设置为立即 `ret` 调用。
**1. 分配:**
- 在锚定堆栈的返回地址上设置 HWBP,以在调用函数返回时收到通知。
- 准备并强制线程调用 `LocalAlloc` 以(显然)分配一个小缓冲区。
**2. 数据设置:**
- 准备并强制线程调用 `memcpy` 将字符串 `MZ` 复制到之前分配的缓冲区。
**3. 堆栈准备:**
- 强制线程调用 `memset` 将堆栈槽位清零。这是为阶段 5 准备的,该阶段将调用 `MapViewOfFile`。由于该函数将使用 >4 个参数,第 5 个参数通过堆栈(我们在这里设置的)传递。
**4. 打开映射:**
- 强制线程调用 `OpenFileMappingA` 使用 `MZ` 名称,"创建" 在阶段 2 和 3 中。
**5. 映射有效负载:**
- 强制目标调用 `MapViewOfFile`。这将在目标地址空间中映射包含 shellcode 的共享内存部分,并具有 `EXECUTE` 权限。
**6. 执行:**
- 将 `RIP` 重定向到 `MapViewOfFile` 返回的地址。
- 清除调试寄存器并断开连接。
标签:API 漏洞利用, PoC, Proof-of-Concept, RuleLab, Shellcode 注入, SSH蜜罐, Windows Debugging API, XML 请求, 云资产清单, 共享内存, 内存映射, 安全响应, 安全开发, 安全测试, 安全漏洞, 客户端加密, 攻击向量, 攻击性安全, 文件映射, 暴力破解, 硬件断点, 端点可见性, 系统调试, 调试循环, 进程注入, 远程执行, 逆向工程