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

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

Продолжим тему прохождение Hack The Box. В этот раз мы с вами прой­дем сред­нее по слож­ности задание с пло­щад­ки Hack The Box. Я покажу, как взломать Apache Tomcat и эксплуатировать Ansible Playbook.

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

Разведка

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

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

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

Работа скрип­та Namp
Работа скрип­та Namp

Ви­дим 3 откры­тых пор­та: 443 (веб‑сер­вер nginx 1.18.0), 443 (веб‑сер­вер nginx 1.18.0), 22 (служ­ба SSH)  и 8080 (отме­чен как HTTP-прок­си).

В нашем распоряжении нет учетных данных, соответственно нет смысла анализировать службы (такие как SSH), которые требуют авторизацию. Вместо этого, можно перебрать пароли брутом, но в прохождении HTB всегда есть другие сценарии.

Порт 443 работа­ет на HTTPS и содер­жит сер­тификат, которой поможет нам узнать для какого адре­са он дей­стви­телен. Ранее мы уже добави­ли его в файл /etc/hosts.

Взглянем на сам сай­ты. Пер­вый — какой‑то однос­тра­нич­ный Seal Market с полями для вво­да. Вто­рой — GitBucket. Не нужно быть профи, чтоб понять, с каким из них лучше начинать.

https://seal.htb
https://seal.htb

Авторизация на http://seal.htb:8080

Git

GitBucket — это легко устанавливаемый клон GitHub с открытым исходным кодом, написанный на Scala. Позволяет организовать совместную работу работу с Git-репози­тори­ями. Попробуем зарегистрироваться.

Прохождение HTB Seal. GitBucket
Страница GitBucket после входа

Пос­ле регистрации нам ста­новит­ся дос­тупно какое-то количес­тво про­ектов. Можно поис­кать в исходниках кри­тичес­кие дан­ные типа сек­ретов, паролей и других инте­рес­ностей. Так­же можно получить име­на поль­зовате­лей Git.

Поль­зовате­ли сис­темы GitBucket
Поль­зовате­ли GitBucket

За­пом­инаем имена поль­зовате­лей и начнем по поряд­ку исследовать репози­тории. В репози­тории Seal Market нашелся спи­сок дел, где сре­ди всего непримечательного зап­ланиро­вана сме­на кон­фигура­ции Apache Tomcat.

Опи­сание репози­тория
Опи­сание репози­тория

Это важ­ная деталь, которая говорит о том, что на сайте используется еще одна тех­нология. Давайте глянем на исто­рию ком­митов. Просматривая сни­зу вверх, оста­новим­ся на этом ком­мите:

В нем мы нашелся файл кон­фигура­ции Tomcat и пароль авто­риза­ции.

Па­роль в фай­ле настройки Tomcat
Па­роль в фай­ле настройки Tomcat

Попро­буем залогиниться с найденным паролем в сис­теме GitBucket. Выясняется, что мы можем зайти в систему как luis. Увы, это нам никак не помогает, а к SSH пароль Льюиса не подошел. Поэто­му переходим к анализу сай­та Seal Market.

Точка входа

Перебором пробуем найти скры­тые стра­ницы. Предпочитаю для этого исполь­зовать ути­литу fuff и сло­варик из набора Seclists.

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

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

Мне нравится шустрый ffuf. При запус­ке можно использовать эти парамет­ры:

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

На выходе получается сле­дующая команда:

Результат ска­ниро­вание ffuf
Результат ска­ниро­вания ffuf

Все най­ден­ные стра­ницы делают редирект в соот­ветс­тву­ющий каталог. Но нас интересуют толь­ко две: admin и manager.

Дос­туп к катало­гу /admin/
Дос­туп к катало­гу /admin/

