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

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

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

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

工具目录

分类

查看所有分类
Loading categories
Spartacus — Spartacus DLL/COM Hijacking Toolkit | Kitploit
工具/GitHubGitHub/accenture/spartacus
Defensive ToolsPayload GenerationCode AnalysisExploitationReverse EngineeringPenetration TestingBinary AnalysisRed TeamingArchived
GitHubaccenture/spartacus

Spartacus

Spartacus DLL/COM Hijacking Toolkit

查看仓库
1.1k1532年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

[!CAUTION] 此仓库已不再维护,请访问 https://github.com/sadreck/Spartacus 获取最新版本。

Spartacus DLL/COM 劫持工具包 version

为什么叫“Spartacus”?

如果你看过1960年的电影《斯巴达克斯》,你会记得罗马人要求斯巴达克斯自首的场景。当真正的斯巴达克斯站起来时,其他人也纷纷站起来,用“我是斯巴达克斯”这句话声称自己就是他。

当一个容易受到DLL劫持攻击的进程要求加载一个DLL时,它就像在问“谁是 version.dll?”然后随机目录开始声称“我是 version.dll”和“不,我是 version.dll”。这就是 Spartacus。

这个工具与其他劫持工具有何不同?

  • Spartacus 自动化了大部分过程。它解析原始的 SysInternals Process Monitor 日志,你可以让 ProcMon 运行数小时,从而发现第二层和第三层的 DLL/COM 劫持漏洞(例如,一个应用程序加载另一个 DLL,该 DLL 又在你使用父应用程序的特定功能时加载另一个 DLL)。
  • 自动为易受攻击的 DLL 生成 Visual Studio 解决方案。
  • 能够处理大型 PML 文件,并将所有感兴趣的事件输出存储到 CSV 文件中。本地基准测试在 45 秒内处理了一个包含 800 万个事件的 3GB 文件。
  • 支持扫描 DLL 和 COM 劫持漏洞。
  • 支持生成自签名证书并对 DLL 文件进行签名。
  • 通过利用 Ghidra 功能,提取导出函数签名,并通过单独代理的函数执行你的载荷,而不是从 DllMain 运行所有内容。该技术受 https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain 上的演练启发并由 Shantanu Khandelwal 实现。
  • [防御] 监控模式,试图识别正在代理调用的运行中应用程序,即“正在进行 DLL 劫持”。这仅用于捕获低 hanging fruit,不应依赖于此。

目录

  • 安装
  • 支持的功能
    • DLL 劫持
      • 使用说明
    • COM 劫持
      • 使用说明
    • DLL 代理生成
      • 使用说明
    • 对 DLL 文件进行签名
      • 使用说明
    • DLL 劫持检测
  • 命令行参数
  • 贡献
  • 致谢

安装

在 Releases 下找到并下载最新版本的 Spartacus。或者直接克隆此仓库并从源代码构建。

支持的功能

以下是 Spartacus 支持的每种模式的描述。

注意:与 v1 相比,v2 的命令行参数发生了显著变化。

DLL 劫持

Spartacus 的原始功能仅仅是查找 DLL 劫持漏洞。其工作方式如下:

  1. 根据传递的参数动态生成 ProcMon(PMC)配置文件。将设置的过滤器包括:
    • 操作为 CreateFile。
    • 路径以 .dll 结尾。
    • 进程名称不是 procmon.exe 或 procmon64.exe。
    • 启用“丢弃过滤事件”以确保最小的 PML 输出大小。
    • 禁用“自动滚动”。
  2. 执行 Process Monitor 并暂停,直到用户按下 ENTER。
  3. 用户运行/终止进程,或按需让其运行任意长时间。
  4. 用户按下 ENTER 后终止 Process Monitor。
  5. 解析输出的事件日志(PML)文件。
    1. 创建一个 CSV 文件,包含所有结果为 NAME_NOT_FOUND 和 PATH_NOT_FOUND 的 DLL。
    2. 比较上述 DLL,并尝试识别实际加载的 DLL。
    3. 对于每个“找到”的 DLL,生成一个 Visual Studio 解决方案,用于代理所有已识别 DLL 的导出函数。

