Категория > Новости > HTB Static. Захватываем сервер через VPN и дыру в Xdebug - «Новости»

HTB Static. Захватываем сервер через VPN и дыру в Xdebug - «Новости»


21-12-2021, 00:00. Автор: Иосиф
Hack The Box.

warning


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



 

Разведка. Сканирование портов


До­бав­ляем IP-адрес машины в /etc/hosts:


10.10.10.246 static.htb

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



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


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


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


ports=$(nmap -p- --min-rate=500 $1 | grep^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1

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



HTB Static. Захватываем сервер через VPN и дыру в Xdebug - «Новости»
Ре­зуль­тат работы скрип­та

Мы наш­ли три откры­тых пор­та: 22 (служ­ба OpenSSH 7.9p1), 2222 (служ­ба OpenSSH 7.6p1) и 8080 (веб‑сер­вер Apache 2.4.38). Нач­нем с веба.



Справка: брутфорс учеток


Пос­коль­ку вна­чале у нас нет учет­ных дан­ных, нет и смыс­ла изу­чать служ­бы, которые всег­да тре­буют авто­риза­ции (нап­ример, SSH). Единс­твен­ное, что мы можем делать здесь, — это переби­рать пароли брут­форсом, но машины с HTB поч­ти всег­да мож­но прой­ти по‑дру­гому. В жиз­ни таких вари­антов может не быть, к тому же есть шан­сы подоб­рать пароль или получить его при помощи соци­аль­ной инже­нерии.



В резуль­татах ска­на отме­чено, что в кор­невом катало­ге сер­вера есть файл robots.txt. Этот файл исполь­зует­ся для того, что­бы поп­росить кра­уле­ры (нап­ример, Google, Яндекс и про­чие) не тро­гать какие‑то опре­делен­ные катало­ги.


К при­меру, ник­то не хочет, что­бы в поис­ковой выдаче появ­лялись стра­ницы авто­риза­ции адми­нис­тра­торов сай­та, фай­лы или пер­сональ­ная информа­ция со стра­ниц поль­зовате­лей и про­чие вещи в таком духе. Но у любой медали две сто­роны: зло­умыш­ленни­ки пер­вым делом прос­матри­вают этот файл, что­бы узнать о фай­лах и катало­гах, которые хочет спря­тать адми­нис­тра­тор сай­та. В нашем слу­чае есть два катало­га: vpn и .ftp_uploads.


На пер­вой стра­нице нас встре­чает самопис­ный сайт, а точ­нее, фор­ма авто­риза­ции. Во вто­ром катало­ге нет фай­ла index.html и зап­рет на прос­мотр на веб‑сер­вере тоже не задан, поэто­му мы можем видеть все его содер­жимое.


Фор­ма авто­риза­ции
Со­дер­жимое катало­га .ftp_uploads

Ска­чива­ем дамп базы дан­ных и прос­матри­ваем сооб­щение.


Binary files are being corrupted during transfer!!! Check if are recoverable.


В сооб­щении ска­зано, что файл был пов­режден и его тре­бует­ся вос­ста­новить. Разар­хивиро­вать GZIP у меня тоже не выш­ло, поэто­му я отпра­вил­ся в Google за поис­ком ути­литы, спо­соб­ной решить эту проб­лему.


 

Точка входа


 

GZIP fix


По­искав на прос­торах GitHub, я нашел прог­рам­мку fixgz. Но перед исполь­зовани­ем ее нуж­но соб­рать из исходни­ков.


git clone https://github.com/yonjar/fixgz
cd fixgz
g++ fixgz.cpp
./a.out ../db.sql.gz fixed_db.sql.gz
gunzip fixed_db.sql.gz
Ис­прав­ление архи­ва GZIP

Пос­ле исправ­ления архи­ва мы его рас­паковы­ваем и чита­ем дамп базы дан­ных. В дам­пе мы най­дем учет­ные дан­ные для авто­риза­ции: логин, хеш пароля и зачем‑то TOTP — одно­разо­вый пароль на осно­ве вре­мени.


Со­дер­жимое дам­па базы дан­ных

У нас есть хеш, зна­чит, нуж­но попытать­ся его переб­рать. Но перед этим необ­ходимо узнать алго­ритм. Все воз­можные алго­рит­мы хеширо­вания для задан­ной пос­ледова­тель­нос­ти может подыс­кать ути­лита HashId.


Оп­ределе­ние типа хеша

Из всех пред­став­ленных алго­рит­мов наибо­лее популяр­ный, а зна­чит, и наибо­лее веро­ятный — SHA-1. Для него есть мно­го онлай­новых дек­рипто­ров с огромны­ми базами. Вос­поль­зуем­ся одним из них и получим очень прос­той пароль.


На­ходим пароль по хешу

С учет­ными дан­ными admin:admin авто­ризу­емся на сай­те, который мы встре­тили пер­вым, и получим фор­му вво­да одно­разо­вого пароля. Таким обра­зом, на сай­те исполь­зует­ся двух­фактор­ная аутен­тифика­ция.


Фор­ма вво­да OTP 

TOTP


TOTP (Time-based One-Time Password Algorithm) — алго­ритм соз­дания одно­разо­вых паролей для защищен­ной аутен­тифика­ции. Это алго­ритм односто­рон­ней аутен­тифика­ции, то есть сер­вер удос­товеря­ется в под­линнос­ти кли­ента. Глав­ное отли­чие TOTP от дру­гих подоб­ных алго­рит­мов — генера­ция пароля на осно­ве вре­мени. Обыч­но это не точ­ное вре­мя, а какой‑то его интервал (по умол­чанию 30 секунд).


Мож­но най­ти мно­го генера­торов ТОТP, как онлай­новых, так и реали­зован­ных в виде биб­лиотек для раз­ных язы­ков прог­рамми­рова­ния. Что дела­ет ТОТP безопас­ным — это TOTP-сек­рет, который мы, ско­рее все­го, и наш­ли в базе.


Ос­талось нас­тро­ить вре­мя, как на уда­лен­ном сер­вере. Узнать его мы можем из отве­та HTTP в заголов­ке Date. Пос­ле это­го выс­тавля­ем его у себя коман­дой sudo date -s "[содержимое заголовка Date]".


HTTP-ответ

За­тем я исполь­зовал рас­ширение auth-helper для Firefox. Получен­ный OTP быс­тро встав­ляем в фор­му, и нам откры­вают­ся допол­нитель­ные воз­можнос­ти на сай­те.


Глав­ная стра­ница сай­та

Ви­дим спи­сок сер­веров и соот­ветс­тву­ющие IP-адре­са. Вот толь­ко сети эти нам недос­тупны. Так­же име­ется фор­ма вво­да для какого‑то генера­тора. Я ввел прос­тое сло­во и получил кон­фиг VPN.


Пред­ложение о заг­рузке кон­фига VPN

От­кро­ем файл и пос­мотрим парамет­ры под­клю­чения. Так, в парамет­ре remote ука­зан сер­вер vpn.static.htb.


Со­дер­жимое фай­ла кон­фигура­ций

Пер­вым делом нуж­но добавить соот­ветс­тву­ющую запись в /etc/hosts:


10.10.10.246 static.htb vpn.static.htb

Те­перь поп­робу­ем под­клю­чить­ся по VPN.


Ло­ги под­клю­чения VPN

Из логов мы видим, что авто­мати­чес­ки добавил­ся мар­шрут в сети 172.17.0.0/24 и 172.30.0.0/16. При этом дру­гие хос­ты рас­положе­ны в сети 172.20.0.0/16, поэто­му мы не смо­жем к ним обра­тить­ся. Тог­да я решил добавить мар­шрут в эту сеть самос­тоятель­но.


sudo ip route add 172.20.0.0/24 dev tun9

А затем обра­тим­ся к хос­ту WEB (172.20.0.10) через бра­узер. Вуаля! Вновь каталог с дос­тупным содер­жимым.


Кор­невой каталог сай­та 

Точка опоры


Стра­ница info.php на самом деле выпол­няет PHPINFO.


Стра­ница info.php

Здесь очень мно­го информа­ции, которую нуж­но тща­тель­но про­ана­лизи­ровать. Отсю­да мож­но узнать вер­сии всех зат­ронутых прог­рам­мных про­дук­тов, таких как OpenSSL, PDO_MYSQL, Phar. Высока веро­ятность, что один из них будет не обновлен и поэто­му уяз­вим. Так натыка­емся на Xdebug — средс­тво про­фили­рова­ния и отладки скрип­тов на PHP. Xdebug пос­тавля­ется как рас­ширение для PHP, поэто­му может дать нам выпол­нение про­изволь­ного кода. В базе Metasploit есть такой экс­пло­ит.


По­иск экс­пло­итов в базе Metasploit
Па­рамет­ры экс­пло­ита

По умол­чанию Xdebug будет прос­лушивать порт 9000 на машине раз­работ­чика. Что­бы акти­виро­вать Xdebug, в GET- или POST-парамет­ре или в cookie дол­жен при­сутс­тво­вать параметр XDEBUG_SESSION=name.


Обыч­ная кон­фигура­ция Xdebug может выг­лядеть так: ini xdebug.remote_enable= true xdebug.remote_host= [IP]. В этом слу­чае IP-адрес раз­работ­чика зада­ется в кон­фигура­ции и поз­воля­ет толь­ко ука­зан­ному IP-адре­су исполь­зовать Xdebug. Одна­ко сущес­тву­ет опция кон­фигура­ции xdebug.remote_connect_back, и уста­нов­ка для нее зна­чения true отклю­чает нас­тро­енный IP-адрес xdebug.remote_host и поз­воля­ет под­клю­чить­ся обратно к любому хос­ту, который акти­виру­ет Xdebug. Таким обра­зом, любой под­клю­чив­ший­ся может выпол­нить про­изволь­ный код.



Перейти обратно к новости