0x00 引言
主机存活检测包含IP存活检测和端口扫描,前者不关注某个端口的开放状态。
端口扫描是指向目标机器发送一组连接端口的数据包,根据目标机器返回结果判断该机器的指定端口是否开放。端口扫描是黑客入侵前获取目标机器的重要手段。
0x01 网络连接过程
UDP协议和TCP协议都是传输层的协议,TCP协议提供可靠的通信传输,而UDP则是常常被用于让广播和细节控制的交给应用的通信传输。
1 | 1 TCP连接过程 |
1、TCP连接过程
TCP协议在连接过程中要完成经典的三次握手、四次挥手,其具体过程如下图:
2、TCP连接过程
UDP协议为单向传播,接收端接收到来自发送端的数据包之后,不会做反馈:
0x02 数据包构成
1 | 1 TCP网络数据包构成 |
1、TCP网络数据包构成
一个完整的TCP网络数据包通常是由Ethernet封包、IP封包与TCP封包组成。
URG:紧急指针有效位。
ACK:当ACK=1时,确认序列号字段有效。ACK=0时,确认序列无效。
PSH:标志位为1时要求接受方尽快将数据送达应用层。
PST:当PST值为1时通知重新建立TCP连接。
SYN:同步序号位,TCP需要建立连接时将这个值设为1。
FIN:当FIN值为1时,表示请求断开连接。
2、UDP网络数据包构成
一个完整的UDP网络数据包通常是由Ethernet封包、IP封包与UDP封包组成。
3、DNS网络数据包构成
DNS网络数据包是在UDP网络数据包基础上实现的,其不同的位置在于data部分,data部分的字段如下:
注意1: 在解析IP网络数据包的时候要注意’报头长度4位’字段,该字段表示’选项(可选)32位’字段的实际长度(最多能表示15个32bit的的字,即4*15=60个字节的首部长度)。
注意2: 当’选项(可选)32位’字段长度为0时,UDP(DNS)网络数据包除去data部分的数据封包总长度为42字节。
0x03 主机探测
主机探测是指向目标主机或目标主机的指定端口发送探测数据包,并记录目标主机的响应。
1 | 1 ICMP |
1、ICMP
ping是在ICMP协议基础上实现的。
0x04 端口扫描
通过端口扫描,可以得到很多有用的信息,从而发现系统的安全漏洞。它是系统用户了解系统目前向外界提供了哪些服务,从而为系统用户管理网络提供了一种手段。
端口扫描根据使用的协议可以分为TCP扫描与UDP扫描,前者更为常用且方法多样。TCP扫描又包括SYN扫描、全连接扫描、ACK扫描,以及行为更为隐蔽的FIN扫描、NULL扫描与XMAS扫描,其主要不同点为发送数据包的标志置位不同(可以查看TCP网络数据包构成章节关于标志位的具体描述)。
协议 | 端口扫描类型 | 标志位 | 优点 | 缺点 |
---|---|---|---|---|
TCP - 非隐蔽 | SYN扫描 | SYN | 不用实现完成三次握手,扫描速度快 | 扫描行为容易被发现、可能丢包 |
TCP全连接扫描 | - | 稳定可靠,端口状态的判定结果准确 | 扫描行为明显,失败请求和错误信息暴露在日志中,攻击成功后容易被溯源 | |
ACK扫描 | ACK | 可以辅助SYN的方式来判断目标主机防火墙的状况 | 只能用于判断防火墙是否屏蔽,扫描行为容易被发现 | |
TCP - 隐蔽 | FIN扫描 | FIN | 扫描隐蔽 | 需等待超时,扫描时间长,可能丢包。windows不支持 |
NULL扫描 | 全部置为0 | 同上 | 同上 | |
XMAS扫描 | FIN URG PSH | 同上 | 同上 | |
UDP | UDP扫描 | - | 跨平台 | 速度相对于TCP的FIN,SYN扫描要慢一些、可能丢包 |
1 | 1 TCP端口扫描 |
1、TCP端口扫描
1.1、非隐蔽性扫描
SYN扫描: 该方式发送只有SYN标志的包到目标端口
- 如果收到SYN/ACK回复,那么判断该端口是开放的
- 如果收到RST包,那么判断该端口是关闭
- 如果没收到回复,那么判断该端口是被屏蔽
TCP全连接扫描: 实现TCP三次握手,实现的方法通常使使用操作系统提供的connect函数
- 如果无法连接,说明该端口关闭
ACK扫描: 向目标主机的端口发送只有ACK标志的包
- 如果收到RST包,说明该端口没有被防火墙屏蔽
- 没有收到RST包,说明被屏蔽
1.2 隐蔽性扫描
- FIN扫描: 向目标主机的端口发送只有FIN标志的包
- NULL扫描: 向目标主机的端口发送没有标志位的包
- XMAS扫描: 向目标主机的端口发送具有FIN、URG与PSH标志的包
- 如果收到对方RST回复包,那么说明该端口是关闭的
- 没有收到RST包说明端口可能是开放的或被屏蔽的
2、UDP端口扫描
- UDP扫描: 向目标主机的UDP端口发送探测包
- 如果收到回复“ICMP port unreachable”就说明该端口是关闭的
- 如果没有收到回复,那说明UDP端口可能是开放的或屏蔽的
0x05 端口扫描工具 - Nmap
以nmap7.91版本为例,进行深入的使用分析。
1 | # 主机发现 - 同网段 |
通常情况下,靶机会开防火墙,新建一些规则,导致基于单一的模式可能会漏报主机。例如windows 防火墙默认禁止ping,然而针对其 RPC/SMB/RDP 的连接却可以通过防火墙,此时就可以通过。部分iptable规则会过滤部分端口的SYN 探测包,但是不会过滤UDP或者是ACK的包。
因此在真实环境下使用Nmap时,需要混合多种探测方式,下面就例举一些常用的混合探测命令。
1 | $ ./nmap 192.168.182.0-192.168.182.255 -O -p U:137,161,T:22,23,25,139,389,445,2181,3268,3389 -sS -sU --script=telnet-ntlm-info,nbns-interfaces,nbstat,smb-os-discovery,rdp-ntlm-info -oX '输出文件路径' |
0x06 端口扫描防护
0x07 引用文献
[1]https://www.jianshu.com/p/5b5d42eaf8a3
[2]https://www.jianshu.com/p/90abebfe0014
[3]port scan detect