DLL 劫持使用说明

收集所有事件并保存到 C:\Data\logs.pml。所有易受攻击的 DLL 将保存为 C:\Data\VulnerableDLLFiles.csv,所有代理 DLL 解决方案保存在 C:\Data\Solutions。

root@kitploit:~
--mode dll --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose

解析现有的 PML 事件日志输出,将输出保存到 CSV,并生成代理 Visual Studio 解决方案。

root@kitploit:~
--mode dll --existing --pml C:\MyData\SomeBackup.pml --csv C:\Data\VulnerableDLLFiles.csv --solution C:\Data\Solutions --verbose

截图

DLL 运行时

CSV 输出

COM 劫持

Spartacus 的新功能之一是识别本地 COM 劫持漏洞。其工作方式如下:

  1. 根据传递的参数动态生成 ProcMon(PMC)配置文件。将设置的过滤器包括:
    • 操作为 RegOpenKey。
    • 进程名称不是 procmon.exe 或 procmon64.exe。
    • 启用“丢弃过滤事件”以确保最小的 PML 输出大小。
    • 禁用“自动滚动”。
  2. 执行 Process Monitor 并暂停,直到用户按下 ENTER。
  3. 用户运行/终止进程,或按需让其运行任意长时间。
  4. 用户按下 ENTER 后终止 Process Monitor。
  5. 解析输出的事件日志(PML)文件。
    1. 识别所有以 InprocServer32 结尾且结果为 NAME_NOT_FOUND 的缺失注册表项。
    2. 如果识别的项位于 HKEY_CURRENT_USER 下,则在 HKEY_CLASSES_ROOT 下搜索其 GUID,并将详细信息包含在导出的 CSV 中(如果找到)。
    3. 创建一个包含所有收集信息的 CSV 输出。
  6. Spartacus 不会自动为 COM 劫持创建 Visual Studio 解决方案,但如果需要创建代理 DLL,可以使用 proxy 模式。

对于 COM 劫持,Spartacus 还支持扫描本地系统中配置错误的 COM 条目:

  1. 枚举所有 HKEY_CLASSES_ROOT、HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE。
  2. 查找名为 InProcServer、InProcServer32、LocalServer 或 LocalServer32 的注册表项。
  3. 识别任何缺失的 EXE/DLL 位置,以及任何 ACL 配置错误,例如当前用户能够修改或删除文件。

COM 劫持使用说明

收集所有事件并保存到 C:\Data\logs.pml。所有易受攻击的 COM 信息将保存为 C:\Data\VulnerableCOM.csv。

root@kitploit:~
--mode com --procmon C:\SysInternals\Procmon.exe --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

处理现有的 PML 文件以识别易受攻击的 COM 条目。

root@kitploit:~
--mode com --existing --pml C:\Data\logs.pml --csv C:\Data\VulnerableCOM.csv --verbose

枚举本地系统注册表以识别缺失/配置错误的 COM 库和可执行文件。

root@kitploit:~
--mode com --acl --csv C:\Data\VulnerableCOM.csv --verbose

截图

COM 运行时

CSV 输出

DLL 代理生成

Spartacus 支持通过为你想要利用的 DLL 创建骨架项目来生成 Visual Studio 解决方案。

  • 通过将函数导出回合法 DLL 来重定向所有调用。
    • 这意味着你必须从 DllMain 函数执行你的载荷。
  • 使用 Ghidra 从目标 DLL 中尽可能多地提取函数签名/定义,并为这些函数创建代理函数。
    • 对于无法提取签名的任何函数,将直接重定向到合法函数/DLL。
    • 这意味着你可以从 DllMain 之外的函数执行你的载荷。
    • 例如,如果你想利用 version.dll,如果易受攻击的应用程序调用了 GetFileVersionInfoExW,你可以从此函数运行你的植入程序。

DLL 代理生成使用说明

生成一个重定向所有导出(无函数代理)的解决方案。

root@kitploit:~
--mode proxy --dll C:\Windows\System32\version.dll --solution "C:\data\tmp\refactor-version" --overwrite --verbose --external-resources

可以一次输入多个 DLL。

