Temple of Doom: 1

Сегодня мы продолжаем наш еженедельный взлом виртуалок и на очереди сегодня Temple of Doom: 1.

При старте машина сразу выдала свой ip, так что давайте сразу посмотрим что на ней висит.

image1

Ок, видим ssh на 22 порту и node приложение на 666.

Посмотрим на веб-часть:

image2

Здесь ничего интересного, фаззинг директорий не привел к успеху, однако перезагрузка страницы привела к следующим результатам:

image3

Поковырявшись исходниках и хранящихся в браузере данных, видим следующую куку:

image4

Заметив в начале ey, делаем предположение, что это json в base64. И оказываемся правыми!

image5

Замечаем ошибки в формате и исправляем: обрамляем дату в двойные кавычки и дописываем скобку.

После, энкодим:

image6

Обновляем страницу и ошибки пропадают:

image7

К сожалению, этот успех нам ничего не дает, однако наводит на определенные мысли. Давайте попробуем поменять значение username на что-то другое.

image8
image9

Вспомним о ошибке, возникавшей в самом начале. Она была завязана на моменте десереализации объекта из куки.
Давайте прошерстим интернет на наличие уязвимостей при обработке сереализованных данных в Node.

image10

Изучив найденные материалы и документацию, строим необходимую рабочую цепочку:

image11

Отправляем запрос нашему приложению и получаем RCE:

image12

Давайте теперь прокинем bind-shell:

image13
image14

Отлично, теперь осмотримся на машине. Поднявшись на директорию вверх, видим папку пользователя fireman. Попробуем туда пробраться, однако встречаемся с отсутствием прав.

image15

Что же, по классике посмотрим, какие процессы запущены от этого пользователя:

image16

Теперь поищем, какие дырки можно использовать через ssmanager.

image17

Почитав, находим возможность исполнения команд и соответствующий PoC.
Для начала подключимся по udp к 8839 порту на localhost (делаем пошагово, аналогично найденому материалу).

image

Далее отредактируем PoC для проброса очередного bind shell.

image18
image19

Теперь, зайдя в заветную папку, ничего там полезного не находим:

image20

Посмотрим, что нам разрешено запускать:

image21

Изучая выданный список, начинаем поиск возможность повышения прав, и находим следующее:

image22

Из вычитанного находим, что tcpdump позволяет произвести запуск команд из указанного файла от лица root пользователя.

Давайте проверим эту гипотезу. Создадим файл соответствующий файл, дадим на него права и запустим найденный вектор:

image23

Отлично, теперь давайте заставим root'а дать нам shell:

image24
image25

Успех! Давайте залезем в папку root пользователя:

image26

Ну и, наконец, читаем флаг:

image27

Shortcut:

Просканировав машину, мы обнаружили node js приложение и ssh на 666 и 22 порту соответственно. Проанализировав работу приложения, мы обнаружили, что возникает ошибка при попытке десериализации json данных из cookie. Отредактировав их, мы видим, что в браузере выводится имя пользователя, указанное в json'е. Прочитав из открытых источников вохможность эксплуатации уязвимостей в жанном механизме, получаем RCE. Далее, обнаруживаем пользователя fireman, чьи данные нам не доступны. В списке запущенных им процессов обнаруживаем ssmanager, изучив уязвимости которого, получаем shell от имени fireman. Далее замечаем среди утилит, запуск которых доступен без пароля, tcpdump, который позволяет запускать команды от имени root, что позволяем нам получить доступ в папку root и прочитать флаг.

Использованые техники/уязвимости для решения

  • RCE
  • Local privilege escalation