Продолжаю публикацию решений, отправленных на дорешивание машин с площадки HackTheBox.
В данной статье получим RCE в Tomcat, ломаем zip архив и повышаем привилегии с помощью LXD.
Организационная информация
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Recon
Данная машина имеет IP адрес 10.10.10.194, который я добавляю в /etc/hosts.
10.10.10.194 tabby.htb
Первым делом сканируем открытые порты. Я это делаю с помощью следующего скрипта, принимающего один аргумент — адрес сканируемого хоста:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Выбор небольшой, давайте начнем с 80 порта, где нас встречает следующий сайт.
Осматриваясь на сайте, отмечаем для себя интересные способ показа новостей (с намеком на LFI).
А также добавляем еще одну запись в /etc/hosts.
10.10.10.194 megahosting.htb
Давайте проверим наличие LFI, я для этого использую LFISuite.
И мы находим LFI. Так как большего мы не получаем, перейдем на порт 8080. Там нас встречает страница, из которой мы узнаем, что используется Tomcat.
Обращаем внимание на интересный файл. Переходя по другой ссылке, на встречает окошко HTTP аутентификации. Давайте прочитаем данный файл /usr/share/tomcat9/etc/tomcat-users.xml.
И есть учетные данные, с которыми мы можем авторизоваться. Отсюда мы можем получить RCE с помощью модуля tomcat_mgr_deploy.
Зададим необходимые параметры.
И получаем ошибку пути файла.
Entry Point
Немного побродив, натыкаемся на справку, в которой указана директория text.
Давайте укажем данный путь.
И мы получаем сессию meterpreter. Чтобы быстренько провести разведку, закинем на хост скрипт LinPEAS и выполним.
Внимательно анализируя вывод, находим интересный файл.
USER
Скачиваем его и пробуем открыть. Но у нас спрашивают пароль.
Давайте попробуем его перебрать.
fcrackzip -D -p ../tools/rockyou.txt 16162020_backup.zip
И находим вероятный пароль. В самом архиве ничего интересного нет, но зато это пароль от пользователя, созданного в системе.
Для удобного подключения создадим SSH ключ.
ROOT
Подключимся по SSH с помощью приватного ключа и видим, что пользователь состоит в группе lxd.
LXD — это системный менеджер контейнеров. Он предлагает пользовательский интерфейс, похожий на виртуальные машины, но использующий вместо этого контейнеры Linux.
Ядро LXD — это привилегированный демон, который предоставляет REST API через локальный unix сокет, а также через сеть, если установлена соответствующая конфигурация. Клиенты, такие как инструмент командной строки поставляемый с LXD посылают запросы через этот REST API. Это означает, что независимо от того, обращаетесь ли вы к локальному хосту или к удаленному, все работает одинаково.
Но мы можем через него выполнить команды, то есть от имени root. Для этого нам будет нужно следующее программное обеспечение, скачиваем и собираем исходники.Загрузим полученный образ на удаленный хост. И после подготовительной части импортируем наш lxd-совместимый файл образа.
lxc image import ./alpine-v3.12-x86_64-20200810_0015.tar.gz --alias ralf
Нам сообщают, что предварительно его нужно было инициализировать, но это можено сделать и позже. Убедимся, что образ загружен.
lxc image list
А теперь инициализируем.
Давайте создадим контейнер, указав образ и имя.
lxc init ralf ignite -c security.privileged=true
И зададим конфигурации, где диск будет примонтирован как /mnt/root.
lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
Запускаем и выполняем.
lxc start ignite
lxc exec ignite /bin/sh
И у нас есть root права.
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
irbis_al
Мне стыдно признаться… но я никак в толк не возьму как Вы извне смогли прочитать этот файл?
QtRoS
Кажется, это возможно благодаря LFI — содержимое файла вернулось в теле ответа сервера.
ralfhacker, подскажите пожалуйста, данные задания можно проходить бесплатно? И есть ли эталонные решения? А то во время чтения статей иногда кажется, что Ваш подход слишком продвинутый, и итоговая цепочка действий сложнее тех, что встречались, допустим, в CTF.
irbis_al
Т.е так совпало, что и PHP был как web cgi сервер и при этом был Tomcat как web сервер… при этом была узявисмость LFI на PHP… и процесс на PHP имел ко всему доступ…
Это как в том анкетоде:
-Алло, милиция,-Меня иноплонетяне похитили…
-Вы что пьяный?
-Ну так совпало.
RalfHacker Автор
Да, после объявления машины устаревшей, у вас есть 2 недели, чтобы пройти ее по райтапу бесплатно… Пока машина действительна и для нее нет райтапов, она так же доступна бесплатно.
По эталонному решению: HTB публикует прям на странице машины официальный райтап, он тоже бесплатный
RalfHacker Автор
LFI же есть) мы можем прочитать любой файл, который доступен всем для чтения.