Содержание статьи
- Разведка
- Сканирование портов
- Веб — порт 1880
- Node-RED
- Node-RED Flow
- Spice must FLOW
- Загрузка файлов из командной строки
- Докер. Контейнер I: nodered
- Host Discovery
- Сканирование неизвестных хостов
- Туннелирование... как много в этом звуке
- Reverse SSH (пример)
- Chisel
- Докер. Контейнер II: www
- Больше туннелей!
- Докер. Контейнер III: backup
- Получение root-шелла
- Примечание
- Финальный захват хоста Reddish
- Эпилог
- Конфигурация docker
- Chisel SOCKS
Что делать, когда тебе нужно захватить контроль над хостом, который находится в другой подсети? Верно — много запутанных туннелей! Сегодня мы рассмотрим техники туннелирования при пентесте — на примере хардкорной виртуалки 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 portsPORT STATE SERVICE1880/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 VERSION1880/tcp open http Node.js Express framework|_http-title: Error...
Сканер говорит, что на этом порту развернут Express — фреймворк веб-приложений Node.js. А когда видишь приставку «веб» — в первую очередь открываешь браузер…
Веб — порт 1880
Переход на страницу http://10.10.10.94:1880/ выдает лишь скупое сообщение об ошибке.
Есть два пути разобраться, что за приложение висит на этом порту.
- Сохранить значок веб-сайта к себе на машину (обычно они живут по адресу
/favicon.ico) и попытаться найти его с помощью Reverse Image Search. - Спросить у поисковика, с чем обычно ассоциирован порт
1880.
Второй вариант более «казуальный», но столь же эффективный: уже на первой ссылке по такому запросу мне открылась Истина.

Node-RED
Если верить официальному сайту, Node-RED — это среда для визуального программирования, где можно строить связи между разными сущностями (от локальных железок до API онлайн-сервисов). Чаще всего, как я понял, о Node-RED говорят в контексте управления умными домами и вообще девайсами IoT.
Окей, софт мы идентифицировали, но ошибка доступа к веб-странице от этого никуда не делась.
root@kali:~# curl -i http://10.10.10.94:1880HTTP/1.1 404 Not FoundX-Powered-By: ExpressContent-Security-Policy: default-src 'self'X-Content-Type-Options: nosniffContent-Type: text/html; charset=utf-8Content-Length: 139Date: Thu, 30 Jan 2020 21:53:05 GMTConnection: 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:1880HTTP/1.1 200 OKX-Powered-By: ExpressContent-Type: application/json; charset=utf-8Content-Length: 86ETag: W/"56-dJUoKg9C3oMp/xaXSpD6C8hvObg"Date: Thu, 30 Jan 2020 22:04:20 GMTConnection: 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 Flow
Первая ассоциация при виде рабочей области Node-RED — «песочница». И так видно, что эта штука способна на многое, однако нам нужно всего ничего: получить шелл на сервере.

Я пролистал вниз панель «строительных блоков» (или «узлов», как называет их Node-RED) слева и увидел вкладку Advanced — здесь спряталась дорогая сердцу любого хакера функция exec.
Spice must FLOW
В философии Node-RED каждая комбинация, которую ты соберешь в рабочей области, называется «флоу» (он же поток). Потоки можно строить, выполнять, импортировать и экспортировать в JSON. При нажатии на кнопку Deploy сервер (как ни странно) деплоит все потоки со всех вкладок рабочей области.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее
1 год7690 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»