В предыдущей статье, в рамках прохождения задания Hack The Box RedPanda, мы эксплуатировали уязвимость SSTI с шаблонизатором Spring, сегодня продолжим взламывать уязвимую машину RedPanda и будем эксплуатировать уязвимость XXE.
Еще по теме: Лучшие гаджеты хакера
Эксплуатация уязвимости XXE
Немного погуляв по файловой системе, доходим до каталога /opt/, где есть несколько проектов.
Просматривая каталоги и исходные коды, все же добираемся и до кода panda_search.
В основном файле MainController.java находим код для подключения базы данных. В подобных функциях всегда указываются учетные данные для работы с БД.
Имя пользователя мы уже знаем, поэтому попробуем использовать найденный пароль и авторизоваться по SSH.
Локальное повышение привилегий
С помощью автоматизированных средств сбора информации вроде скриптов LinPEASS ничего интересного найти не удалось. Поэтому отследим запускаемые процессы с помощью pspy64.
Сервер периодически запускает скрипт LogParser, к исходному коду которого мы имеем доступ. Каталог следующий:
1 |
/opt/credit-score/LogParser/final/src/main/java/com/logparser |
Что интересно, после нескольких проверок происходит парсинг XML-файла, а это намек на уязвимость XXE. Вникнем в код немного глубже.
Первое условие — наличие файла XML, а он создается приложением panda_search. В исходном коде функции afterCompletion получаем формат данных внутри файла логов: responseCode||address||UserAgent||Uri.
Итак, файл и его содержимое мы уже можем контролировать. Вернемся к новому проекту и разберем его по функциям. После чтения файла функция isImage проверяет, есть ли в имени файла подстрока .jpg.
Затем функция parseLog разбирает лог на параметры status_code, ip, user_agent и uri.
Куда интереснее следующая функция getArtist, в которую передается путь. Эта функция получает параметр метаданных Artist из картинки, которая находится по переданному пути.
И наконец, рассмотрим функцию addViewTo. В нее передается путь к XML-файлу. Этот путь составляется из значения, которое вернет getArtist, а его мы можем контролировать. Сама функция парсит XML и переписывает его поля.
Таким образом мы можем манипулировать метапараметром Artist, чтобы указать на собственный XML-файл и выполнить атаку типа XXE. С ее помощью мы сможем получить содержимое любого файла. Первым делом создадим файл:
1 |
/home/woodenk/ralf_creds.xml |
Со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 |
<!--?xml version="1.0" ?--> <!DOCTYPE replace [<!ENTITY r SYSTEM "file:///root/.ssh/id_rsa"> ]> <credits> <author>ralf</author> <image> <uri>/../../../../../../../home/woodenk/01.jpg</uri> <hello>&r;</hello> <views>0</views> </image> <totalviews>0</totalviews> </credits> |
Так мы попытаемся получить файл /root/.ssh/id_rsa в качестве параметра r.
А теперь вставим метапараметр в изображение и тоже загрузим его в домашний каталог пользователя.
1 |
exiftool -Artist="../home/woodenk/ralf" 01.jpg |
Дело за малым: сделать так, чтобы файл логов содержал в качестве URL путь к файлу изображения. Так как используются разделители ||, мы можем выполнить инъекцию через User-Agent.
1 |
curl http://10.10.11.170:8080 -H "User-Agent: ||/../../../../../../../home/woodenk/01.jpg" |
Спустя некоторое время видим в домашнем каталоге уже заполненный файл ralf_creds.xml, который будет содержать SSH-ключ пользователя.
С полученным приватным ключом подключаемся к удаленному серверу.
Машина Hack The Box RedPanda захвачена!
РЕКОМЕНДУЕМ: