nmap简单扫描模式的流量分析

综述

nmap 支持很多扫描技术,例如:UDP、TCP connect()、TCP
SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。

现在对一些常用nmap 命令进行无干扰情况下的分析,并对靶机系统日志进行一个分析。

总结

nmap的默认扫描

攻击方(kali)IP地址:192.168.153.128

靶机(centos)IP地址:192.168.153.100

防火墙状态:关闭

使用命令 : nmap 192.168.153.100 进行默认的主机扫描。

在攻击方系统(kali)的流量分析:

攻击方电脑流量分析01


攻击方电脑流量分析02

nmap 扫描结果:

扫描结果


发现靶机的 22 、111 、端口是开启的。

添加过滤条件:ip.dst == 192.168.153.100 or 192.168.153.128

流量特点:

  1. 可以看到这个命令对65535个端口中 2000 多个常见的端口进行了枚举扫描。

  2. 发包的大小 共有两种 以中国 60个字节 或者是 58 个字节。

  3. 这个命令kali 这边使用的相同的端口(60973)完成了对这2000 多个端口的扫描。

  4. 使用的协议的是tcp协议。

  5. nmap 直接接IP地址爆破,这个IP地址开启的端口,采用的tcp 协议。他属于tcp syn扫描

  6. 这里分析到这个默认的扫描还是一个tcp 的 syn的半连接的扫描模式。

    添加过滤条件:ip.dst == 192.168.153.100 or 192.168.153.128 and tcp.port == 22

    tcp的syn半连接

    源端口(kali):60973 目标端口(靶机):22

    nmap在对22 这个端口进行测试时,先发送了一个syn请求包,请求建立连接。

    具体syn包分析:

    标志位情况:

    然后,看到后面第245个数据包是靶机的22 端口对kali发送syn请求包的ack 确认回复包。这是tcp 三次握手的二步。

    最后nmap 的这个默认扫描方式是tcp syn的半连接扫面方式。所以这里在tcp 的最后一步kali是不会与靶机建立起连接的所以最后发送了一个RST,和靶机断开了连接。

    经过了上面的3个发包的过程kali 这边的nmap 程序,可以确认这个22端口是开启的了。

    相同的可以 111端口也是这种情况:(如图蓝色框中的3个包)

  7. 这种扫描方式。靶机的某个端口未打开的情况:

    kali发送一个syn请求包。

    靶机直接回复一个RST 包,断开连接。

    这种情况下可以nmap 程序可以判断这个端口是为关闭的

  8. 当靶机这边开启了防火墙的情况:

    靶机防火墙策略:

    nmap扫描结果:

    扫描结果

    22 端口在防火墙上是有放行的策略的

    当你nmap 进行端口扫描时,靶机的防火墙直接把未写规则放行的端口的数据包给丢弃。没有给任何的回包。

靶机日志分析

​ 通过对目标靶机的一些常见日志的分析:

​ nmap 的半连接对系统端口的扫描一般不会记录。

​ 所以这中扫描的方式比较隐蔽。

​ 在日志上找不到相关的痕迹,我们可以通过相关的流量分析工具,发现与服务器连接上的异常,

​ 以此发现我们的服务器可能遭到了扫描。

​ 当开启防火墙,使用 watch -d -n1 cat /var/log/iptables.log 动态的查看防火墙的日志,依旧在系

​ 统上没有发现扫描的迹象。

​ 如果用linux 连接管理工具iftop : 可以看到在一定时间内,网卡内的这两个IP的流量突然异常地

​ 大增:

nmap 的半连接扫描

情况基本同 nmap 的默认扫描

命令:nmap -sS + ip地址

nmap 的全连接扫描

攻击方(kali)IP地址:192.168.153.128

靶机(centos)IP地址:192.168.153.100

防火墙状态:关闭

使用命令: nmap -sT 192.168.153.100

nmap扫描结果如下:

wireshark 扫描结果

添加过滤条件:ip.dst == 192.168.153.100 or 192.168.153.128

在攻击方系统(kali)的流量分析:

