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

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

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

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

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/redsiege/excelntdonut
钓鱼工具Payload生成漏洞利用Shellcode钓鱼攻击红队Shellcode 生成
GitHubredsiege/excelntdonut

EXCELntDonut

用于将DLL和EXE注入内存的Excel 4.0 (XLM)宏生成器。

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
root@kitploit:~
_______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    作者 @JoeLeonJr (@FortyNorthSec)                

EXCELntDonut 是一个 XLM (Excel 4.0) 宏生成器。从 C# 源代码(EXE)开始,最终生成一个可在内存中执行代码的 XLM (Excel 4.0) 宏。XLM (Excel 4.0) 宏可以保存为 .XLS 文件。

安装

root@kitploit:~
chmod +x install.sh
./install.sh

安装了什么?

  • pip3
  • mono-complete(包括 mcs 以及你可能在源文件中引用的所有库)
  • 作为 CLI 的 EXCELntDonut

如果你希望仅将 EXCELntDonut 作为 Python 脚本运行,你需要设置一个包含“pandas”和“donut-shellcode”两个包的虚拟环境。此外,你还需要通过 apt-get 安装 mono-complete,并使用 python3 调用 drive.py 脚本。我们建议直接使用 ./install.sh bash 脚本,但由你决定。

使用方法

root@kitploit:~
用法:
	$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate

参数:
	(必选)
	-f C# 源代码文件的路径(仅限 exe)

	-r 编译 C# 代码所需的引用(与在 Linux 上使用 mcs 编译时相同)
	(例如: -r 'System.Management')

	(可选)
	-o 输出文件名
	--sandbox 
		执行基本的沙箱检测。随着新方法的发现,此项会更新。
	--obfuscate 
		执行基本的宏混淆。

工作原理

你提供一个包含有效负载的 C# 文件(例如一个包含 Main 方法、可执行 Cobalt Strike 信标有效负载的 EXE)。该 C# 文件使用 MCS 编译成两个 .NET 程序集:x86 和 x64。编译后,优秀的工具 Donut(用于 x86)和 CLRvoyance(用于 x64)将每个程序集转换为位置无关的 shellcode。接着,所有空字节被移除,因为 XLM (Excel 4.0) 宏对空字节不友好,并且有效负载被分割成每行不超过 255 个字符(x86)或 10 个字符(x64)。

一旦 shellcode 准备好,它会与基本的进程注入函数(VirtualAlloc、WriteProcessMemory 和 CreateThread)以及一个架构检查函数(用于确定在目标系统上运行哪个有效负载 x86 或 x64)合并。如果你选择执行沙箱检测或基本混淆,则这些函数会更新你的宏。最后,输出结果放入一个 CSV 文件(保存为 .txt)。

如何创建 XLM (Excel 4.0) 宏

获得 EXCELntDonut 的输出文件后,在文本编辑器中打开输出文件,并复制全部内容(Ctrl-A, Ctrl-C)。在 Windows 虚拟机中打开 Excel,右键点击“Sheet 1”,选择“插入”。选择“MS Excel 4.0 宏”。转到单元格 A1,粘贴 EXCELntDonut 的输出。所有数据很可能会粘贴到一列中。数据以分号 “;” 分隔。转到“数据”选项卡,点击“分列”。选择“分隔符号”,在下一步中选择“分号”,然后点击“完成”。宏将分配到相应的列和行。

(注意 - 如果你选择了“--obfuscate”参数,你需要水平滚动相当远才能找到实际代码,因为混淆逻辑的一部分会将宏移动到工作表的随机区域)。

此时我们建议做两件事:

  1. 找到起始单元格(宏代码的左上角单元格,很可能是 A1)。右键点击并选择“运行”。测试宏以确保其正常工作。
  2. 确认宏工作正常后,再次选中该左上角单元格。屏幕左侧应该有一个下拉菜单,显示当前单元格(很可能是“A1”)。点击下拉菜单,将文本值改为“Auto_open”。这将产生与 VBA 宏中相同的自动执行功能。

保存文件 (.xls) 并尝试打开。它应该会自动执行你的有效负载。

沙箱检测

这些检测基于实际威胁攻击者在其恶意软件中使用的技术。

  1. 鼠标是否活动?
  2. 屏幕尺寸是否大于 770 宽度和 381 高度?
  3. 主机能否播放声音?
  4. 这是否为 Windows 机器?

混淆

  1. 对于进程注入指令(VirtualAlloc、WriteProcessMemory、CreateThread)和沙箱检测,所有宏函数将变为如下结构:
root@kitploit:~
=FORMULA(D3&D23&D54&D23&D44,E45)

FORMULA 函数允许我们将一个公式放置到另一个单元格中,稍后可执行。因此,在这种情况下,我们将进程注入指令放入,然后使用 FORMULA 函数将实际函数放入另一个单元格执行。这避免了防御者在静态分析中看到诸如“VirtualAlloc”之类的内容。

  1. 整个宏会将某些值向右偏移,这样当你最初打开包含宏的工作表时,它显示为空白。

须知事项

  • 不太复杂的有效负载仅使用 =EXEC() 命令来执行命令。有些还使用 URLMON 下载文件。其他文件甚至包含单词“SHELL”。在我们看来,这似乎都不是好主意。该工具不包含这些内容。相反,它将你的 C# 源代码注入到 Excel 进程(32 位或 64 位)中,然后执行。之后,由你的有效负载决定接下来做什么。

