Содержание статьи
- Разведка
- Сканирование портов
- Веб — порт 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
Встретимся со средой визуального программирования Node-RED, где в прямом смысле построим реверс-шелл; проэксплуатируем слабую конфигурацию СУБД Redis; используем инструмент зеркалирования файлов rsync для доступа к чужой файловой системе; наконец, создадим кучу вредоносных задач cron на любой вкус. Но самое интересное, что управлять хостом мы будем, маршрутизируя трафик по докер-контейнерам через несколько TCP-туннелей. Погнали!
Разведка
В этом разделе соберем побольше информации для проникновения вглубь системы.
Сканирование портов
Расчехляем Nmap — и в бой! Сразу скажу, что дефолтные 1000 портов, которые Nmap сканирует в первую очередь, оказались закрыты. Так что будем исследовать весь диапазон TCP на высокой скорости.
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:~# 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/
выдает лишь скупое сообщение об ошибке.
Есть два пути разобраться, что за приложение висит на этом порте.
- Сохранить значок веб-сайта к себе на машину (обычно они живут по адресу
/favicon.ico
) и попытаться найти его с помощью Reverse Image Search. - Спросить у поисковика, с чем обычно ассоциирован порт
1880
.
Второй вариант более «казуальный», но столь же эффективный: уже на первой ссылке по такому запросу мне открылась Истина.
Node-RED
Если верить официальному сайту, Node-RED — это среда для визуального программирования, где можно строить связи между разными сущностями (от локальных железок до API онлайн-сервисов). Чаще всего, как я понял, о Node-RED говорят в контексте управления умными домами и вообще девайсами IoT.
Окей, софт мы идентифицировали, но ошибка доступа к веб-странице от этого никуда не делась.
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
.
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 Flow
Первая ассоциация при виде рабочей области Node-RED — «песочница». И так видно, что эта штука способна на многое, однако нам нужно всего ничего: получить шелл на сервере.
Я пролистал вниз панель «строительных блоков» (или «узлов», как называет их Node-RED) слева и увидел вкладку Advanced — здесь спряталась дорогая сердцу любого хакера функция exec.
Spice must FLOW
В философии Node-RED каждая комбинация, которую ты соберешь в рабочей области, называется «флоу» (он же поток). Потоки можно строить, выполнять, импортировать и экспортировать в JSON. При нажатии на кнопку Deploy сервер (как ни странно) деплоит все потоки со всех вкладок рабочей области.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»