Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
ModuleShifting — Module Stomping 和 Module Overloading 注入技术的更隐蔽变体,可减少内存 IoC。使用 Python ctypes 实现。 | Kitploit
工具/GitHubGitHub/naksyn/moduleshifting
内存取证红队Payload 开发二进制利用
GitHubnaksyn/moduleshifting

ModuleShifting

Module Stomping 和 Module Overloading 注入技术的更隐蔽变体,可减少内存 IoC。使用 Python ctypes 实现。

查看仓库
1351432年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Supported Python versions Twitter

ModuleShifting

本工具已在 2023 x33fcon 演讲:“提升内存注入技术的隐蔽性” [视频] [博客] 上展示。

这是什么

ModuleShifting 是 Module Stomping 和 Module Overloading 注入技术的更隐蔽变体。它实际上是用 Python ctypes 实现的,因此可以通过 Python 解释器和 Pyramid 完全在内存中执行,从而避免使用编译加载器。

该技术可与 PE 或 shellcode 载荷一起使用,然而,更隐蔽的变体适用于那些需要在功能上独立于 shellcode 所加载的最终载荷的 shellcode 载荷。

ModuleShifting 在与 shellcode 载荷一起使用时,执行以下操作:

  1. 通过 LoadLibrary 加载合法的宿主 DLL
  2. 将指定节的内存权限更改为 RW
  3. 用 shellcode 覆盖目标节
  4. 添加可选填充以更好地融入误报行为(更多信息见此处)
  5. 将权限更改为 RX
  6. 通过函数指针执行 shellcode - 其他执行方法:函数回调或 CreateThread API
  7. 将原始 DLL 内容写回已执行的 shellcode - 此步骤避免在宿主 DLL 的映像内存空间中留下恶意内存痕迹。shellcode 必须在功能上独立于后续阶段,否则执行会中断。

immagine

当使用 PE 载荷时,ModuleShifting 将执行以下操作:

  1. 通过 LoadLibrary 加载合法的宿主 DLL
  2. 将指定节的内存权限更改为 RW
  3. 逐节将 PE 复制到指定的目标点
  4. 添加可选填充以更好地融入误报行为
  5. 执行基址重定位
  6. 解析导入表
  7. 通过将权限设置为其原始值来完成节处理(避免创建 RWX 内存区域)
  8. 执行 TLS 回调
  9. 执行 PE 入口点

为什么它有用

ModuleShifting 可用于在不动态分配内存(即 VirtualAlloc)的情况下注入载荷,并且与 Module Stomping 和 Module Overloading 相比,它更隐蔽,因为它减少了注入技术本身产生的 IoC 数量。

ModuleShifting 与一些公开实现的 Module Stomping(来自 Bobby Cooke 和 WithSecure)之间主要有 3 个区别:

  1. 填充:在写入 shellcode 或 PE 时,可以使用填充来更好地融入常见的误报行为(例如第三方应用程序或 .net DLL 在其 .text 节上写入 x 字节)。
  2. 使用函数指针执行 shellcode。这有助于避免创建新线程或调用不寻常的函数回调。
  3. 将原始 DLL 内容恢复回已执行的 shellcode。这是一个关键区别。

ModuleShifting 与 Module Overloading 之间的区别如下:

  1. PE 可以从指定节开始写入,而不是从宿主 DLL 的 PE 起始位置。一旦仔细选择目标节,这可以减少产生的 IoC 数量(例如,不覆盖宿主 DLL 的 PE 头,或在 .text 节上覆盖更少的字节等)。
  2. 可以添加到 PE 载荷本身的填充,以更好地融入误报。

使用功能独立的 shellcode 载荷(如 AceLdr Beacon Stageless shellcode 载荷),ModuleShifting 能够在无需动态分配内存的情况下进行本地注入,并且在 Moneta 和 PE-Sieve 扫描中产生零 IoC。我知道 AceLdr 睡眠载荷可能被其他优秀工具(如 Hunt-Sleeping-Beacon)检测到,但这里的重点在于注入技术本身,而不是载荷。在我们的案例中,实现更高隐蔽性的关键在于 shellcode 的功能独立性,这样写入的恶意字节可以恢复为其原始内容,从而有效擦除注入痕迹。

免责声明

所有信息及内容仅供教育用途。请自行承担风险操作。作者及其雇主不对任何个人或组织因使用本工具而导致的直接或间接损失负责。

致谢

这项工作的完成得益于众多杰出人士分享的知识和工具,如 Aleksandra Doniec @hasherezade、Forest Orr 和 Kyle Avery。在我的整个学习过程中,我大量使用了 Moneta、PeSieve、PE-Bear 和 AceLdr,它们对我理解这一主题至关重要。

用法

ModuleShifting 可与 Pyramid 及 Python 解释器配合使用,完全在内存中执行本地进程注入,避免使用编译加载器。

  1. 克隆 Pyramid 仓库:

git clone https://github.com/naksyn/Pyramid

  1. 用你偏好的 C2 生成一个 shellcode 载荷,并将其放入 Pyramid 的 Delivery_files 文件夹。载荷要求请参见注意事项部分。
  2. 修改 Pyramid Modules 文件夹内 moduleshifting.py 脚本的参数。
  3. 启动 Pyramid 服务器: python3 pyramid.py -u testuser -pass testpass -p 443 -enc chacha20 -passenc superpass -generate -server 192.168.1.2 -setcradle moduleshifting.py
  4. 在 Python 解释器上执行生成的 cradle 代码。

演示

https://github.com/naksyn/ModuleShifting/assets/59816245/67fcf888-3385-47da-b828-8a2dafeeb1e2

注意事项

要成功执行该技术,应使用一种能够在内存其他区域加载额外自维持载荷的 shellcode 载荷。ModuleShifting 已使用 AceLdr 载荷进行测试,该载荷能够在堆上加载 Beacon 的完整副本,从而打破与初始 shellcode 的功能依赖。该技术适用于任何具有类似能力的 shellcode 载荷。因此,初始 shellcode 一旦执行即无用,没有理由将其作为 IoC 保留在内存中。

还应选择一个在目标节上有足够空间容纳 shellcode 的宿主 DLL,否则技术会失败。

检测机会

Module Stomping 和 Module Shifting 都需要在合法 DLL 内存空间写入 shellcode。ModuleShifting 会在清理阶段后消除此 IoC,但具有实时检测能力的扫描器仍可能发现指标。

immagine

下载工具