![](https://habrastorage.org/webt/ji/bi/m4/jibim4onifbcq8xwhd6awlqfnbc.png)
Продолжаю публикацию решений, отправленных на дорешивание машин с площадки 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
![](https://habrastorage.org/webt/fx/m3/-g/fxm3-gp_w9yofgwx63ubutezq5c.png)
Выбор небольшой, давайте начнем с 80 порта, где нас встречает следующий сайт.
![](https://habrastorage.org/webt/hb/kl/zo/hbklzo1ud2tl6mnkguxonqowh2q.png)
Осматриваясь на сайте, отмечаем для себя интересные способ показа новостей (с намеком на LFI).
![](https://habrastorage.org/webt/bi/6e/kr/bi6ekrxiywhfysmuoafozxs_jge.png)
А также добавляем еще одну запись в /etc/hosts.
10.10.10.194 megahosting.htb
Давайте проверим наличие LFI, я для этого использую LFISuite.
![](https://habrastorage.org/webt/hh/iq/ii/hhiqiiahs16ut7fmvtqik4f8p9k.png)
![](https://habrastorage.org/webt/i-/pi/kb/i-pikbzvye4yduybre51yvgsxei.png)
![](https://habrastorage.org/webt/jg/lo/ma/jglomalyoxat_fei-mxrl-kufyi.png)
И мы находим LFI. Так как большего мы не получаем, перейдем на порт 8080. Там нас встречает страница, из которой мы узнаем, что используется Tomcat.
![](https://habrastorage.org/webt/wq/ul/7d/wqul7dcpyqjv5pjzehe0xmwxj24.png)
Обращаем внимание на интересный файл. Переходя по другой ссылке, на встречает окошко HTTP аутентификации. Давайте прочитаем данный файл /usr/share/tomcat9/etc/tomcat-users.xml.
![](https://habrastorage.org/webt/he/gp/p6/hegpp64l4y7xxujamomeodqbu_u.png)
И есть учетные данные, с которыми мы можем авторизоваться. Отсюда мы можем получить RCE с помощью модуля tomcat_mgr_deploy.
![](https://habrastorage.org/webt/dm/xf/5i/dmxf5inqpudayk5otmlk6hbuess.png)
Зададим необходимые параметры.
![](https://habrastorage.org/webt/ug/2w/el/ug2welnoxsty1ustxhtqrrwnmmo.png)
И получаем ошибку пути файла.
Entry Point
Немного побродив, натыкаемся на справку, в которой указана директория text.
![](https://habrastorage.org/webt/bi/an/zp/bianzpqc8ly_s0glxf0t6k5d430.png)
![](https://habrastorage.org/webt/dc/5d/6u/dc5d6u5qf3zx2vk8r9ko50o7uuu.png)
Давайте укажем данный путь.
![](https://habrastorage.org/webt/b6/ii/x_/b6iix_wfe012qy0zsxoqpc2chwy.png)
И мы получаем сессию meterpreter. Чтобы быстренько провести разведку, закинем на хост скрипт LinPEAS и выполним.
![](https://habrastorage.org/webt/dw/mj/0v/dwmj0veulkk6n6vctooer9lqc3s.png)
Внимательно анализируя вывод, находим интересный файл.
![](https://habrastorage.org/webt/fz/fd/s6/fzfds67ws6qd14x3jcy8kkagqdu.png)
USER
Скачиваем его и пробуем открыть. Но у нас спрашивают пароль.
![](https://habrastorage.org/webt/pg/m_/gc/pgm_gcr2iicedhbkh8x3drs9tfm.png)
![](https://habrastorage.org/webt/9u/9h/fv/9u9hfvdgmc4dtszxwvvra7cmmho.png)
Давайте попробуем его перебрать.
fcrackzip -D -p ../tools/rockyou.txt 16162020_backup.zip
![](https://habrastorage.org/webt/9x/lk/y9/9xlky9ol5ludpeuwf1vi44nbha4.png)
И находим вероятный пароль. В самом архиве ничего интересного нет, но зато это пароль от пользователя, созданного в системе.
![](https://habrastorage.org/webt/_i/22/qe/_i22qe-vavmi_l0cwcfnrnxbcpi.png)
Для удобного подключения создадим SSH ключ.
![](https://habrastorage.org/webt/af/vv/bc/afvvbcdg6wzngy5lzdqbwbzm4hk.png)
ROOT
Подключимся по SSH с помощью приватного ключа и видим, что пользователь состоит в группе lxd.
![](https://habrastorage.org/webt/vp/2w/wa/vp2wwa3s4jhfnazjt-6bwbfjuxw.png)
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
![](https://habrastorage.org/webt/ao/gt/jn/aogtjn5gy5qhkww1okwa9txsgou.png)
Нам сообщают, что предварительно его нужно было инициализировать, но это можено сделать и позже. Убедимся, что образ загружен.
lxc image list
![](https://habrastorage.org/webt/by/zd/hg/byzdhg1bvbntczq-p3hdqn-mfry.png)
А теперь инициализируем.
![](https://habrastorage.org/webt/_3/gi/q3/_3giq3lyqqhl6-xgghbybigqwl0.png)
Давайте создадим контейнер, указав образ и имя.
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
![](https://habrastorage.org/webt/k9/lw/n-/k9lwn-scrpckooxvpymzxqipjw0.png)
И у нас есть root права.
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
irbis_al
Мне стыдно признаться… но я никак в толк не возьму как Вы извне смогли прочитать этот файл?
QtRoS
Кажется, это возможно благодаря LFI — содержимое файла вернулось в теле ответа сервера.
ralfhacker, подскажите пожалуйста, данные задания можно проходить бесплатно? И есть ли эталонные решения? А то во время чтения статей иногда кажется, что Ваш подход слишком продвинутый, и итоговая цепочка действий сложнее тех, что встречались, допустим, в CTF.
irbis_al
Т.е так совпало, что и PHP был как web cgi сервер и при этом был Tomcat как web сервер… при этом была узявисмость LFI на PHP… и процесс на PHP имел ко всему доступ…
Это как в том анкетоде:
-Алло, милиция,-Меня иноплонетяне похитили…
-Вы что пьяный?
-Ну так совпало.
RalfHacker Автор
Да, после объявления машины устаревшей, у вас есть 2 недели, чтобы пройти ее по райтапу бесплатно… Пока машина действительна и для нее нет райтапов, она так же доступна бесплатно.
По эталонному решению: HTB публикует прям на странице машины официальный райтап, он тоже бесплатный
RalfHacker Автор
LFI же есть) мы можем прочитать любой файл, который доступен всем для чтения.