1. 空闲扫描
前两篇文章已经介绍了Nmap命令的一些基本选项和若干类型的扫描,下面继续来介绍Nmap的一个扫描类型——空闲扫描。
为了降低被检测到的机率,我们通常需要转嫁责任,这时可以使用空闲扫描(idle scan),让一个僵尸主机承担扫描任务。
nmap.org官网上详细讲述了空闲扫描的原理,可以在http://nmap.org/book/idlescan.html了解空闲扫描的所有信息。
使用空闲扫描(-sI)需要注意一个问题,就是要找一台TCP序列预测成功率高的僵尸主机,这个僵尸主机必须尽可能的空闲,比如说网络打印机就是一个很好地选择,因为网络打印机不仅存在着恒定的网络资源,而且很难预测它们的TCP序列。
空闲扫描的原理:
- 向僵尸主机放松SYN/ACK数据包,获得带有分片ID(IPID)的RST报文。
- 发送使用僵尸主机IP地址的伪数据包给目标主机。
- 如果目标主机端口关闭,就会向僵尸主机响应RST报文。如果目标端口开放,目标主机向僵尸主机响应SYN/ACK报文,僵尸主机发现这个非法连接响应,并向目标主机发送RST报文,此时IPID号开始增长。
- 通过向僵尸主机发送另一个SYN/ACK报文已退出上述循环并检查将是主机RST报文中的IPID是否每次增长2,同时目标主机的RST每次增长1。
- 重复上述步骤直到检测完所有的端口。
2. 寻找僵尸主机
空闲扫描的第一步就是寻找僵尸主机,我们可以通过下面这条命令(-v 详细信息,-O 系统检测,-Pn 无ping,-n 无域名解析)来获得主机的TCP序列预测率。
# nmap -v -O -Pn -n 192.168.50.16
从结果上看,这个主机不是太理想,网络距离只有一跳(自己搭建的环境,试验用足够了),但作为一个僵尸主机还是可以的。预测难度越高,一台主机用作僵尸主机的可能性就越小。我们还可以连续生成ID来增加扫描成功的概率。
3. idle扫描应用
使用以下命令扫描,并启动wireshark抓包。
- 1
- 1
使用-p启动已知TCP端口的扫描,节省时间;通过-Pn强调不适用ping(默认是使用的),-sI启动空闲扫描,后面依次是僵尸主机和目标主机的ip地址。
查看wireshark抓包情况,可以看到从僵尸主机到目标主机之间有一些异常的网络流量。
从结果上看,Nmap命令在僵尸主机和目标主机网络上产生了很多流量,我们需要这些流量来增加IPID的值,从而获知目标主机端口是否开放。