Прохождение Hack The Box Monitors

Hack The Box

В сегодняшней статье я покажу про­хож­дение Hack The Box Monitors. Уровень сложности HTB Monitors — Hard (тяжелый). Мы будем сканировать сайт на движке WordPress, получать RCE в CMS Cacti, эксплатировать уязвимость в Apache OFBiz и сбегать из Docker с при­виле­гиями.

Еще по теме: Прохождение Hack The Box Laboratory

Сканируем порты

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

И запус­каем ска­ниро­вание пор­тов. Для ска­ниро­вания пор­тов лучше всего подходит Nmap. Можно улуч­шить резуль­таты сканирования с помощью этого скрип­та:

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

Находим два откры­тых пор­та: 22 (служ­ба SSH) и 80 (веб‑сер­вер Apache 2.4.29). На сер­вере находим сайт WordPress 5.5.1, с его анализа мы и нач­нем.

Точка входа

Сканируем WordPress

Тес­тировать сай­ты на движке WordPress лучше все­го инструментом WPScan. Перед ска­ниро­ванием лучше зарегис­три­ровать­ся на офи­циаль­ном сай­те WPScan для получения токена API. Тог­да WPScan будет автоматом сканировать стра­ницы на уяз­вимос­ти. А в конце предоставит отчет или готовый экс­пло­ит!

Как правило уяз­вимы пла­гины, поэто­му я запустил их перебор (директива -e ap) в агрессив­ном режиме (директива --plugins-detection aggressive), исполь­зуя 128 потоков (директива -t):

Об­наружен­ные пла­гины
Об­наружен­ные пла­гины

Через нес­коль­ко минут, мы видим отчет, в котором нап­ротив най­ден­ного в агрессив­ном режиме пла­гина сто­ит помет­ка « 1 vulnerability identified». Это говорит о том, что на сай­те уста­нов­лен уяз­вимый пла­гин Spritz 1.0. Заод­но нам дали ссыл­ку на базу уязвимостей Exploit-DB, где есть полное опи­сание уяз­вимос­ти.

Но если у вас спе­циали­зиро­ван­ный  секюрити дистрибутив типа Kali Linux, то база ExploitDB там уже имеется. Исполь­зовать ее можно инструментом searchsploit.

Экс­пло­ит в локаль­ной базе searchsploit
Экс­пло­ит в локаль­ной базе searchsploit
Опи­сание экс­пло­ита 44544 для пла­гина Spritz 1.0
Опи­сание экс­пло­ита 44544 для пла­гина Spritz 1.0

Из опи­сания экс­пло­ита мы видим, что пла­гин уяз­вим к LFI — локаль­ному вклю­чению фай­лов.

Уязвимость LFI

В опи­сании уяз­вимос­ти находим и инс­трук­цию по экс­плу­ата­ции. Давайте про­верим уяз­вимость, про­читав файл /etc/passwd.

Со­дер­жимое фай­ла /etc/passwd
Со­дер­жимое фай­ла /etc/passwd

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

В слу­чае с WordPress искать сле­дует в фай­ле с нас­трой­ками для под­клю­чения к базе дан­ных wp-config.php.

Учет­ные дан­ные для под­клю­чения к базе дан­ных
Учет­ные дан­ные для под­клю­чения к базе дан­ных

Я сра­зу поп­робовал этот пароль для авто­риза­ции в WordPress в качес­тве адми­на, но это не при­нес­ло никаких резуль­татов. Так как мы можем читать фай­лы с хос­та, поищем этим спо­собом дру­гую точ­ку вхо­да. У меня есть два спис­ка (для Windows и Linux) фай­лов, который сто­ит про­верять.

Фаз­зить будем с помощью Burp Intruder.

Вклад­ка Burp Intruder — Position
Вклад­ка Burp Intruder — Position
Ре­зуль­тат ата­ки
Ре­зуль­тат ата­ки

Мы натыка­емся на файл кон­фигура­ции Apache /etc/apache2/sites-enable/000-default.conf, где находим поль­зовате­ля admin@monitors.htb.

Вир­туаль­ный хост cacti-admin.monitors.htb сра­зу добав­ляем в /etc/hosts, а потом смот­рим. Нас встре­чает фор­ма авто­риза­ции.

Фор­ма авто­риза­ции
Фор­ма авто­риза­ции

Точка опоры

Ав­торизо­вать­ся получа­ется как поль­зователь admin с паролем BestAdministrator@2020!, который слу­жил для под­клю­чения к базе дан­ных.

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

Нас встре­чает сис­тема управле­ния кон­тентом под наз­вани­ем Cacti, при­чем мы сра­зу видим ее вер­сию — 1.2.12. А раз у нас сно­ва готовый про­дукт, мы опять поищем готовые экс­пло­иты при помощи searchsploit.

По­иск экс­пло­ита с помощью searchsploit
По­иск экс­пло­ита с помощью searchsploit

