ATT&CK视角下的红蓝对抗:二. 内网探测协议出网

2023-10-30 10:04:44 浏览数 (2)

当红队人员在进行内网渗透时,经常会遇到目标主机不出网的场景,而主机不出网的原因有很多,常见的原因例如目标主机未设置网关,被防火墙或者其他防护设备拦截设置了出入站策略,只允许特定协议或端口出网等。当我们遇到这种情况时,可以通过本章节中所讲到的方法,利用各种包含该协议的方式探测目标主机允许哪些协议出网,根据探测到的协议信息进行隧道穿透。在已经获取到目标系统的权限前提下,可以通过下述所讲到的各种协议探测手段来进行探测是否出网。

一.TCP/UDP协议探测出网

在对目标服务器进行TCP/UDP协议探测出网前,需要满足前文中所提到的已经获取目标管理权限的前提下进行本次实验。本次实验环境拓扑如图1-1所示。

图1-1 TCP/UDP协议探测出网实验拓扑图1-1 TCP/UDP协议探测出网实验拓扑

1.NC工具探测TCP协议出网

1)根据图1-1所描述的实验拓扑环境中,使用nc工具和Telnet命令来探测TCP协议是否出网,首先介绍一下Netcat(NC)这款工具,它是一款比较简单并且非常有用的工具,既支持通过TCP和UDP在网络连接中读写数据,也是一个稳定的后门工具,支持其它程序和脚本驱动,同时它还是一个功能强大的网络调试和探测工具,可以建立使用中所需要的几乎所有类型的网络连接,若要利用NC工具来探测TCP协议是否出网,首先我们先使用NC工具在目标服务器中执行nc.exe -lvp 8888"命令来监听目标服务器的8888端口,如图1-2所示。在使用nc开启监听执行连接的过程中,会发起TCP请求和响应时,同时也会产生数据包,通过在本地主机中使用Wireshark流量分析软件来抓取发起连接过程的数据包,后续通过抓取到的数据包来查看TCP三次握手连接过程。

图1-2 使用NC工具开启服务端监听图1-2 使用NC工具开启服务端监听

2)在Windows 10主机中使用nc工具连接目标服务器8888端口,检测其是否出网。执行nc.exe -nv 8.130.xxx.xxx 8888"命令,发现成功连接,显示open开启端口状态,可证明目标服务器TCP协议出网,如图1-3所示。

图1-3 客户端连接成功图1-3 客户端连接成功

3)在使用nc工具连接探测到出网成功的同时,在本地主机中可以看到从wireshark软件中抓取的数据包,分析本地主机和目标服务器TCP协议建立连接的过程,在过滤栏使用"tcp.port == 8888",过滤TCP端口,即可看到TCP三次握手成功的情况,如图1-4所示。

图1-4 TCP三次握手过程图1-4 TCP三次握手过程

2.Telnet命令探测TCP协议出网

1)使用Telnet命令来探测目标服务器是否出网,首先需要在目标服务器使用nc工具开启监听8888端口,执行命令nc.exe -lvp 8888,成功开启目标服务器监听,如图1-5所示。

图1-5 nc开启服务端监听图1-5 nc开启服务端监听

2)当开启监听后,在本地主机中使用Telnet命令连接到目标服务器。执行telnet 8.130.xx.xx 8888命令,如图1-6所示则证明连接成功,即代表允许TCP出网。

图1-7 Telnet客户端连接成功图1-7 Telnet客户端连接成功

3.UDP协议探测出网

1)探测目标服务器UDP协议是否出网前,需要上传nc到目标服务器,在目标服务器上执行nc.exe -ulvp 8888"命令来开启目标服务器监听, 如图1-8所示,其中-u参数是指nc使用udp协议进行数据传输(nc默认使用tcp)。

图1-8 nc使用Udp协议开启服务端监听图1-8 nc使用Udp协议开启服务端监听

2)由于UDP是无连接传输协议,发送端和接收端之间没有握手,每个UDP报文段都会被单独处理,在Windows 10主机中启动wireshark流量分析软件,抓取本地流量包,开启监听后在Windows 10主机利用nc工具发起连接。执行nc.exe -uv 8.130.xx.xx 8888"命令,测试返回响应后,发现显示open,连接成功,如图1-9所示。

图1-9 nc客户端使用udp协议连接成功图1-9 nc客户端使用udp协议连接成功

3)通过在本地Wireshark流量分析软件抓取到的UDP数据包,可以看出本机和目标服务器通过UDP协议进行通讯,证实UDP协议出网,如图1-10所示。

图1-10 wireshark捕获Udp数据包图1-10 wireshark捕获Udp数据包

二.HTTP/HTTPS协议探测出网

对目标服务器探测Http/Https协议是否出网时,要根据目标系统类型去执行命令,不同类型的操作系统,使用的探测方式也不同,例如在Windows操作系统中可以使用自带的bitsadmin、certutil等命令来对Http或Https进行出网探测,linux操作系统可以使用自带的curl、wget等命令进行出网探测。下面以不同类型操作系统自带的命令为案例,来进行探测http/https出网探测。

1.Windows系统探测HTTP/HTTPS出网

(1) Bitsadmin 命令

Bitsadmin命令在Windows操作系统是用于创建、下载或上传作业,并监视作业进度的命令行工具。可通过该命令行工具测试能否从网站下载文件,以此来检测http或https是否出网,下面我们以百度官网的robots.txt为例进行演示,使用Bitsadmin命令下载百度官网目录下的robots.txt文件,并保存到本地C盘下的robots.txt中。