При обра­щении к катало­гу /admin/ возвращается ошиб­ка 404, т.е. на сер­вере работа­ет Apache Tomcat 9.0.31. При этом стра­ница /manager сделает редирект в каталог /manager/, отку­да нас опять перенап­равля­ет на /manager/html. Пос­ледняя же вер­нет код 403 — это говорит о том, что у нас нет прав для дос­тупа к стра­нице. Что­бы получить больше информации о сайте, еще раз ска­нируем дирек­тории, но в этот раз в катало­ге /manager/.

Результат ска­ниро­вание ffuf
Результат ска­ниро­вание ffuf

Находим новые стра­ницы: text и status. Ответ 401 говорит о том, что тре­бует­ся HTTP-авто­риза­ция. Мы уже знаем имя поль­зовате­ля и пароль из кон­фига Apache Tomcat и просто логинимся. Нас встре­чает панель Server Status Apache Tomcat.

Apache Tomcat статус сервера
Apache Tomcat статус сервера

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

Точка опоры

Обход 403 Forbidden

Есть мно­го рекомен­даций, как обой­ти ответ 403 (дос­туп зап­рещен), сре­ди которых исполь­зование ред­ких методов зап­роса (вмес­то обыч­ных GET и POST), раз­ных заголов­ков HTTP и спе­циаль­ных путей к целевой стра­нице. На все эти слу­чаи у меня есть свои сло­вари, соб­ранные из интерне­та и объ­еди­нен­ные в один. Поэто­му я буду исполь­зовать Burp Intruder для перебо­ра раз­ных вари­антов.

В резуль­тате я получил отве­ты, дли­на которых зна­читель­но боль­ше осталь­ных. На вклад­ке Response в Burp вклю­чаем опцию Render, что­бы смот­реть стра­ницы, как в бра­узе­ре.

Так мы получа­ем дос­туп к фун­кции /manager/html при обра­щении к /manager/;%2f../;//html.

Обход 403 Forbidden

Tomcat Admin to RCE

Имея адми­нис­тра­тив­ный дос­туп к Tomcat, мы можем заг­рузить на сер­вер и затем выпол­нить файл WAR (набор ресур­сов и исполня­емых фай­лов Java). Конеч­но же, в нашем слу­чае это будет обратный шелл. Его мы можем соб­рать с помощью Msfvenom.

Соз­дание реверс‑шел­ла на JSP
Соз­дание реверс‑шел­ла на JSP

Этот код дол­жен выз­вать кон­нект на ука­зан­ный адрес (то есть наш локаль­ный IP). Пишем: rlwrap nc -lvp 443.

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

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

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

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

rlwrap nc -lvp [port]

Но файл прос­то так не заг­рузить, так как мы получа­ем дос­туп к стра­нице толь­ко через спе­циаль­ный путь. Поэто­му ука­зыва­ем файл для заг­рузки и акти­виру­ем Burp Proxy для отло­ва зап­роса.

Фор­ма заг­рузки фай­ла
Фор­ма заг­рузки фай­ла

Пос­ле появ­ления зап­роса в Burp Proxy изме­ним уже зна­комый нам путь /manager/html на /manager/;%2f../;//html.

Зап­рос при заг­рузке фай­ла
Зап­рос при заг­рузке фай­ла
Но­вый зап­рос при заг­рузке фай­ла
Но­вый зап­рос при заг­рузке фай­ла
Заг­ружен­ный файл
Заг­ружен­ный файл

Пос­ле обновле­ния стра­ницы уви­дим в спис­ке фай­лов свой реверс‑шелл. Обра­щаем­ся к нему и получа­ем бэк­коннект.

Ок­но лис­тенера
Ок­но лис­тенера

Продвижение

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

Справка: скрипты PEASS для Linux

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

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

Те­перь надо заг­рузить его на уда­лен­ный хост. В дирек­тории со скрип­том на локаль­ной машине запус­тим с помощью Python прос­той веб‑сер­вер. Пос­ле выпол­нения этой коман­ды веб‑сер­вер будет прос­лушивать порт 8000.

А теперь с помощью того же wget на целевой машине заг­рузим скрипт с локаль­ного хос­та на уда­лен­ный. Пос­ле заг­рузки необ­ходимо дать фай­лу пра­во на выпол­нение и выпол­нить скрипт.