技巧

  • 你的 C# 源代码可以执行任何你希望的操作。我们建议你的源代码打破 Excel 与你生成内容之间的父 > 子关系。
  • 有很多关于“非常隐藏”Excel 工作表的优秀博客文章。考虑使用该功能。
  • 不要忘记让你的 Excel 文件看起来真实。

故障排除

“类型或命名空间名称...不存在...”
root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    作者 @JoeLeonJr (@FortyNorthSec)                
[i] 正在生成 x86 .NET 程序集。
警告 CS8001: 无法解析 SDK 路径
test.cs(2,14): 错误 CS0234: 命名空间“System”中不存在类型或命名空间名称“Management”。是否缺少程序集引用?

此错误很可能意味着你在使用 mono 编译时缺少引用程序集。要修复,只需将提到的命名空间通过 -r 参数传入。在这个案例中,我们在命令行中添加 -r 'System.Management'。新命令为:

root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'

“找不到元数据文件...”
root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r System.Management
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    作者 @JoeLeonJr (@FortyNorthSec)                
[i] 正在生成 x86 .NET 程序集。
警告 CS8001: 无法解析 SDK 路径
错误 CS0006: 找不到元数据文件“System.Management”

[x] 使用 MCS 生成 x86 .NET 程序集时出错。请参阅上面的错误信息。

此错误应该不会出现,除非你未使用 install.sh bash 脚本运行 EXCELntDonut。在这种情况下,你需要手动安装 mono-complete。这将下载相关依赖项。你可以使用 apt 安装,如下所示:

root@kitploit:~
apt-get install mono-complete
“程序...不包含适合入口点的静态 'Main' 方法...”
root@kitploit:~
root@kali:~/Desktop# EXCELntDonut -f test.cs
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    作者 @JoeLeonJr (@FortyNorthSec)                
[i] 正在生成 x86 .NET 程序集。
错误 CS5001: 程序“_excelntdonut_GJAoNuVPMcX.exe”不包含适合入口点的静态“Main”方法

[x] 使用 MCS 生成 x86 .NET 程序集时出错。请参阅上面的错误信息。

目前,EXCELntDonut 只允许包含 Main 函数有效负载的 C# 文件。

一般故障排除建议
  1. 首先,在 Windows 上使用 csc 编译你的 C# 源代码并执行,以验证有效负载是否正常工作。建议编译为 x86 和 x64 两种有效负载进行测试,因为你可能不知道目标环境运行的是 32 位还是 64 位 Excel。
  2. 你应该能够在同一进程中多次运行有效负载,但如果遇到奇怪的错误,请退出 Excel,重新打开并重试。
  3. 如有疑问,关闭 Excel 并创建一个新文件进行测试。

检测

  • 以下是 @InQuest 提供的一些 Yara 规则:

    查找非常隐藏的工作表

    https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule

    查找 Auto_Open 字符串

    https://github.com/Neo23x0/signature-base/blob/master/yara/general_officemacros.yar

有很多关于使用 OLEDUMP.py 审查 XLM 文件的文章。考虑这篇:

https://clickallthethings.wordpress.com/2020/04/06/covid-19-excel-4-0-macros-and-sandbox-detection/

防御

  1. 启用 GPO 阻止从互联网下载的文件执行宏。参见 - https://www.microsoft.com/security/blog/2016/03/22/new-feature-in-office-2016-can-block-macros-and-help-prevent-infection/
  2. 不幸的是,AMSI 在这里没有帮助。
  3. ASR 规则...我们不确定。
  4. 现在大多数用户发送 .xlsx 文件。也许可以阻止 .xls 文件发送到员工的收件箱。要求某人重新发送保存为 .xlsx 的文件并不过分。
  5. 最新版本的 Defender ATP 在文件写入磁盘时捕获了未混淆版本的此文件。

致谢

如果没有 Outflank (@outflanknl) 团队出色的工作,我们甚至不会意识到这个领域。特别感谢 @StanHacked 在本项目中的见解。同样,本项目离不开 Donut(@TheWover 和 @odzhan)以及相关的 Python 库(@byt3bl33d3r)。此外,Accenture 团队创建了 CLRvoyance,解决了我们无法用 Donut + XLM 4.0 宏解决的某些 x64 问题。最后,感谢 Cybereason 的 Philip Tsukerman 在使 XLM 宏与 64 位版 Excel 兼容方面所做的出色研究。

免责声明

我们对本工具的滥用不承担任何责任。本工具是为教育和授权测试目的而生成的,用于演示如何使用 XLM (Excel 4.0) 宏将 C# 源代码注入内存。本项目的最终目标是 (1) 为红队提供另一种钓鱼有效负载选项,以模拟实际对手当前使用的技术,以及 (2) 为防御者提供构建分析方法和缓解措施的参考框架。如果我们不能快速生成这类有效负载的工具,我们认为防御者将无法充分应对实际威胁。请负责任地使用。

许可证

请参阅此文件夹中的许可证文件。请注意,本工具整合了另外两个开源工具:Donut 和 CLRvoyance。

下载工具