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

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

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

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

工具目录

分类

查看所有分类
Loading categories
EternalBlueC — 用C/C++重写的EternalBlue工具套件,包括:MS17-010漏洞利用、EternalBlue漏洞检测器、DoublePulsar检测器以及DoublePulsar Shellcode和DLL上传器。 | Kitploit
工具/GitHubGitHub/bhassani/eternalbluec
漏洞利用框架漏洞分析漏洞利用Shellcode恶意软件分析渗透测试学习与教育Shellcode 生成Payload 开发二进制利用
GitHubbhassani/eternalbluec

EternalBlueC

6131381个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

用C/C++重写的EternalBlue工具套件,包括:MS17-010漏洞利用、EternalBlue漏洞检测器、DoublePulsar检测器以及DoublePulsar Shellcode和DLL上传器。

查看仓库

License: GPL v3

EternalBlueC

用 C/C++ 重写的 EternalBlue 套件,包括:

  • MS17-010 漏洞利用(包含 DoublePulsar)
  • EternalBlue/MS17-010 漏洞检测器
  • DoublePulsar 检测器
  • DoublePulsar 上传 DLL
  • DoublePulsar 上传 Shellcode
  • DoublePulsar 上传带 SMB 结构的 DLL
  • DoublePulsar 上传带 SMB 结构的 Shellcode
  • DoublePulsar 上传内嵌可执行文件的 DLL

项目已完成部分

  • 上传 Shellcode — 已完成并可运行,将你的 shellcode 注入任意进程
  • 上传 DLL — 已完成并可运行,将你的 DLL 注入任意进程
  • 上传内嵌可执行文件的 DLL — 已完成,将你的 DLL 注入任意进程,并将可执行文件释放为 “mssecsvc.exe”

项目目标

  • 允许使用 SMB 结构和十六进制捕获动态生成 DoublePulsar 的协商、会话建立、树连接、TransNamedPipe 和 Transaction2 数据包
  • 允许编辑 EternalBlue 漏洞利用载荷,移除 DoublePulsar 植入,并改为发送自定义 shellcode
  • 允许动态生成 EternalBlue 数据包
  • 要求用户输入所有 IP 地址、载荷(如 shellcode 或文件路径)以及授权以继续
  • 增加更多输出信息
  • 从 SMB 响应中显示 Windows 版本
  • 添加命令行参数支持(DoublepulsarExecute.exe -h 192.168.0.8 -f PopCalculatorShellcode.bin)
  • 增加更多错误检查,如套接字超时

EternalBlue 和 DoublePulsar 套件

  • ms17_vuln_status.cpp — 此程序发送 4 个 SMB 数据包:1 个协商、1 个会话建立、1 个树连接和 1 个 TransNamedPipe 请求。然后读取 TransNamedPipeRequest(PeekNamedPipe 请求)的 NT_STATUS 响应,判断 SMB 数据包中的 NT_STATUS 是否等于 0xC0000205(STATUS_INSUFF_SERVER_RESOURCES)。如果正确,则目标存在 MS17-010 漏洞。已在未修补的 Windows 7 x64 上测试。

ms17vulnstatus

  • doublepulsar_check.cpp — 此程序发送 4 个 SMB 数据包:1 个协商、1 个会话建立、1 个树连接和 Trans2 SESSION_SETUP 数据包。通过发送 Trans2 SESSION_SETUP 数据包,可以将发送的多路复用 ID 与 Trans2 响应数据包中的多路复用 ID(0x51 或 81)进行比较。DoublePulsar 会读取发送的多路复用 ID,并在 ping 命令成功后在 Trans2 SESSION_SETUP 响应的多路复用 ID 中返回 +10(十六进制)。之后发送命令以烧毁 DoublePulsar 后门。DoublePulsar 的烧毁命令位于 SMB 数据包的超时参数中。此后 DoublePulsar 进入休眠状态,但并未从系统中移除。已在 Windows 7 x64 上测试。

doublepulsar_check

  • DoublePulsarXORKeyCalculator.cpp — 此程序发送 4 个 SMB 数据包:1 个协商和 3 个请求。最后一个请求是 Trans2 SESSION_SETUP 请求。收到 Trans2 SESSION_SETUP 响应后,提取 SMB 签名(Recvbuff[18] 到 Recvbuff[22])。Recvbuff[22] 表示架构类型:1 表示 x64,0 表示 x86/32 位。将 SMB 签名从无符号字符转换为无符号整数。