Ин­форма­ции получа­ем мно­го, но ухва­тить­ся, казалось бы, не за что. Единс­твен­ный момент — в дереве про­цес­сов видим запущен­ный скрипт из пла­ниров­щика задач cron. Это может быть инте­рес­но!

Де­рево про­цес­сов
Де­рево про­цес­сов

Playbook во фрей­мвор­ке Ansible опре­деля­ет серию некото­рых дей­ствий для выпол­нения. Час­то плей­буки исполь­зуют для началь­ной нас­трой­ки сер­веров — добав­ления поль­зовате­лей и катало­гов, управле­ния пакета­ми ПО и фай­лами. У нас в ansible-playbook переда­ется файл кон­фигура­ции /opt/backups/playbook/run.yml.

Со­дер­жимое скрип­та run.yml
Со­дер­жимое скрип­та run.yml

В фай­ле три задачи: Copy Files, Server Backups и Clean. То есть сна­чала фай­лы из дирек­тории /var/lib/tomcat9/webapps/ROOT/admin/dashboard копиру­ются в каталог /opt/backups/files, затем фай­лы в этой дирек­тории архи­виру­ются и уда­ляют­ся.

Со­дер­жимое дирек­тории dashboard
Со­дер­жимое дирек­тории dashboard
Со­дер­жимое дирек­тории backups
Со­дер­жимое дирек­тории backups

Так как выпол­няет­ся копиро­вание и фай­лов по ссыл­кам (опция copy_links) в кон­тек­сте поль­зовате­ля luis, то мы можем сде­лать ссыл­ку на его лич­ные фай­лы, что поз­волит их ско­пиро­вать, ког­да cron запус­тит задачу. Конеч­но же, копиро­вать будем при­ват­ный ключ SSH. Сде­лаем ссыл­ку на ключ и помес­тим ее в целевую дирек­торию. Спус­тя вре­мя обна­ружим появив­ший­ся архив.

Бэ­кап фай­лов
Бэ­кап фай­лов

От­кры­ваем архив и дос­таем ключ.

При­ват­ный ключ SSH
При­ват­ный ключ SSH
Флаг поль­зовате­ля
Флаг поль­зовате­ля

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

Пов­торный запуск LinPEAS не показы­вает дра­матич­ных раз­личий, но зацеп­ка все же есть — нас­трой­ки sudoers.

Справка: sudoers

Файл /etc/sudoers в Linux содер­жит спис­ки команд, которые раз­ные груп­пы поль­зовате­лей могут выпол­нять от име­ни адми­нис­тра­тора сис­темы. Мож­но прос­мотреть его как нап­рямую, так и при помощи коман­ды sudo -l.

Нас­трой­ка sudoers
Нас­трой­ка sudoers

Лю­бой поль­зователь (ALL) может выпол­нить коман­ду /usr/bin/ansible-playbook * в при­виле­гиро­ван­ном кон­тек­сте без вво­да пароля (NOPASSWD). Откры­ваем сайт GTFOBinsи находим тех­нику локаль­ного повыше­ния при­виле­гий для это­го при­ложе­ния.

Тех­ника GTFOBins для повыше­ния при­виле­гий через Ansible Playbook
Тех­ника GTFOBins для повыше­ния при­виле­гий через Ansible Playbook

Эта коман­да соз­дает файл кон­фигура­ции playbook во вре­мен­ной дирек­тории. Файл содер­жит одну выпол­няемую задачу — запуск обо­лоч­ки /bin/sh. В кон­це ansible-playbook запус­кает­ся в при­виле­гиро­ван­ном кон­тек­сте, что нам даст при­виле­гиро­ван­ную обо­лоч­ку.

Прохождение Hack The Box Seal. Флаг рута
Прохождение Hack The Box Seal. Флаг рута

Ма­шина зах­вачена, мы име­ем над ней пол­ный кон­троль!

Еще по теме:

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

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

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