DbgNexum–Shellcode注入

admin 2026-01-09 02:56:03 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: DbgNexum是一种利用Windows调试API和共享内存注入shellcode的概念验证工具。它通过调试循环设置硬件断点,操纵线程上下文寄存器,强制目标进程依次调用LocalAlloc、OpenFileMappingA等API,从而避免直接调用WriteProcessMemory并绕过传统监控。 综合评分: 85 文章分类: 免杀,二进制安全,漏洞POC,红队


cover_image

DbgNexum – Shellcode注入

TtTeam

2026年1月8日 18:01 海南

DbgNexum是一个概念验证项目,它利用 Windows 调试 API 和共享内存(文件映射)注入 shellcode。它避免直接读写远程内存,而是通过上下文操作强制目标进程加载并执行有效载荷。

注入器会附加到目标进程并创建一个挂起线程。它通过调试循环设置硬件断点,在特定返回地址处捕获程序执行。每次捕获成功后,注入器都会修改 CPU 寄存器以模拟函数调用,从而在目标进程内部编排一系列 Windows API 函数调用。

主要特点

WriteProcessMemory/ VirtualAllocEx:CreateFileMapping有效载荷通过和传输MapViewOfFile。

ReadProcessMemory:该方法从线程上下文中获取所有关键信息。

工作原理

执行流程是在注入器的调试循环和目标进程之间不断地来回交互。

注射阶段

DebugLoop函数包含主要的注入逻辑并协调“状态机”:

0. 准备工作:

  • 注入器会保存当前堆栈指针,以便在每个阶段重复使用。
  • 为了获取锚定栈的返回地址,我们设置一个陷阱标志并将执行设置为立即ret调用。

1. 分配:

  • 在锚定堆栈的返回地址上设置 HWBP,以便在被调用函数返回时收到通知。
  • 准备并强制线程调用LocalAlloc(显然)分配一个小缓冲区。

2. 数据设置:

  • 准备并强制线程调用函数memcpy,将字符串复制MZ到先前分配的缓冲区中。

3. 堆叠准备:

  • 强制线程调用函数memset将栈槽清零。这是为了第五阶段做准备,第五阶段将调用某个函数MapViewOfFile。由于该函数将使用超过四个参数,因此第五个参数将通过栈传递(我们在此处设置栈)。

4. 开放式地图:

  • OpenFileMappingA强制线程在第 2 阶段和第 3 阶段使用MZ名称“created”进行调用。

5. 地图有效载荷:

  • 强制目标调用MapViewOfFile。这会将共享内存区(包含 shellcode)映射到目标的地址空间,并赋予其EXECUTE相应的权限。

6. 执行:

  • 重定向RIP到返回的地址MapViewOfFile
  • 清除调试寄存器并分离。

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:TtTeam 《DbgNexum – Shellcode注入》

评论:0   参与:  0