root@kitploit:~
--mode proxy --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\userenv.dll --solution "C:\data\tmp\dll-collection" --overwrite --verbose --external-resources

为尽可能多的函数创建代理(基于 Ghidra 的输出)。

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose

与上面相同,但使用外部资源文件生成解决方案(如果你需要修改它们)。

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources

利用预生成的函数原型文件,针对 Ghidra 无法提取函数定义的函数。

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\userenv.dll --solution C:\Projects\spartacus-userenv --overwrite --verbose --external-resources --prototypes C:\data\prototypes.csv

仅生成函数 GetFileVersionInfoExW 和 GetFileVersionInfoExA 的代理。

root@kitploit:~
--mode proxy --ghidra C:\ghidra\support\analyzeHeadless.bat --dll C:\Windows\System32\version.dll --solution C:\Projects\spartacus-version --verbose --overwrite --external-resources --only "GetFileVersionInfoExW, GetFileVersionInfoExA"

从现有的 *.h 文件生成函数原型数据库,帮助为 Ghidra 无法提取函数定义的函数生成代理函数。

root@kitploit:~
--mode proxy --action prototypes --path "C:\Program Files (x86)\Windows Kits" --csv C:\data\prototypes.csv --verbose

列出 DLL 的导出函数,并检查每个函数是否有预生成的原型。

root@kitploit:~
--mode proxy --action exports --dll C:\Windows\System32\version.dll --dll C:\Windows\System32\amsi.dll --prototypes ./Assets/prototypes.csv

对 DLL 文件进行签名

Spartacus 现在支持生成自签名证书(同时从现有文件复制属性),并对 DLL 文件进行签名。

对 DLL 文件进行签名的使用说明

创建一个签名证书,使用来自 C:\Windows\System32\version.dll 的属性(必须是已签名的 DLL)。

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\certificate.pfx" --password "Welcome1" --not-before "2022-12-31 00:00:55" --not-after "2026-01-01 00:00:01" --copy-from C:\Windows\System32\version.dll --verbose

使用现有/生成的证书对 DLL 进行签名。

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\certificate.pfx" --password "Welcome1" --path "C:\Input\MyFakeVersion.dll" --algorithm SHA256 --verbose

DLL 劫持检测

Spartacus 还有一个 --detect 模式,试图识别活跃的 DLL 代理。其逻辑如下:

  • 枚举所有进程。
  • 对于每个进程,加载其已加载到内存中的 DLL(模块)(假设你有适当的权限)。
  • 如果找到同名的 DLL:
    • 如果两个文件都在操作系统路径中(即 Windows、System32、Program Files),则忽略。
    • 如果只有一个文件在操作系统路径中,而另一个在用户可写的位置,则标记该文件。

要使用此功能,只需运行带有 --detect 参数的 Spartacus。

自签名可执行文件/DLL

Spartacus 支持 --sign 模式,允许你生成自签名证书,同时也用它们对编译的 DLL 进行签名。

生成一个自签名证书,从现有文件复制颁发者/使用者:

root@kitploit:~
--mode sign --action generate --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --not-before "2023-01-01 00:00:04" --not-after "2025-01-01 00:00:42" --copy-from C:\Windows\System32\version.dll --verbose

并使用该证书对你的编译文件进行签名:

root@kitploit:~
--mode sign --action sign --pfx "C:\Output\myCertificate.pfx" --password "Welcome1" --path "C:\Projects\Spartacus-AMSI\amsi.dll" --algorithm SHA256 --verbose

命令行参数

为了方便使用,请使用 CommandLineGenerator.html 文件。

贡献

无论是拼写错误、错误还是新功能,Spartacus 非常欢迎贡献,只要我们同意以下内容:

  • 你同意此项目的 MIT 许可证。
  • 在创建拉取请求之前,先创建一个问题,以便在进行任何工作之前进行讨论,因为内部开发不通过公共 GitHub 仓库跟踪。否则,如果你的拉取请求被拒绝,例如因为我们已经正在开发相同/类似功能,或出于任何其他原因。