SMBSignatureWireshark

然后将 Recvbuff[18] 到 Recvbuff[22] 的值通过 DoublePulsar XOR 密钥计算函数处理,生成一个无符号整数 XOR 密钥,用于加密将上传到 DoublePulsar 的 shellcode 或 DLL 载荷。已在 Windows 7 x64 上测试。

示例截图:

XORCalculator

来自 FUZZBUNCH 中原始 NSA 二进制文件的相同密钥 XORCalculatorFromNSAbinary

  • DoublePulsar_structure_ping.cpp — 此程序发送 4 个 SMB 数据包:1 个协商、1 个会话建立、1 个树连接和 Trans2 SESSION_SETUP 数据包。与 doublepulsar_check.cpp 的不同之处在于,它使用结构体而非从 WannaCry 样本中提取的硬编码 SMB 十六进制字符串来生成 Trans2 DoublePulsar PING 数据包。另一区别是动态生成 TreeConnect 数据包,而非使用 WannaCry 样本中的硬编码版本。此程序生成的 ping 数据包将告知远程机器上是否安装了 DoublePulsar。

  • DoublePulsar_structure_exec.cpp — 此程序发送 5 个 SMB 数据包:1 个 SMB 协商、1 个会话建立、1 个树连接、1 个 DoublePulsar Trans2 SESSION_SETUP Ping 数据包和 1 个 DoublePulsar Trans2 SESSION_SETUP 执行数据包。与 Doublepulsar_UploadShellcode.cpp 的不同之处在于,它使用结构体而非从 WannaCry 样本中提取的硬编码 SMB 十六进制字符串来生成 Trans2 DoublePulsar 执行数据包。

  • Doublepulsar_UploadDLL.cpp — 此程序专为 DLL 设计。它发送 4 个 SMB 数据包以及包含 DLL 数据的 SMB Trans2 数据包:1 个协商、1 个会话建立、1 个树连接、1 个 Ping Trans2 SESSION_SETUP 请求和 1 个执行 Trans2 SESSION_SETUP 数据包。发送 Ping Trans2 SESSION_SETUP 请求数据包以获取 Trans2 SESSION_SETUP 响应中的 SMB 签名。该签名通过 DoublePulsar XOR 密钥计算器处理。然后程序读取一个 DLL 文件,将其与 64 位内核和用户态 shellcode 合并以运行 DLL,并使用从 SMB 签名计算出的 DoublePulsar XOR 密钥对缓冲区进行 XOR 加密。通过分配内存、复制 Trans2 数据包、编辑 SMB 事务所需的值(UserID、TreeID、TotalDataCount、DataCount、ByteCount),然后将 XOR 后的数据(内核 shellcode + DLL)复制到末尾,并以每次 4096 字节的总包长度循环发送给 DoublePulsar。总包长度为 4178 字节。4096 字节用于 XOR 加密数据。未来版本将使用 SMB 和 TRANSACTION2 结构体。

  • Doublepulsar_UploadShellcode.cpp — 此程序发送 5 个 SMB 数据包:1 个协商、1 个会话建立、1 个树连接、1 个 Ping Trans2 SESSION_SETUP 数据包和 1 个执行 Trans2 SESSION_SETUP 数据包。发送 Trans2 SESSION_SETUP 请求数据包以获取 TRANS2 SESSION_SETUP 响应中的 SMB 签名。该签名通过 DoublePulsar XOR 密钥计算器处理。然后程序从缓冲区复制内核 shellcode 和示例 shellcode,使用从 SMB 签名计算出的 DoublePulsar XOR 密钥对缓冲区进行 XOR 加密。通过分配内存、复制 Trans2 执行数据包、编辑 SMB 事务所需的值(UserID、TreeID、TotalDataCount、DataCount、ByteCount),然后将 SESSION_SETUP 参数和 4096 字节的 XOR 加密 shellcode 数据复制到末尾,以总包长度 4178 字节发送给 DoublePulsar。总包长度为 4178 字节。NetBIOS 长度为 4174(因为 NetBIOS 头部不计算自身大小)。该数据包中的 12 字节用于 DoublePulsar SESSION_SETUP 参数,4096 字节用于 XOR 加密数据。未来版本将使用 SMB 和 TRANSACTION2 结构体。

