Категория > Новости > HTB Horizontall. Захватываем веб-сервер через уязвимости в Strapi и Laravel - «Новости»

HTB Horizontall. Захватываем веб-сервер через уязвимости в Strapi и Laravel - «Новости»


9-02-2022, 00:00. Автор: Потап
Hack The Box. Для победы нам понадо­бит­ся про­экс­плу­ати­ровать ряд уяз­вимос­тей в Strapi, а затем повысить при­виле­гии через уяз­вимость в Laravel 8. Пог­нали!

warning


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



 

Разведка


 

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


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


10.10.11.105 horizontall.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 Horizontall. Захватываем веб-сервер через уязвимости в Strapi и Laravel - «Новости»
Ре­зуль­тат работы скрип­та

На хос­те откры­ты два стан­дар­тных пор­та: 22 (служ­ба SSH) и 80 (веб‑сер­вер Nginx 1.14.0). SSH пока что про­пус­тим и нап­равим­ся смот­реть, что есть на веб‑сер­вере.


Стар­товая стра­ница сай­та horizontall.htb

Там находим однос­тра­нич­ный сайт, который, на пер­вый взгляд, исполь­зует какую‑то готовую тех­нологию (то есть сайт не самопис­ный).


 

Сканирование веб-контента


По­ка что работать не с чем — нуж­но даль­ше искать точ­ки вхо­да. А ищут их в таких слу­чаях при помощи перебо­ра катало­гов по сло­варю.



Справка: сканирование веба c ffuf


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


Я пред­почитаю лег­кий и очень быс­трый ffuf. При запус­ке ука­зыва­ем сле­дующие парамет­ры:




  • -w — сло­варь (я исполь­зую сло­вари из набора SecLists);


  • -t — количес­тво потоков;


  • -u — URL;


  • -fc — исклю­чить из резуль­тата отве­ты с кодом 403.


На­бира­ем:


ffuf -uhttp://horizontall.htb/FUZZ -fc 403 -t 300 -wdirectory_2.3_medium.txt
Ре­зуль­тат ска­ниро­вания катало­гов с помощью ffuf

Но ничего инте­рес­ного не находим.


Ес­ли не наш­ли катало­ги и стра­ницы, то сто­ит еще поис­кать под­домены. Что­бы обра­тить­ся к вир­туаль­ному хос­ту, нуж­но ука­зать этот вир­туаль­ный хост в заголов­ке Host про­токо­ла HTTP. Имен­но это мес­то мы и пометим для перебо­ра с помощью того же ffuf. Сло­варь subdomains-top1million-110000.txt так­же берем из набора SecLists.


ffuf -uhttp://horizontall.htb/-H 'Host: FUZZ.horizontall.htb' -t 300 -wsubdomains-top1million-110000.txt
Ре­зуль­тат ска­ниро­вания под­доменов с помощью ffuf

В выводе отра­жают­ся вооб­ще все вари­анты. Обра­тим вни­мание на код отве­та 301 — перенап­равле­ние на дру­гую стра­ницу. Исклю­чим его из вывода (опция -fc 301).


ffuf -uhttp://horizontall.htb/-H 'Host: FUZZ.horizontall.htb' -fc 301 -t 300 -wsubdomains-top1million-110000.txt
Ре­зуль­тат ска­ниро­вания под­доменов с помощью ffuf

Те­перь в отве­те находим все­го два вари­анта: www и api-prod. Добав­ляем их в файл /etc/hosts.


10.10.11.105 www.horizontall.htb api-prod.horizontall.htb

Пер­вый ведет на преж­ний сайт, а вот при обра­щении к api-prod.horizontall.htb получа­ем пус­тую стра­ницу с над­писью Welcome. На сай­те есть файл robots.txt, но он тоже не рас­кры­вает никакой информа­ции.


Со­дер­жимое фай­ла robots.txt

Сно­ва прос­каниру­ем дирек­тории с ffuf, и на этот раз мы наконец находим допол­нитель­ный кон­тент.


ffuf -uhttp://api-prod.horizontall.htb/FUZZ -fc 403 -t 300 -wdirectory_2.3_medium.txt
Ре­зуль­тат ска­ниро­вания катало­гов с помощью ffuf 

Точка входа


От­метим, что мы заод­но наш­ли име­на поль­зовате­лей. Ска­ниро­вание дирек­торий на новом сай­те дало две стра­ницы. При обра­щении к reviews получим какой‑то спи­сок ком­мента­риев в фор­мате JSON.


Со­дер­жимое стра­ницы reviews

При обра­щении к стра­нице admin никаких полез­ных дан­ных мы не получим. Но в исходном коде упо­мина­ется strapi.


Ис­ходный код стра­ницы admin 

Strapi CMS


Strapi — это фрей­мворк для управле­ния кон­тентом, работа­ющий на Node.js. Это так называ­емая headless CMS, она отве­чает толь­ко за бэкенд (дан­ные) и может вза­имо­дей­ство­вать с любыми плат­форма­ми пред­став­ления, будь то сай­ты или при­ложе­ния. Эта тех­нология широко при­меня­ется, а зна­чит, для нее будет нес­ложно най­ти хорошо задоку­мен­тирован­ные экс­пло­иты, при­чем не в одном вари­анте. Искать мож­но при помощи Google, написав, к при­меру, strapi exploit.


По­иск экс­пло­итов

Пер­вые же ссыл­ки дают нам экс­пло­иты для уда­лен­ного выпол­нения кода (RCE) и уста­нов­ки про­изволь­ного пароля. Помет­ка Unauthenticated сооб­щает о том, что баг сра­бота­ет даже без авто­риза­ции.


Экс­пло­ит для уста­нов­ки пароля исполь­зует уяз­вимость CVE-2019-18818 — зап­росы на сброс пароля обра­баты­вают­ся неп­равиль­но, что поз­воля­ет без авто­риза­ции изме­нить пароль поль­зовате­ля. В коде экс­пло­ита находим зап­рос про­вер­ки вер­сии.


Код экс­пло­ита

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