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

Содержание статьи

  • Разведка
  • Сканирование портов
  • Сканирование веб-контента
  • Точка входа
  • Strapi CMS
  • Точка опоры
  • Локальное повышение привилегий
  • Local Port Forwarding
  • Laravel

Се­год­ня мы с тобой прой­дем лег­кую машину Horizontall с пло­щад­ки Hack The Box. Для победы нам понадо­бит­ся про­экс­плу­ати­ровать ряд уяз­вимос­тей в Strapi, а затем повысить при­виле­гии через уяз­вимость в Laravel 8. Пог­нали!

warning

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

 

Разведка

 

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

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

10.10.11.105 horizontall.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).

Ре­зуль­тат работы скрип­та

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

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

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

 

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

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

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

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

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

  • -w — сло­варь (я исполь­зую сло­вари из набора SecLists);
  • -t — количес­тво потоков;
  • -u — URL;
  • -fc — исклю­чить из резуль­тата отве­ты с кодом 403.

На­бира­ем:

ffuf -u http://horizontall.htb/FUZZ -fc 403 -t 300 -w directory_2.3_medium.txt

Ре­зуль­тат ска­ниро­вания катало­гов с помощью ffuf

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

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

ffuf -u http://horizontall.htb/ -H 'Host: FUZZ.horizontall.htb' -t 300 -w subdomains-top1million-110000.txt

Ре­зуль­тат ска­ниро­вания под­доменов с помощью ffuf

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

ffuf -u http://horizontall.htb/ -H 'Host: FUZZ.horizontall.htb' -fc 301 -t 300 -w subdomains-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 -u http://api-prod.horizontall.htb/FUZZ -fc 403 -t 300 -w directory_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 — зап­росы на сброс пароля обра­баты­вают­ся неп­равиль­но, что поз­воля­ет без авто­риза­ции изме­нить пароль поль­зовате­ля. В коде экс­пло­ита находим зап­рос про­вер­ки вер­сии.

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

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *