#1. Ligolo
on Kali:
# Listening
sudo ./proxy -selfcert
# After Session Connected
session
1 (enter appropriate session number)
autoroute
# manual add
session
1 (enter appropriate session number)
start --tun ligolo1
sudo ip route add 10.10.10.0/24 dev ligolo1
sudo ip route add 240.0.0.1/32 dev ligolo1on Agent Host(Target Host):
# Linux
./agent -connect 10.10.10.10:11601 -ignore-cert
# Windows
.\agent.exe -connect 10.10.10.10:11601 -ignore-certListener_add:
# on Kali Ligolo Proxy Session
listener_add --addr 0.0.0.0:4444 --to 127.0.0.1:11601- Packets coming to the Agent Host’s port 4444 will be sent to Kali
Access to agent host’s Local Port:
sudo ip route add 240.0.0.1/32 dev ligolo1
curl 240.0.0.1:8080Double pivoting
# add listener to agent host
listener_add --addr 0.0.0.0:11601 --to 127.0.0.1:11601
# access internal host
.\agent.exe -connect $1st_agent_ip:11601 -ignore-cert
# ligolo proxy
select new session and setup the tunnel#2. Chisel
on Kali:
./chisel server --port 443 --reverseSetup Dynamic Port Forwading on Target (need proxychains to use it):
./chisel client 10.10.10.10:443 R:socks > /dev/null 2>&1 &Setup 1:1 Port Forwarding on Target:
./chisel client 10.10.10.10:443 R:8080:127.0.0.1:8080 R:8081:127.0.0.1:8081 > /dev/null 2>&1 &- Packets coming to the Kali’s port 8080,8081 will be sent to Target’s Local 8080,8081 via Kali’s Port 443
#3. SSH
| 옵션 | 리스너 | dst전달 | 트래픽 흐름 | 주의사항 |
|---|---|---|---|---|
-L bind:port:dst:dst_port | 클라이언트 | 서버 | 클라 → 서버 | bind생략 시 127.0.0.1 |
-R bind:port:dst:dst_port | 서버 | 클라이언트 | 서버 → 클라 | bind생략 시 127.0.0.1 ssh서버 호스트 컨픽, /etc/ssh/sshd_config가 GatewatPorts no로 설정된 경우, 0.0.0.0 바인딩 불가 |
-D port | 클라이언트(SOCKS5) | 서버 | 클라 → 서버 | SOCKS over TCP이므로, UDP 포트포워딩 불가. nmap에 -sT -Pn 명시 |
-f: 백그라운드로 실행-N: ssh 쉘 없이 터널만 유지-D: Dynamic 포트포워딩- 클라이언트에 SOCKS 프록시 리스너를 열고 proxychains로 사용
- TCP 전용(UDP·ICMP 불가) →
nmap은-sT -Pn필요 sudo proxychains4 nmap $IP -sT -Pn
-L: 1:1매핑 포트포워딩- 클라이언트 바인드 포트에 리스너를 열고, 해당 포트로 들어오는 연결을 서버가 dst로 포워딩. (트래픽 흐름: 클라 → 서버)
- dst 주소는 ‘서버 시점’에서 해석됨 (127.0.0.1 = 서버 자신)
- 주로 internal 서비스를 Kali에서 접근하고 싶을때 사용(ex, kali → 대상 internal DB 접속)
-R: Remote 포트포워딩- 서버 바인드 포트에 리스너를 열고, 해당 포트로 들어오는 연결을 클라이언트가 dst로 포워딩. (트래픽 흐름: 서버 → 클라)
- dst 주소는 ‘클라이언트 시점’에서 해석됨 (localhost = Kali)
- 주로 Kali의 서비스를 대상 internal 호스트에서 접근하고 싶을 때 사용(ex, internal host → kali 리버스쉘 받기)
on Kali:
# 공통
ssh user@$Server -L/R [bind]:[port]:[dst]:[dst_port]
# 1:1 매핑
ssh user@$Server -L 0.0.0.0:PORT1:$TARGET_IP:PORT2
=> $Host:PORT1 -> $Server_Host -> $TARGET:PORT2
ssh admin@10.10.10.10 -f -N -L 4455:172.16.1.10:445
=> Kali 4455 -> 10.10.10.10호스트 -> 172.16.1.10:445
# Dynamic (socks proxychains4)
ssh user@$Server -D 0.0.0.0:PORT1:$TARGET_IP:PORT2
=> $Host:PORT1 -> $Server_Host -> $TARGET_Host
ssh admin@10.10.10.10 -N -D 1080
=> Kali 1080 -> 10.10.10.10호스트 -> Anywhere
=> proxychains4 ping 172.16.1.10
=> sudo proxychains4 nmap 172.16.1.10 -sT
# Remote
ssh user@$Server -R 0.0.0.0:PORT1:$TARGET_IP:PORT2이스케이프 시퀀스 설정 (Escape sequance):
vi ~/.ssh/config
Host *
EnableEscapeCommandline yes
chmod 600 ~/.ssh/config이스케이프 시퀀스 옵션:
~.: SSH 연결 종료 (멈춘 세션 탈출)
~?: Help
~C: 커맨드모드 진입(SSH 포트포워딩 등)
이스케이프 시퀀스 포트포워딩:
# Commandline 전환
Enter
~C
# 프롬프트 변경 확인 "ssh>"
ssh>
ssh> -D 1080
ssh> -L PORT1:$TARGET_IP:PORT2
=> 이후 Ctrl C로 커맨드라인 종료해도, 포트포워딩은 유지됨
# 포트포워딩 해제
ssh> -KD 1080 # Dynamic 포워딩 해제
ssh> -KL 클라이언트_리스닝_포트번호 # 로컬 포트포워딩 해제
ssh> -KR 서버_리스닝_포트번호 # 원격 포트포워딩 해제#4. sshuttle
- 대상에 ssh, python 필요
Command:
sshuttle -r $USER@$IP $IP_Range1 $IP_Range2.. --dns
sshuttle -r $USER@$IP 10.10.10.0/24 172.16.50.0/24 --dns
=> 10.10.10.0/24 및 172.16.50.0/24는 대상 호스트를 타고 나가도록 포워딩 설정됨.#5. socat
socat은 기존의 포트포워딩 툴과는 결이 조금 다른, 패킷을relay하는데 사용되는 linux binary
# 피벗 호스트에서: 피벗의 8080으로 온 걸 내부 DB로 릴레이
socat TCP-LISTEN:8080,fork,reuseaddr TCP:10.4.50.215:5432
=> Kali → 피벗:8080 → 내부DB:5432