На­ходим экс­пло­ит имен­но для этой вер­сии Cacti. Он экс­плу­ати­рует SQL-инъ­екцию. Пос­ле пер­вого запус­ка узна­ем, что он дол­жен дать нам реверс‑шелл. Нуж­но ука­зать лишь адрес сво­его хос­та и порт для обратно­го под­клю­чения.

Справка: реверс-шелл

Об­ратный шелл — это под­клю­чение, которое акти­виру­ет ата­куемая машина, а мы при­нима­ем и таким обра­зом под­клю­чаем­ся к ней, что­бы выпол­нять коман­ды от лица поль­зовате­ля, который запус­тил шелл. Для при­ема соеди­нения необ­ходимо соз­дать на локаль­ной машине listener, то есть «слу­шатель».

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

В качес­тве самого лис­тенера при этом мож­но исполь­зовать широко извес­тный netcat.

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

За­пуск экс­пло­ита
За­пуск экс­пло­ита
Бэк­коннект в лис­тенере
Бэк­коннект в лис­тенере

Продвижение

Получение флага пользователя

Итак, мы получи­ли шелл. Най­ти нап­равле­ния для повыше­ния при­виле­гий нам в оче­ред­ной раз помогут скрип­ты PEASS.

Справка: скрипты PEASS

Что делать пос­ле того, как мы получи­ли дос­туп в сис­тему от име­ни поль­зовате­ля? Вари­антов даль­нейшей экс­плу­ата­ции и повыше­ния при­виле­гий может быть очень мно­го, как в Linux, так и в Windows. Что­бы соб­рать информа­цию и наметить цели, мож­но исполь­зовать Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скрип­тов, которые про­веря­ют сис­тему на авто­мате.

Что­бы вос­поль­зовать­ся скрип­том, его нуж­но сна­чала заг­рузить на локаль­ный хост.

Так как на сер­вере отсутс­тву­ют прог­раммы curl и wget, мы не можем заг­рузить файл с локаль­ного веб‑сер­вера. Тог­да будем исполь­зовать netcat. На сер­вере откро­ем лис­тенер и уста­новим лимит ожи­дания пять секунд, при этом весь вывод перенап­равим в файл.

На локаль­ном хос­те под­клю­чим­ся к лис­тенеру и запишем туда наш скрипт.

На выходе получа­ем огромное количес­тво информа­ции. Изу­чим ее и отме­тим важ­ные для нас вещи:

  • Нам дос­тупен runc.
  • Есть запущен­ный Docker.
  • Есть прос­лушива­емые толь­ко на локаль­ном хос­те пор­ты.
  • Нам дос­тупны фай­лы из домаш­ней дирек­тории поль­зовате­ля.
  • Есть инте­рес­ный файл cacti-backup.service.
Дос­тупные Docker и runc
Дос­тупные Docker и runc
Прос­лушиваФай­лы в домаш­ней дирек­тории поль­зовате­ля­емые пор­ты
Фай­лы в домаш­ней дирек­тории поль­зовате­ля
Прос­лушива­емые пор­ты
Прос­лушива­емые пор­ты
Фай­лы бэкапов
Фай­лы бэкапов

Нач­нем с пос­ледне­го пун­кта и гля­нем файл /lib/systemd/system/cacti-backup.service.

Со­дер­жимое фай­ла cacti-backup.service
Со­дер­жимое фай­ла cacti-backup.service

От­сюда мы узна­ем, что от име­ни поль­зовате­ля www-data запус­кает­ся скрипт /home/marcus/.backup/backup.sh.

Со­дер­жимое фай­ла backup.sh
Со­дер­жимое фай­ла backup.sh

В скрип­те находим учет­ные дан­ные. А най­дя новый пароль, сра­зу же про­веря­ем его вез­де. Так мы авто­ризу­емся по SSH от име­ни поль­зовате­ля marcus.

Флаг поль­зовате­ля
Флаг поль­зовате­ля

Погружение в Docker

Итак, мы выяс­нили, что на машине работа­ет Docker, а так­же есть прос­лушива­емые для localhost пор­ты. Для начала опре­делим, за что отве­чает порт 8443.

Выпол­ним под­клю­чение к пор­ту с помощью netcat. Ког­да нам не отве­тят, отпра­вим зап­рос GET HTTP. На этот раз ответ есть.

Под­клю­чение к пор­ту 8443
Под­клю­чение к пор­ту 8443

Кро­ме того, нам сооб­щают, что сер­вер работа­ет по про­токо­лу HTTPS. Давайте про­кинем порт с помощью SSH и будем тун­нелиро­вать тра­фик с локаль­ного пор­та 8443 на порт 8443 сер­вера (см. также «Способы туннелирования при пентесте»). Пос­ле чего обра­тим­ся к уда­лен­ному сер­вису по адре­су https://127.0.0.1:8443/ через бра­узер.

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