致谢

  • https://github.com/eronnen/procmon-parser/
  • https://www.redteam.cafe/red-team/dll-sideloading/dll-sideloading-not-by-dllmain
  • https://stmxcsr.com/persistence/com-hijacking.html
  • Spartacus 的图标来自 Helmet icons created by Darius Dan - Flaticon | https://dariusdan.com/
  • https://github.com/Danielku15/SigningServer
下载工具
模式参数描述
--mode定义要使用的模式,可选值:dll、proxy、com 和 detect。
所有--verbose启用详细输出。
所有--debug启用调试输出。
所有--external-resources默认情况下,Spartacus 将使用嵌入资源生成 VS 解决方案文件等。如果你需要修改模板,请使用此参数使 Spartacus 从 ./Assets 文件夹加载所有文件。
dll、com--procmonSysInternals Process Monitor 的 procmon.exe 或 procmon64.exe 的位置(文件)。
dll、com--pml存储 ProcMon 事件日志文件的位置(文件)。如果文件存在,将被覆盖。当与 --existing 一起使用时,表示要读取的事件日志文件,不会被覆盖。
dll、com--pmc定义要使用的自定义 ProcMon(PMC)文件。此文件不会被修改,将按原样使用。
dll、com--csv存储执行结果的 CSV 输出的位置(文件)。
dll、proxy--solution存储代理 DLL 解决方案的目录路径。
dll、com--existing指示 Spartacus 应处理现有的 ProcMon 事件日志文件(PML)的开关。要指示事件日志文件请使用 --pml,当你运行 ProcMon 数小时或在启动日志中使用它时非常有用。
dll--all默认情况下,Windows 或 Program Files 目录中的任何 DLL 将被跳过。使用此选项可将这些目录包含在输出中。
proxy--ghidraGhidra 的 analyzeHeadless.bat 文件的路径。当你想代理特定函数而不是仅仅通过 DllMain 时使用。
proxy--dll你想要代理的 DLL 的路径,可以包含此参数的多个实例。此外,还可以包含通配符,如 C:\Windows\System32\*.dll,但所有路径必须以 *.dll 结尾。
proxy、sign--overwrite如果 --solution(代理)或 --pfx(签名)文件已存在,使用此标志覆盖它。
proxy--only仅为在此变量中定义的函数生成代理函数。值为逗号分隔,例如 'WTSFreeMemory,WTSFreeMemoryExA,WTSSetUserConfigA'。
proxy--action默认操作是生成 VS 解决方案。--action prototypes 接受 Windows SDK 文件夹作为输入,并解析 *.h 文件以生成函数原型数据库。--action exports 显示 DLL 的导出函数,当与 --prototypes 配合使用时,将显示函数定义是否已预生成。
sign--action当与 sign 模块一起使用 --action 时,它接受两个选项之一:generate 用于创建 PFX,sign 用于对文件进行签名。
proxy--path目前仅与 --action prototypes 一起使用,是 Windows SDK 目录的位置。
proxy--prototypesprototypes.csv 的位置(当前在 ./Assets 文件夹中)。
com--acl枚举本地系统中缺失/配置错误的 COM 库和可执行文件。
sign--subject与 --action generate 一起使用,指定证书主题。
sign--issuer与 --action generate 一起使用,指定证书的颁发者。
sign--copy-from与 --action generate 一起使用,指定一个现有的已签名文件,从中复制颁发者和主题。
sign--not-before与 --action generate 一起使用,定义新证书何时开始生效,格式为 YYYY-MM-DD HH:MM:SS。
sign--not-after与 --action generate 一起使用,定义新证书何时失效,格式为 YYYY-MM-DD HH:MM:SS。
sign--pfx当与 --action generate 一起使用时,pfx 文件将保存到此处。当与 --action sign 一起使用时,将从此处加载 pfx 文件。
sign--password当与 --action generate 一起使用时,定义 --pfx 文件的密码。
sign--path当与 --action sign 一起使用时,定义要签名的可执行文件/DLL 文件的位置。
sign--algorithm当与 --action sign 一起使用时,定义用于签名的哈希算法。选项包括:MD5、SHA1、SHA256、SHA384、SHA512。
sign--timestamp当与 --action sign 一起使用时,定义时间戳服务器,例如 http://timestamp.sectigo.com 或 http://timestamp.digicert.com。