Post

Dynamic Port Forwarding with SSH and SOCKS Tunneling

HTB CPTS note về SSH dynamic port forwarding, SOCKS tunneling và proxychains.

Dynamic Port Forwarding with SSH and SOCKS Tunneling

tags: [pivoting, tunneling, ssh, socks, proxychains, htb] module: “Pivoting, Tunneling & Port Forwarding”



SSH Port Forwarding & SOCKS Tunneling

Table of Contents

  • Bản chất
    1. SSH Local Port Forwarding
      • Bản chất kỹ thuật
      • Luồng từ góc nhìn Attacker
      • Lệnh
      • Xác minh
    1. Dynamic Port Forwarding + SOCKS Tunneling
      • Khi nào dùng
      • Bản chất SOCKS
      • Luồng thực tế
      • Các bước thực hiện
      • Hạn chế quan trọng
    1. Phát hiện cơ hội Pivot
  • Quick Reference
  • Ghi chú thực tế

Bản chất

Port Forwarding là kỹ thuật chuyển hướng kết nối từ một cổng này sang cổng khác. Trong ngữ cảnh tấn công mạng, nó được dùng để truy cập các dịch vụ nằm sau tường lửa hoặc trong subnet mà attacker không có route trực tiếp.

SSH là phương tiện phổ biến nhất để thực hiện port forwarding vì nó mã hóa traffic và thường được phép qua firewall.


1. SSH Local Port Forwarding

Bản chất kỹ thuật

“Tôi muốn dịch vụ đang chạy trên máy victim xuất hiện như thể đang chạy trên máy local của tôi.”

Khi attacker đã SSH được vào pivot host, có thể có dịch vụ trong mạng nội bộ mà attacker chưa truy cập được trực tiếp. Local port forwarding tạo một “đường ống” qua SSH để forward traffic từ cổng local của attacker đến dịch vụ đích.

1
Attack Host :1234  ──SSH tunnel──►  Pivot Host  ──►  localhost

Lệnh

1
2
3
4
5
# Forward 1 cổng
ssh -L 1234:localhost:3306 ubuntu@<PIVOT_IP>

# Forward nhiều cổng cùng lúc
ssh -L 1234:localhost:3306 -L 8080:localhost:80 ubuntu@<PIVOT_IP>

Giải thích cú pháp: -L <local_port>:<target_host>:<target_port>

  • local_port = cổng mở trên máy attacker
  • target_host = host đích tính từ góc nhìn của pivot (có thể là localhost hoặc IP trong mạng nội bộ)
  • target_port = cổng dịch vụ đích

Xác minh

1
2
3
4
5
# Kiểm tra cổng đã được mở chưa
netstat -antp | grep 1234

# Scan bằng Nmap để xác nhận dịch vụ
nmap -v -sV -p1234 localhost

2. Dynamic Port Forwarding + SOCKS Tunneling

Khi nào dùng?

Khi attacker không biết trước cổng/dịch vụ cụ thể cần forward. Thay vì forward từng cổng riêng lẻ, tạo một SOCKS proxy để route toàn bộ traffic tùy ý qua pivot host vào subnet nội bộ.

Bản chất SOCKS

SOCKS (Socket Secure) là giao thức proxy hoạt động ở tầng transport. Khác với HTTP proxy (chỉ hiểu HTTP), SOCKS có thể proxy bất kỳ TCP traffic nào.

Tính năngSOCKS4SOCKS5
Authentication
UDP support

Trong SSH dynamic port forwarding, SSH client tự đóng vai trò là SOCKS server:

1
[Tool] → proxychains → localhost:9050 (SOCKS) → SSH tunnel → Pivot Host → Internal Network

Luồng thực tế

1
2
3
4
5
6
7
8
9
10
11
Attack Host                    Pivot Host              Internal Network
   │                               │                        │
   │  ssh -D 9050                  │                        │
   ├──────────────────────────────►│                        │
   │                               │                        │
   │  proxychains nmap 172.16.5.x  │                        │
   │──►localhost:9050              │                        │
   │      │ (SOCKS listener)       │                        │
   │      └──SSH tunnel───────────►│──────►172.16.5.x:port  │
   │                               │◄──────response─────────│
   │◄──────────────────────────────│                        │

Các bước thực hiện

Bước 1: Mở SOCKS proxy qua SSH

1
ssh -D 7807 ubuntu@<PIVOT_IP>

-D 7807 = SSH client mở SOCKS listener tại localhost:9050

Bước 2: Cấu hình proxychains

1
2
3
tail -4 /etc/proxychains.conf
# Đảm bảo có dòng:
# socks4  127.0.0.1 9050

Bước 3: Chạy tool qua proxychains

1
2
3
4
5
6
7
8
9
10
11
# Ping sweep subnet nội bộ
proxychains nmap -v -sn 172.16.5.1-200

# Full scan một host cụ thể (-Pn vì ICMP không qua SOCKS)
proxychains nmap -v -Pn -sT 172.16.5.19

# Mở Metasploit qua proxy
proxychains msfconsole

# RDP vào host nội bộ
proxychains xfreerdp /v:172.16.5.19 /u:victor /p:pass@123

Hạn chế quan trọng

Chỉ dùng được Full TCP Connect Scan proxychains không thể xử lý **partial packets. Với Nmap phải dùng -sT (full connect scan), không dùng được -sS (SYN/half-open scan).**

Windows host không trả lời ping Windows Defender mặc định block ICMP → luôn thêm -Pn khi scan Windows qua proxychains.


3. Phát hiện cơ hội Pivot

Sau khi vào được pivot host, kiểm tra network interfaces để tìm các subnet khác:

1
2
3
ifconfig
# hoặc
ip a

Nếu máy có nhiều NIC, đó là dấu hiệu cần pivot sang subnet kia.

1
2
ens192: 10.129.202.64    ← subnet kết nối với attacker
ens224: 172.16.5.129     ← subnet nội bộ, attacker chưa có route

Quick Reference

Kỹ thuậtLệnhDùng khi
Local Port Forwardssh -L <local>:<target_host>:<target_port> user@pivotBiết trước dịch vụ cụ thể
Dynamic Port Forwardssh -D 9050 user@pivotMuốn proxy toàn bộ traffic vào subnet
Proxychains + Nmapproxychains nmap -Pn -sT <target>Scan qua SOCKS
Proxychains + RDPproxychains xfreerdp /v:<ip> /u:<user> /p:<pass>RDP vào host nội bộ

Ghi chú thực tế

  • Scan qua proxychains rất chậm → chỉ scan từng host hoặc dải IP nhỏ
  • Chạy tunnel background để không chiếm terminal: ssh -D 9050 -f -N ubuntu@<PIVOT_IP>
This post is licensed under CC BY 4.0 by the author.