端口扫描
一、常用端口
有一些服务使用固定的端口号,比如如下的:
二、端口扫描工具
常见的端口扫描工具有nmap,nmap,Metasploit。nmap更慢更全面,zmap则更快更粗略,Metasploit提供多种扫描。
为什么zmap扫描更快一些,关键性的问题出现在对回复的SYN-ACK进行seq number的校验。传统上就需要记录状态。而ZMap是将对方receiver ip地址进行hash,将其处理保存到了sender port和seq number两个字段中,当SYN-ACK回来的时候,就可以根据sender ip、receiver port、ack number这些字段进行校验。因此避免了状态存储,接近了网络带宽极限。
nmap使用
默认使用SYN方式扫描
扫描单个主机或IP地址
扫描多个IP或子网
扫描IP地址范围:
扫描IP地址范围,使用通配符:
扫描整个子网:
使用-iL允许nmap从文件中读取主机/IP,在扫描很多主机时很有用。创建一个文件文件,如下:
扫描文件中的主机:
1
|
$nmap-iL host.list
|
三、端口扫描种类
3.1 ICMP扫描
ICMP报文格式如下;
- ICMP时间戳请求报文,可以向其他机器请求时间
- ICMP地址掩码请求报文,用于无盘机请求掩码
- ICMP端口不可达报文,如果收到一份UDP数据报而目的端口与正在使用的端口不符合,则UDP返回一个端口不可达报文
- ICMP回显请求报文,ping使用的就是这个,也是最常用的
- 异常IP包,比如伪造IP包的头部长度和IP选项,则会返回ICMP parameter problem error,不同系统和路由器的返回不同,可用于检测OS或网络
- 超长包,但设置禁止分片,则会收到差错报文
- 对于目标主机在防火墙内部,则可以构造可能的IP地址列表,逐个发送数据包。对不在其服务范围内的则对方路由器会返回ICMP Host Unreachable或ICMP Time Exceeded,没有收到则被认为IP地址在网络中
3.2 TCP扫描
TCP扫描速度慢,且容易留下审计数据,TCP扫描主要有以下几种实现,
- 直接建立TCP连接
- SYN扫描,如果发送SYN包的时候,返回RST包,则表示端口不开
- ACK扫描,不管端口是否打开,都会返回RST,所以不能测试端口是否打开,但是可以用来测试防火墙的策略,时有状态还是无状态,那些端口时被过滤的
- FIN扫描,如果端口关闭,则收到RST,如果端口打开,则无回复,如果收到ICMP差错报文,则端口状态未知
- NULL扫描,发送没有任何位的TCP包,如果没有回复,则端口打开,如果有RST包则表示端口关闭
- x-mas扫描发送一个URG、FIN、PUSH位全部打开的包,同样时没有意义的数据包,结果同NULL
3.3 UDP扫描
一般是构造空的UDP包,如果返回ICMP端口不可达,则表示端口时关闭的,如果没有反应,则表示端口可能时开放的
3.4 空闲扫描
在IP头中,有一个16位的标识,表示IP的ID,标识(identification)的用途是让目标主机确定一个新到达的分段是哪一个数据流的。同一个数据流所有包都是一个相同的标识。他是可以预测的,增量是固定的(是每次侦听到一个包就增加1吗?)。
首先找一个空闲机器,不发出或接受任何流量。先和它通信,获得IP的ID增长值,然后假冒空闲机器,想目的机器发出SYN包,则有以下两种情况:
- 端口打开,则目的机器回复SYN/ACK,然后空闲机器回复RST包
- 端口关闭,目的主机就不回复SYN/ACK,空闲机器也不回复RST包
最后检测空闲机器的IP的ID值,如果增长1,则表示后一种情况,增长2表示第一种情况。
3.5 隐秘扫描
不容易留下扫描信息,包括了FIN扫描、XMAS扫描、NULL扫描、UDP扫描等。
四、端口扫描的实现
原生套接字可以实现。