执行bitsadmin /rawreturn /transfer down "https://www.baidu.com/robots.txt" c:robots.txt"命令,此时已成功下载robots.txt文件到C盘目录下。然后通过"type C:robots.txt "命令读取查看,验证其存在,如若正常则证明探测出网成功,如图1-11所示。

图1-11 Bitsadmin命令探测出网成功图1-11 Bitsadmin命令探测出网成功

(2)Certuil 命令

Certuil命令是windows操作系统中的一款下载文件的命令行工具,可作为证书服务的安装,用来转储和显示证书颁发机构 (CA) 配置信息,配置证书服务,备份和还原CA组件,以及验证证书、密钥对和证书链。

下面我们还是以百度网站下的的robots.txt文件为案例,使用Certuil命令执行certutil -urlcache -split -f https://www.baidu.com/robots.txt c:robots.txt"将百度网站下的robots.txt文件保存到本地C盘目录下,通过验证发现robots.txt文件存在,则证明http/https协议出网,如图1-12所示。

图1-12 certuil命令探测出网成功图1-12 certuil命令探测出网成功

2.Linux系统探测HTTP/HTTPS出网

(1)Curl命令

Curl是Linux自带的命令行工具,用于传输来自服务器或者到服务器的数据,可支持的协议有很多,Curl测试出网时使用命令很简单,只需要curl验证的url即可。

以百度网站为案例,执行curl http://www.baidu.com"命令成功,显示下述HTML前端代码,证明http/https协议出网,如图1-13所示。

图1-13 curl命令探测出网成功图1-13 curl命令探测出网成功

(2)Wget命令

Wget是Linux下一款命令行下载工具,支持http和ftp协议,支持多种下载模式,一般用于批量下载文件。

在Linux中使用Wget探测出网,使用方法同前文演示一样,使用wget工具执行wget http://www.baidu.com/robots.txt命令下载百度根目录的robots.txt文件,探测协议出网成功,如图1-14所示。

图1-14 wget命令探测出网成功图1-14 wget命令探测出网成功

三. ICMP协议探测出网

ICMP(Internet Control Message Protocol)是一种面向无连接的协议,属于网络层的协议,用于检测网络通信故障和实现链路追踪。当我们需要判断探测ICMP协议是否出网时,可通过Ping和Tracert命令进行探测,下面以这两个命令为案例进行演示。

1.Windows系统探测ICMP协议出网

(1)Ping命令

Ping命令想必是大家最熟悉的命令了,Ping命令经常用于测试网络连通性,由于该命令是基于ICMP协议来实现的,因此Ping是ICMP出网测试中最常用的命令,执行ping baidu.com,可以看到如图1-15所示的返回信息,即证明ICMP协议出网探测成功。

图1-15 Ping 命令探测出网成功图1-15 Ping 命令探测出网成功

(2)Tracert 命令

Tracert命令是Windows中用来跟踪路由的命令,它依靠ICMP协议实现,在ICMP出网测试中只需要使用Tracert命令跟踪下目标地址即可,以百度为案例,执行tracert baidu.com命令,获得如图1-16所示的返回信息,即证明出网成功。

图1-16 Tracert命令探测出网成功图1-16 Tracert命令探测出网成功

2.Linux系统探测ICMP协议出网

在Linux系统中探测ICMP协议出网通常可以使用ping命令,同上述Windows系统操作实验类似,但linux系统需要使用-c来指定次数,Windows系统下ping 命令执行第4次后会自动停止,linux系统则不会自动停止。执行ping -c 4 baidu.com命令,通过图1-17所示的结果证明探测出网成功。

图1-17 Ping命令探测出网成功图1-17 Ping命令探测出网成功

四.DNS协议探测出网

DNS(Domain Name System)即域名解析系统,可将域名解析到对应访问IP。下面我们还是以系统自带命令为案例,进行演示DNS协议探测出网。

1.Windows系统探测DNS协议出网

在Windows系统中测试DNS协议出网可使用Nslookup命令。这是一种网络管理命令行工具,可以用来查询DNS域名和IP解析。nslookup有两种工作模式,交互式和非交互式,这里使用非交互式即可。执行nslookup baidu.com"命令,返回响应结果,证明出网成功,如图1-18所示。

图1-18 Nslookup命令探测出网图1-18 Nslookup命令探测出网

2.Linux系统探测DNS协议出网

(1)Dig命令

Dig命令在Linux操作系统中用于询问DNS,域名服务器的查询工具可以查询DNS协议下的NS记录、A记录、MX记录相关信息。执行dig @8.8.8.8 www.baidu.com命令,这里指定DNS服务器,8.8.8.8是Google的DNS服务器。返回响应结果,证明出网成功,如图1-19所示。

图1-19 Dig命令探测出网成功图1-19 Dig命令探测出网成功

(2)Nslookup命令

Linux系统中同样也可以使用nslookup命令对系统进行DNS协议探测出网。方法同Windows系统一样,执行nslookup baidu.com命令,执行后通过返回的响应结果证明出网成功,如图1-20所示。

图1-20 nslookup命令探测出网成功图1-20 nslookup命令探测出网成功

五.本篇总结

随着隧道技术的不断更新迭代,越来越多的攻击者利用隧道技术攻击企业内网,通过本篇文章从多维度分析隧道隐蔽技术的划分及对隧道技术整体来讲解,其中包含基础知识概括和相关隧道工具的利用方式及隧道隐蔽技术的检测防护方法,并且通过大量的案例来演示了多个实际常见的隧道场景,比如我们通过拿到系统权限后利用多个协议实现隧道穿透、端口转发、内网穿透,总之,希望本篇内容对读者有所帮助。


我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