UploadShellcode

  • 由以下来源生成的 Shellcode — zerosum0x0 为 ETERNALBLUE 编写了自定义 shellcode,可稍作修改后用于 DOUBLEPULSAR。由于复制 shellcode 中的系统调用覆盖对该用例不必要,我们将其取消定义:
    ;%define SYSCALL_OVERWRITE ; 在系统调用中以内核 IRQL 运行
    重新编译:nasm -w-other -o >(xxd -p -c 16 | sed 's/../\x&/g') external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
    https://github.com/rapid7/metasploit-framework/blob/master/external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
    https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x64.asm
    https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x86.asm
    https://www.rapid7.com/blog/post/2019/10/02/open-source-command-and-control-of-the-doublepulsar-implant/

  • DoublePulsar_UploadExe.cpp — 此程序专为可执行文件设计。将可执行文件读入内存,放入 WannaCry 启动器 DLL 中,通过 DoublePulsar 发送:1 个协商、1 个会话建立、1 个树连接、1 个 Trans2 Ping 数据包和多个 Trans2 exec SESSION_SETUP 数据包。发送 Trans2 Ping 请求数据包以获取 Trans2 响应中的 SMB 签名。该签名通过 DoublePulsar XOR 密钥计算器处理。然后程序读取一个 EXE 文件,将其与 64 位内核和用户态 shellcode 及一个骨架 DLL 文件合并,使用从 SMB 签名计算出的 DoublePulsar XOR 密钥对缓冲区进行 XOR 加密。通过分配内存、复制 Trans2 执行数据包、编辑 SMB 事务所需的值(UserID、TreeID、TotalDataCount、DataCount、ByteCount),然后将 XOR 后的数据(内核 shellcode + DLL + 可执行文件)复制到末尾,并以每次 4096 字节的总包长度循环发送给 DoublePulsar。总包长度为 4178 字节。NetBIOS 长度为 4174(因为 NetBIOS 头部不计算自身大小)。该数据包中的 12 字节用于 DoublePulsar SESSION_SETUP 参数,4096 字节用于 XOR 加密数据。

  • EternalBlue.cpp — 此程序发送多个 SMB 数据包:协商、会话建立、树连接以及多个 NT trans 和 Trans2 数据包。这些 NT trans 数据包是畸形构造的,用于在目标计算机内存中准备漏洞利用。通过多个套接字向目标同一端口发送更多空白或空的 SMB 数据包。EternalBlue 的大部分 base64 载荷通过套接字 1(发送协商、会话建立和树连接数据包的套接字)发送。然后创建 20 个其他套接字(套接字 3 到 21),并向这些套接字发送数据。之后在套接字 3 到 21 上发送 DoublePulsar。程序随后关闭这些套接字,触发 EternalBlue 和 DoublePulsar 在目标计算机上执行。然后发送 SMB 断开和 SMB 注销请求,连接关闭。该漏洞利用可行,已在 Windows 7 x64 上测试。后门完全运行大约需要 5 秒,这与互联网上 EternalBlue 相关文章报告的一致。可能需要多次利用尝试。然而当前存在一个错误:数据包中的 TreeID 和 UserID 未正确设置,将在后续版本中修复。对于刚启动的机器,由于 TreeID 和 UserID 为默认值,该工具可以正常工作。这些数据包需要更新 TreeID 和 UserID 值,当前设置为默认值“08 00”。

EternalBlue EternalBlue_cmd eternalbluepackets

Metasploit 模块

利用 Metasploit 的开源 DoublePulsar RCE 模块,创建了一个可用的自定义 Metasploit 模块。

我修改了逻辑,允许生成一个 DLL,将其与从 WannaCry 获取的 x64 内核 shellcode(前置)合并,使 DoublePulsar 能够运行该 DLL。

msfconsole

额外学习代码

仓库中还包含以下用于学习目的的内容,但本人不提供支持:

  • DoublePulsar x86/x64 上传 DLL 的 Python 脚本

  • EternalBlue 一体化二进制文件

  • 多架构内核队列 APC 汇编代码及 Windows x86/x64 多架构内核 Ring 0 到 Ring 3(通过队列 APC)的内核代码

  • 来自 worawit 的 EternalBlue x64/x86 内核载荷 shellcode

  • Eternalblue 重放文件

下载工具