HTB Scrambled. Применяем ASREPRoast и Kerberoasting для атаки на SMB и MS SQL

HTB Scrambled. Применяем ASREPRoast и Kerberoasting для атаки на SMB и MS SQL

the Matrix

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

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

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

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

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

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

Он дей­ству­ет в два эта­па. На пер­вом про­изво­дит­ся обыч­ное быс­трое ска­ниро­вание, на вто­ром — более тща­тель­ное ска­ниро­вание, с исполь­зовани­ем име­ющих­ся скрип­тов (опция -A).

Наш­лось мно­го откры­тых пор­тов, что типич­но для Windows:

Все перечис­ленные служ­бы Microsoft пока что ничего нам дать не могут, поэто­му пер­вым делом смот­рим сайт.

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

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

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

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

Мы можем отпра­вить зап­рос ASREP, сущес­тву­ет ли тот или иной акка­унт. Есть воз­можность зап­росить ключ (AS key) Kerberos это­го поль­зовате­ля, ключ будет зашиф­рован с помощью его пароля. Но дело в том, что сер­вер раз­лича­ет отве­ты «дан­ный флаг не уста­нов­лен» и «учет­ная запись не сущес­тву­ет». А зна­чит, если прой­дем­ся по име­нам поль­зовате­лей и для какого‑то нам отве­тят, что флаг не уста­нов­лен, мы узна­ем, что эта учет­ка сущес­тву­ет. Сде­лать такой перебор мож­но с помощью инс­тру­мен­та GetNPUsers из пакета impacket. Имя поль­зовате­ля у нас уже есть.

Нам отве­тили, что флаг не уста­нов­лен, а зна­чит, учет­ная запись сущес­тву­ет. Теперь с помощью kerbrute про­верим пароль поль­зовате­ля.

Учет­ные дан­ные ока­зались вер­ны, поэто­му мы можем зап­росить тикет поль­зовате­ля и при­менить его как аутен­тифика­тор, вмес­то пароля. В этом нам поможет скрипт getTGT из того же impacket.

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

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

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

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

Раз мы име­ем дело с MS SQL, зна­чит, можем выпол­нить ата­ку Kerberoasting. Ее цель — соб­рать билеты TGS для служб, которые запус­кают­ся от име­ни поль­зовате­лей, а не от сис­темных уче­ток. Тикеты TGS зашиф­рованы клю­чами, получен­ными из паролей поль­зовате­лей, а зна­чит, их дан­ные мож­но взло­мать прос­тым перебо­ром. Уяз­вимые учет­ные записи опре­делим по полю SPN, которое не будет пус­тым. Выпол­ним зап­рос TGS с помощью скрип­та GetUserSPNs из все того же impacket.

Те­перь сох­раним тикет в файл и отда­дим JTR для перебо­ра. Пароль учет­ной записи получим очень быс­тро.

Мы получи­ли пароль служ­бы, и, что­бы с ней работать, сле­дующим шагом дол­жно быть получе­ние «сереб­ряного билета». Silver ticket — это реаль­ный билет TGS для опре­делен­ной служ­бы, в котором исполь­зует­ся NTLM поль­зовате­ля. Он даст нам дос­туп к этой служ­бе. Что­бы сге­нери­ровать такой билет, нам нуж­но знать NTLM-хеш пароля и SID домена. SID домена получим из отла­доч­ной информа­ции при выпол­нении impacket-secretsdump.

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

А теперь генери­руем билет.

Эк­спор­тиру­ем соз­данный билет в рабочее окру­жение и под­клю­чаем­ся к служ­бе MS SQL, исполь­зуя аутен­тифика­цию Kerberos.

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

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

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

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

Сра­зу про­кинем реверс‑шелл, который сге­нери­руем с помощью очень удоб­ного Online Reverse Shell Generator. Для него нуж­но ука­зать парамет­ры, такие как локаль­ные хост и порт, а так­же язык и целевую сис­тему. Допол­нитель­но зада­ем кодиров­ку Base64. Лис­тенер запус­каем коман­дой rlwrap -cAr nc -lvnp 4321.

По­луча­ем бэк­коннект и прод­вига­емся даль­ше.

У нас уже есть учет­ные дан­ные поль­зовате­ля MiscSvc, поэто­му поп­робу­ем получить новую сес­сию PowerShell:

Так как коман­да была выпол­нена в дру­гом кон­тек­сте, проб­росим наш реверс‑шелл и про­дол­жим работу от име­ни MiscSvc:

Зап­росив под­робную информа­цию о поль­зовате­ле, замеча­ем, что он сос­тоит в груп­пах ITShare и ITUsers.

Пе­рей­дем к общим ресур­сам и най­дем там каталог IT. Если зай­ти еще даль­ше, то нат­кнем­ся на исполня­емый файл ScrambleClient.exe.

С помощью netcat забира­ем фай­лы с хос­та.

И так как это при­ложе­ние .NET, мы можем его лег­ко деком­пилиро­вать с помощью dnSpy. По клас­су LoginWindow понима­ем, что это то самое при­ложе­ние, которое работа­ет на пор­те 4411.

Ес­ли мы выпол­ним коман­ду LIST_ORDERS, нам вер­нут ответ SUCCESS и сери­али­зован­ный объ­ект. Инте­рес­но.

В исходном коде находим фун­кцию заг­рузки.

Так мож­но сери­али­зовать объ­ект и отпра­вить его через коман­ду UPLOAD_ORDER. Тог­да при десери­али­зации он дол­жен будет выпол­нить­ся. Для сери­али­зации будем исполь­зовать ysoserial для .NET. Сна­чала ска­чаем со сво­его хос­та netcat, для чего коман­дой python3 -m http.server -p 8080 под­нима­ем веб‑сер­вер.

Ког­да файл будет заг­ружен, пов­торим наш трюк. Но на этот раз реверс‑шелл соз­дадим с помощью ска­чан­ного netcat. В соз­данный лис­тенер дол­жен при­лететь бэк­конект в кон­тек­сте SYSTEM.

За­бира­ем флаг рута, и машина зах­вачена!


Источник

Наши проекты:

- Кибер новости: the Matrix
- Хакинг: /me Hacker
- Кодинг: Minor Code
👁 Пробить человека? Легко через нашего бота: Мистер Пробиватор

Report Page