流量特点

  1. 和nmap 的默认扫描的半连接扫描同样的,你在不指定端口的情况下,他自己会对在65535 个端口中挑选出了近1000多个常见的端口,进行枚举扫描。

  2. nmap 发包的大小在 60 个字节和 80 个字节之间。

  3. 和tcp的半连接不同的是:tcp进行全连接会比半连接耗时更多。所以它采用用不同的端口对目标靶机的不同的端口进行扫描,这样就提高了效率。

  4. 根据扫描的结果,发现nmap -sT + ip地址对 目标进行端口枚举时,利用的tcp完整的3次握手,来判断目标端口是否是开启的。

    拿80端口来举例:

    添加过滤条件:ip.dst == 192.168.153.100 or ip.dst == 192.168.153.128 and tcp.port == 80

    从上图可以看出,这种类型的扫描,完成了tcp 三次握手的连接

    最后又kali 发送一个 RST 的连接重置的请求包断开了连接,经过这样一个过程,nmap这边判断80端口是开启的。

    同样的其他两个扫描出来的端口 22 和111 也是这个原理。

  5. 如果这个端口没开,则和tcp的半连接的原理一样,靶机这边直接回复RST拒绝连接。nmap 这边就认为这个端口是关闭的。

  6. 在防火墙开启的情况下:

    目标靶机的防火墙:把端口都给屏蔽了。将kali nmap 扫描的请求包都给丢弃了,kali 这边收不到任何数据包的回应。

    并且kali这边会发送很多请求重传的数据包。

靶机日志分析

​ nmap的全连接扫描建立起了一个完整的tcp ,并且通过kali这边通过发送 [RST] 数据包,来断开

​ 一个正常的连接,这非常占用网络带宽,并且在一些应用的日志上会有记录。

​ 在iftop流量分析中,可以看到突然一股异常的流量激增:

​ 上图的黑条代表的是从192.168.153.128 => 192.168.153.100 的流量,远远比自己回包的流量

​ 大。说明服务器可能正在经历扫描。

nmap 的反向扫描

反向扫描原理

是将一个没有设置任何标志位的数据包发送给TCP端口,在正常的通信中至少要设置一个标志位。

根据FRC 793的要求,在端口关闭的情况下,若收到一个没有设置标志位的数据字段,那么主机应该舍弃这个分段,并发送一个RST数据包,否则不会响应发起扫描的客户端计算机。

也就是说,如果TCP端口处于关闭则响应一个RST数据包,若处于开放则无相应。但是应该知道理由NULL扫描要求所有的主机都符合RFC 793规定,但是windows系统主机不遵从RFC 793标准,且只要收到没有设置任何标志位的数据包时,不管端口是处于开放还是关闭都响应一个RST数据包。但是基于Unix(nix,如Linux)遵从RFC 793标准,所以可以用NULL扫描。 经过上面的分析,我们知道NULL可以辨别某台主机运行的操作系统是什么操作系统,是为windows呢?还是nix?

攻击方(kali)IP地址:192.168.153.128

靶机(centos)IP地址:192.168.153.100

防火墙状态:关闭

使用命令: nmap -sN 192.168.153.100 -p 1-200

在攻击方系统(kali)的流量分析:

nmap扫描结果如下:

wireshark 流量

添加过滤条件:ip.dst == 192.168.153.100 or ip.dst == 192.168.153.128

流量特点

  1. 在这块网卡上发现大量的none 的数据包

  2. 数据包的大小在 50 - 60 之间。

  3. nmap 的空扫描发送的扫描包里面的标志位都是 0

  4. 对于开放的端口,靶机是没有任何的数据回应的。

    例如:这里扫描到开放的端口:80

    filter:ip.dst == 192.168.153.128 ip.dst == 192.168.153.100 and tcp.port == 80

    因为了这样的扫描方式是不太准确的,所以nmap这里一共发送了三个探测包,以求提高它的准确性。

  5. 对于关闭的端口。根据RFC 793 标准,关闭的端口收到一个没有标志位的分段,会舍弃这个分段,并回应一个RST 包。

    例如:139 端口

    53端口

  6. 由于没有包含TCP 3次握手协议的任何部分,所以无法被记录下来,比半连接扫描更为隐蔽。能够躲避IDS、防火墙、包过滤器和日志审计系统。

  7. 缺点是这种扫描的不准确。

  8. 当靶机的防火墙开启的情况下:

    防火墙的策略如下:

    nmap扫描结果

    可以看到上图中,由于有防火墙的存在,nmap 的icmp 探测包全被防火墙挡住了。

    由防火墙的规则可以看到,我们并没有写 80 端口的放行策略。但用这种扫描检测到了 80 端口的开放。说明确实有绕过防火墙的作用。

    当时他的不准确性也确实体现出来了。原本开放的 111 端口没有检测出来。没有开放的端口 139,148 ,159 则被认为是开放的。

