Дьявольски-красный пентест. Строим цепочки туннелей через докер-контейнеры на виртуалке с Hack The Box

Что делать, когда тебе нужно захватить контроль над хостом, который находится в другой подсети? Верно — много запутанных туннелей! Сегодня мы рассмотрим техники туннелирования при пентесте — на примере хардкорной виртуалки Reddish (уровень сложности Insane — 8,0 баллов из 10) с CTF-площадки Hack The Box.

Встретимся со средой визуального программирования Node-RED, где в прямом смысле «построим» реверс-шелл; проэксплуатируем слабую конфигурацию СУБД Redis; используем инструмент зеркалирования файлов rsync для доступа к чужой файловой системе; наконец, создадим кучу вредоносных задач cron на любой вкус. Но самое интересное, что управлять хостом мы будем, маршрутизируя трафик по докер-контейнерам через несколько TCP-туннелей. Погнали!

 

Разведка

В этом разделе соберем побольше информации для проникновения вглубь системы.

 

Сканирование портов

Расчехляем Nmap — и в бой! Сразу скажу, что дефолтные 1000 портов, которые Nmap сканирует в первую очередь, оказались закрыты. Так что будем исследовать весь диапазон TCP на высокой скорости.

root@kali:~# nmap -n -Pn —min-rate=5000 -oA nmap/tcp-allports 10.10.10.94 -p-
root@kali:~# cat nmap/tcp-allports.nmap
...
Host is up (0.12s latency).
Not shown: 65534 closed ports
PORT STATE SERVICE
1880/tcp open vsat-control
...

После полного сканирования, как видишь, откликнулся только один порт — неизвестный мне 1880-й. Попробуем вытащить из него больше информации.

root@kali:~# nmap -n -Pn -sV -sC -oA nmap/tcp-port1880 10.10.10.94 -p1880
root@kali:~# cat nmap/tcp-port1880.nmap
...
PORT STATE SERVICE VERSION
1880/tcp open http Node.js Express framework
|_http-title: Error
...

Сканер говорит, что на этом порту развернут Express — фреймворк веб-приложений Node.js. А когда видишь приставку «веб» — в первую очередь открываешь браузер…

 

Веб — порт 1880

Переход на страницу http://10.10.10.94:1880/ выдает лишь скупое сообщение об ошибке.

Не найдена запрашиваемая страница (404)

Есть два пути разобраться, что за приложение висит на этом порту.

  • Сохранить значок веб-сайта к себе на машину (обычно они живут по адресу /favicon.ico) и попытаться найти его с помощью Reverse Image Search.
  • Спросить у поисковика, с чем обычно ассоциирован порт 1880.
  • Второй вариант более «казуальный», но столь же эффективный: уже на первой ссылке по такому запросу мне открылась Истина.

    Гуглим информацию о 1880-м порте (источник — speedguide.net)

     

    Node-RED

    Если верить официальному сайту, Node-RED — это среда для визуального программирования, где можно строить связи между разными сущностями (от локальных железок до API онлайн-сервисов). Чаще всего, как я понял, о Node-RED говорят в контексте управления умными домами и вообще девайсами IoT.

    Окей, софт мы идентифицировали, но ошибка доступа к веб-странице от этого никуда не делась.

    root@kali:~# curl -i http://10.10.10.94:1880
    HTTP/1.1 404 Not Found
    X-Powered-By: Express
    Content-Security-Policy: default-src 'self'
    X-Content-Type-Options: nosniff
    Content-Type: text/html; charset=utf-8
    Content-Length: 139
    Date: Thu, 30 Jan 2020 21:53:05 GMT
    Connection: keep-alive

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <title>Error</title>
    </head>
    <body>
    <pre>Cannot GET /</pre>
    </body>
    </html>

    Первое, что приходит в голову, — запустить брутер директорий. Но перед этим попробуем просто поменять запрос с GET на POST.

    root@kali:~# curl -i -X POST http://10.10.10.94:1880
    HTTP/1.1 200 OK
    X-Powered-By: Express
    Content-Type: application/json; charset=utf-8
    Content-Length: 86
    ETag: W/"56-dJUoKg9C3oMp/xaXSpD6C8hvObg"
    Date: Thu, 30 Jan 2020 22:04:20 GMT
    Connection: keep-alive

    {"id":"a237ac201a5e6c6aa198d974da3705b8","ip":"::ffff:10.10.14.19","path":"/red/{id}"}

    Ну вот и обошлись без брутеров. Как видишь, при обращении к корню веб-сайта через POST сервер возвращает пример того, как должно выглядеть тело запроса. В принципе, до этого можно дойти логически: в документации к API Node-RED тонны именно POST-запросов.

    Итак, при переходе по http://10.10.10.94:1880/red/a237ac201a5e6c6aa198d974da3705b8/ мы видим следующую картину.

    Рабочая область среды Node-RED

    Давай разбираться, что здесь можно наворотить.

     

    Node-RED Flow

    Первая ассоциация при виде рабочей области Node-RED — «песочница». И так видно, что эта штука способна на многое, однако нам нужно всего ничего: получить шелл на сервере.

    Список узлов среды Node-RED

    Я пролистал вниз панель «строительных блоков» (или «узлов», как называет их Node-RED) слева и увидел вкладку Advanced — здесь спряталась дорогая сердцу любого хакера функция exec.

     

    Spice must FLOW

    В философии Node-RED каждая комбинация, которую ты соберешь в рабочей области, называется «флоу» (он же поток). Потоки можно строить, выполнять, импортировать и экспортировать в JSON. При нажатии на кнопку Deploy сервер (как ни странно) деплоит все потоки со всех вкладок рабочей области.

    Источник: xakep.ru

    Ответить

    Ваш адрес email не будет опубликован. Обязательные поля помечены *