Нас встре­чает ошиб­ка 404, но нас это не оста­новит. Поп­робу­ем прос­каниро­вать фай­лы и дирек­тории. Возь­мем спи­сок common.txt из набора кру­тых спис­ков Seclists. А для перебо­ра я исполь­зую тот же Burp Intruder.

Ре­зуль­тат перебо­ра катало­гов
Ре­зуль­тат перебо­ра катало­гов

Наш­лось мно­го стра­ниц, которые отве­чают редирек­том. Перей­дем на одну из них и получим фор­му авто­риза­ции Apache OFBiz.

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

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

Так как мы наш­ли новую тех­нологию, мы прос­то обя­заны сра­зу же про­верить наличие готовых экс­пло­итов.

По­иск докумен­тирован­ных уяз­вимос­тей в Apache OFBiz
По­иск докумен­тирован­ных уяз­вимос­тей в Apache OFBiz

Так мы находим уяз­вимость, име­ющую иден­тифика­тор CVE-2020-9496. Идея в том, что поль­зователь, не про­шед­ший про­вер­ку под­линнос­ти, может вос­поль­зовать­ся этой уяз­вимостью, отпра­вив вре­донос­ный HTTP-зап­рос, содер­жащий соз­данную полез­ную наг­рузку XML в теле HTTP-зап­роса (OFBiz исполь­зует уяз­вимые вер­сии биб­лиотек Apache Commons BeanUtils и Apache ROME).

Экс­плу­ата­ция этой уяз­вимос­ти может при­вес­ти к уда­лен­ному выпол­нению кода (RCE) в кон­тек­сте поль­зовате­ля, запус­кающе­го при­ложе­ние. По иден­тифика­тору находим уже реали­зован­ный в Metasploit Framework экс­пло­ит.

По­луче­ние экс­пло­ита в Metasploit Framework
По­луче­ние экс­пло­ита в Metasploit Framework

Вы­бира­ем дан­ный модуль в Metasploit Framework, затем запол­няем зна­чение парамет­ров: адрес хос­та и порт, а так­же тип наг­рузки. В качес­тве наг­рузки я выб­рал ста­биль­ный Meterpreter для Linux x64.

По­луче­ние шел­ла Meterpreter
По­луче­ние шел­ла Meterpreter

Та­ким обра­зом мы про­ника­ем в Docker и работа­ем в кон­тек­сте поль­зовате­ля root.

Локальное повышение привилегий

Итак, мы — рут, но в «Докере». Мож­но сно­ва запус­кать скрипт типа LinPEAS, но в слу­чае с докер‑кон­тей­нером советую исполь­зовать дру­гой скрипт для раз­ведки — Deepce. Он ищет пути повысить при­виле­гии или сбе­жать из Docker и даже про­веря­ет некото­рые экс­пло­иты.

Заг­рузим его средс­тва­ми Metasploit, получим шелл, дадим пра­ва на выпол­нение и запус­тим.

Ре­зуль­тат работы Deepce
Ре­зуль­тат работы Deepce

Ви­дим под­све­чен­ную при­виле­гию SYS_MODULE. Иног­да при­ложе­нию в «Докере» может пот­ребовать­ся выпол­нить при­виле­гиро­ван­ную опе­рацию для работы. Тог­да Docker поз­воля­ет поль­зовате­лю добавить в кон­тей­нер допол­нитель­ные при­виле­гии (нап­ример, SYS_MODULE). В этом слу­чае при­ложе­ния, выпол­няемые обыч­ным поль­зовате­лем, смо­гут совер­шать при­виле­гиро­ван­ные опе­рации без пре­дос­тавле­ния им всех прав рута.

В дан­ном слу­чае при­виле­гия SYS_MODULE поз­воля­ет кон­тей­неру добав­лять или уда­лять модули ядра хос­товой сис­темы. Это поз­воля­ет нам исполь­зовать сле­дующий экс­пло­ит (в реверс‑шелл встав­ляем адрес хос­товой сис­темы):

Фун­кция call_usermodehelper исполь­зует­ся для соз­дания про­цес­сов поль­зователь­ско­го режима из прос­транс­тва ядра и при­нима­ет три аргу­мен­та: argv, envp и UMH_WAIT_EXEC. UMH_WAIT_EXEC зас­тавля­ет модуль ядра ждать, пока заг­рузчик выпол­нит прог­рамму. Ниже при­вожу Makefile.

За­киды­ваем и exploit.c, и Makefile в Docker, а затем собира­ем коман­дой make.

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

Те­перь в сес­сии SSH от име­ни поль­зовате­ля markus запус­каем лис­тенер:

Те­перь заг­ружа­ем модуль ядра в докере и ловим бэк­коннект.

Прохождение Hack The Box Monitors
Прохождение Hack The Box Monitors

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

Еще по теме: Прохождение HackTheBox Active

ВКонтакте
OK
Telegram
WhatsApp
Viber

Добавить комментарий

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