靶机日志分析

​ 因为这中扫描连一个完整的tcp连接都没有建立。传输的数据是传输层的数据,日志系统不会记录

​ 传输层的数据。所以在日志系统中难以检测到被这种扫描的痕迹。

nmap 的FIN扫描

FIN 原理:

与NULL有点类似,只是FIN为指示TCP会话结束,在FIN扫描中一个设置了FIN位的数据包被发送后,若响应RST数据包,则表示端口关闭,没有响应则表示开放。此类扫描同样不能准确判断windows系统上端口开发情况。

攻击方(kali)IP地址:192.168.153.128

靶机(centos)IP地址:192.168.153.100

防火墙状态:关闭

使用命令: nmap -sF 192.168.153.100 -p 1-200

在攻击方系统(kali)的流量分析:

nmap扫描结果如下:

wireshark 流量如下:

流量特点:

  1. 这中扫描有两种数据包。一种是kali 发送的fin 数据包,数据报的大小是 54 个字节。另一个是目标靶机的RST 包,包的大小是60个字节。

  2. 这种扫描发送的fin包

  3. 端口开启的情况:例如 22 端口。

    nmap 发送一个 FIN 探测包,如果没有收到任何的回应,则判断这个端口是开放的。

  4. 端口关闭的情况:

    可以看到上图,如果端口是关闭的,对于一个FIN标志位为1的数据包,他会回应一个RST 的数据包。nmap 以此来判断这个端口是关闭的。

  5. 这中探测的方法和空扫描同样具有误差,不准确。如果在一定时间内没有得到回应,他会继续发送FIN 探测包,所以一共会发送4个探测包,以提升准确度。

  6. 防火墙开启的情况:

    在有防火墙的情况下判断是错误的。

    防火墙把端口都给屏蔽了。对于你发送的FIN数据包都不予与任何的回应。

靶机日志分析

​ 因为这中扫描连一个完整的tcp连接都没有建立。传输的数据是传输层的数据,日志系统不会记录

​ 传输层的数据。所以在日志系统中难以检测到被这种扫描的痕迹。

nmap 的Xmas-Tree扫描

扫描原理:

XMAS扫描原理和NULL扫描的类似,将TCP数据包中的ACK、FIN、RST、SYN、URG、PSH标志位置1后发送给目标主机。在目标端口开放的情况下,目标主机将不返回任何信息,反之端口看法国

攻击方(kali)IP地址:192.168.153.128

靶机(centos)IP地址:192.168.153.100

防火墙状态:关闭

使用命令: nmap -sX 192.168.153.100 -p 1-200

在攻击方系统(kali)的流量分析:

nmap 扫描结果:

wireshark 扫描结果:

过滤条件:ip.dst == 192.168.153.128 or ip.dst == 192.168.153.100

流量特点

  1. nmap 通过发送 [FIN,PSH,URG]包,来判断扫描的端口是否是开放的。

  2. 发送的数据包的大小在 50 - 60 个字节之内。

  3. 在防火墙关闭的情况下。如果端口开放,如果收到[FIN,PSH,RRG] 的数据包。它不会做出任何的回应。

    例如:22 端口

    nmap 发送了3次 [FIN,PSH,URG] 包,但是没有收到目标靶机的任何回包。

  4. 在防火墙开启的情况下,如果端口关闭,如果收到[FIN,PSH,RRG] 的数据包。它回应一个RST 的数据包。

    例如:139端口:

  5. 在防火墙开启的情况下:

    防火墙把端口都给屏蔽了。对于你发送的[FIN,PSH,URG]数据包都不予与任何的回应。

靶机日志分析

​ 因为这中扫描连一个完整的tcp连接都没有建立。传输的数据是传输层的数据,日志系统不会记录

​ 传输层的数据。所以在日志系统中难以检测到被这种扫描的痕迹。