【1.6.3】构造ICMP数据包

一、构造ICMP数据包

ICMP 协议可以用来对目标主机发送 ICMP 数据包,判断目标主机是否启用。

正常情况下,ICMP 请求包报文中的类型值为 8,代码值为 0;ICMP 响应包报文中的类型值为 0,代码值为 0。

用户可以使用 netwox 工具的编号 65 的模块构造 ICMP 数据包,并对目标主机进行扫描。

【实例】在主机 192.168.59.132 上,构造 ICMP 数据包,判断目标主机 192.168.59.135 是否启用。

  1. 构造 ICMP 扫描,执行命令如下:

    root@daxueba:~# netwox 65 -i 192.168.59.135

输出信息如下:

192.168.59.135 : reached

在输出信息中,reached 表示目标主机可达。这说明目标主机是启用状态。

如果目标主机没有启用,则显示如下信息,其中,unreached 表示不可达。

192.168.59.139 : unreached
  1. 为了验证以上构造的 ICMP 数据包,使用 Wireshark 工具进行捕获数据包,如图所示。

其中,第 1 个数据包的源 IP 地址为 192.168.59.132,目标 IP 地址为 192.168.59.135,Info 显示这是一个 ICMP 请求包。

在 Internet Control Message Protocol 部分中,Type 的值为 8,Code 的值为 0,表示该数据包为正常的 ICMP 请求包。

  1. 查看第 2 个数据包,如图所示。

该数据包的源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.132,这是第 1 个数据包的响应包。

在 Internet Control Message Protocol 部分中,Type 的值为 0,Code 的值为 0,表示该数据包为正常的 ICMP 响应包。

二、伪造ICMP数据包

ICMP 扫描,容易被目标主机发现。为了解决这个问题,可以使用 netwox 工具中编号为 66 的模块伪造 ICMP 数据包,如设置假的 IP 地址和 MAC 地址。

【实例】在主机 192.168.59.132 上实施 ICMP 数据包扫描,判断目标主机 192.168.59.135 是否启用。

  1. 伪造 IP 地址为 192.168.59.140,MAC 地址为 00:0c:29:ca:e4:99,执行命令如下:

    root@daxueba:~# netwox 66 -i 192.168.59.135 -E 00:0c:29:ca:e4:99 -I 192.168.59.140

输出信息如下:

192.168.59.135 : reached
  1. 验证伪造的 ICMP 数据包扫描,捕获数据包进行查看,如图所示。

其中,第 4 个数据包的源 IP 地址为 192.168.59.140(伪造的),目标地址为 192.168.59.135(目标主机),该数据包为伪造的 ICMP 请求包。

在 Ethernet II 部分的 Source 中可以看到 MAC 地址为 00:0c:29:ca:e4:99,也是伪造的。

  1. 选择第 7 个数据包,查看信息,如图所示。

从该数据包可以看到源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.140(伪造的),目标 MAC 地址为 00:0c:29:ca:e4:99(伪造的)。这说明目标主机给伪造的主机返回了 ICMP 响应。

三、构造连续的ICMP数据包

在向目标主机发送 ICMP 请求时,如果主机启用,将返回响应信息。为了持续判断目标主机的状态,需要连续发送 ICMP 数据包。netwox 工具提供了编号为 49 的模块,用于持续构造 ICMP 数据包,实时监听目标主机的启用情况。

【实例】构造连续的 ICMP 数据包,对目标主机 192.168.59.135 进行扫描。

  1. 持续向目标主机发送 ICMP 请求,执行命令如下:

    root@daxueba:~# netwox 49 -i 192.168.59.135

输出信息如下:

Ok
Ok
Ok
Ok
…  #省略其他信息

输出信息在持续地显示 Ok,表示目标主机已启用。如果目标主机未启用,将不会有任何输出信息。

  1. 通过捕获数据包,验证该模块发送的 ICMP 请求。捕获到的数据包如图所示。

图中捕获到了大量的 ICMP 数据包,其中,第 10、12、14、16、18 个数据包为构造的 ICMP 请求包,第 11、13、15、17、19 个数据包为得到的 ICMP 响应包。

四、伪造连续的ICMP数据请求包

为了避免被发现,可以使用 netwox 工具中编号为 50 的模块伪造连续的 ICMP 数据请求包。

【实例】伪造连续的 ICMP 数据包,实时判断目标主机 192.168.59.135 的启用情况。

  1. 伪造实施主机的IP地址为 192.168.59.150,MAC 地址为 aa:bb:cc:11:22:33,指定目标主机的 MAC 地址为 00:0c:29:ca:e4:66,目标主机 IP 地址为 192.168.59.135,进行持续扫描。执行命令如下:

    root@daxueba:~# netwox 50 -i 192.168.59.135 -E aa:bb:cc:11:22:33 -I 192.168.59.150 -e 00:0c:29:ca:e4:66

输出信息如下:

Ok
Ok
Ok
Ok
Ok
…  #省略其他信息
  1. 通过捕获数据包,验证发送的 ICMP 伪造包,捕获的数据包如图所示。

图中捕获到了大量的 ICMP 请求包,并且都得到了响应。在这些数据包中可以看到成功伪造的 IP 地址和 MAC 地址,而不是真正实施主机的地址。

五、伪造ICMP数据包的IP层

ICMP 是位于 IP 层上的协议。用户可以使用 netwox 工具中编号为 42 的模块,对 ICMP 数据包的 IP 层信息进行伪造。

【实例】伪造基于 IPv4 的 ICMP 数据包。

  1. 查看基于 IPv4 的 ICMP 数据包的默认值,执行命令如下:

    root@daxueba:~# netwox 41

输出信息如下:

IP______________________________________________________________.
|version|  ihl  |      tos      |            totlen                   |
|___4___|___5___|____0x00=0_____|___________0x001C=28___________      |
|              id                     |r|D|M|       offsetfrag        |
|_________0xD03C=53308__________|0|0|0|________0x0000=0_________      |
|      ttl            |   protocol     |           checksum           |
|____0x00=0_____|____0x01=1_____|____________0xE26B_____________      |
|                            source                                   |
|________________________192.168.59.131_________________________      |
|                          destination                                |
|____________________________5.6.7.8____________________________      |
ICMP4_echo reply________________________________________________.
|     type            |     code        |           checksum          |
|____0x00=0_____|____0x00=0_____|_________0xFFFF=65535__________      |
|              id                     |            seqnum             |
|___________0x0000=0____________|___________0x0000=0____________      |
| data:                                                               |
|_______________________________________________________________      |

输出信息分为两部分,IP 部分表示 IPv4 层信息,ICMP4_echo reply 部分为 ICMP 响应包部分。

这两部分中包含了多个字段信息。例如,IP 部分中 source 的值为 192.168.59.131,表示该 IPv4 数据包源 IP 地址(本地IP地址),destination 的值为 5.6.7.8,表示目标 IP 地址。这里的值均为默认值。用户可以对这些值进行修改,自定义特定的 ICMP 数据包。

  1. 伪造源 IP 地址为 192.168.59.160,执行命令如下: root@daxueba:~# netwox 41 -l 192.168.59.160 -m 192.168.59.135

输出信息如下:

IP______________________________________________________________.
|version|  ihl  |      tos      |            totlen                   |
|___4___|___5___|____0x00=0_____|___________0x001C=28___________      |
|              id                     |r|D|M|       offsetfrag        |
|_________0xDD2B=56619__________|0|0|0|________0x0000=0_________      |
|      ttl      |   protocol    |           checksum                  |
|____0x00=0_____|____0x01=1_____|____________0xE55A_____________      |
|                            source                                   |
|________________________192.168.59.160_________________________      |
|                          destination                                |
|________________________192.168.59.135_________________________      |
ICMP4_echo reply________________________________________________.
|     type      |     code      |           checksum                  |
|____0x00=0_____|____0x00=0_____|_________0xFFFF=65535__________      |
|              id               |            seqnum                   |
|___________0x0000=0____________|___________0x0000=0____________      |
| data:                                                               |
|_______________________________________________________________      |

其中,IP 部分的 source 的值由原来的本地地址 192.168.59.131 变为了 192.168.59.160;destination 的值由默认的 5.6.7.8 变为了 192.168.59.135。

  1. 通过捕获数据包,验证伪造的 ICMP 请求包是否被发送,如图所示。

图中第 4 个数据包为伪造的数据包,源 IP 地址为伪造的地址 192.168.59.160,而不是本地 IP 地址。Ech0(ping)reply 表示该数据包为 ICMP

六、伪造ICMP数据包的Ethernet层

用户不仅可以对 ICMP 数据包的 IPv4 层进行伪造,还可以对 ICMP 数据包的 Ehternet 层进行伪造。这时,需要使用 netwox 工具中编号为 37 的模块。该模块可以伪造 ICMP 数据包的 MAC 地址信息。

【实例】基于主机 192.168.59.131,伪造 ICMP 数据包的 Ethernet 层信息。

  1. 查看 ICMP 包的 Ehternet 默认值,执行命令如下:

    root@daxueba:~# netwox 37

输出信息如下:

Ethernet________________________________________________________.
| 00:0C:29:AA:E0:27->00:08:09:0A:0B:0C type:0x0800                    |
|_______________________________________________________________      |
IP______________________________________________________________.
|version|  ihl  |      tos      |            totlen                   |
|___4___|___5___|____0x00=0_____|___________0x001C=28___________      |
|              id                     |r|D|M|       offsetfrag        |
|__________0x18A0=6304__________|0|0|0|________0x0000=0_________      |
|      ttl      |   protocol    |           checksum                  |
|____0x00=0_____|____0x01=1_____|____________0x9A08_____________      |
|                            source                                   |
|________________________192.168.59.131_________________________      |
|                          destination                                |
|____________________________5.6.7.8____________________________      |
ICMP4_echo reply________________________________________________.
|     type      |     code      |           checksum                  |
|____0x00=0_____|____0x00=0_____|_________0xFFFF=65535__________      |
|              id               |            seqnum                   |
|___________0x0000=0____________|___________0x0000=0____________      |
| data:                                                               |
|_______________________________________________________________      |

在以上输出信息中,第一行 Ethernet 表示 ICMP 数据包是基于以太网的数据包。

默认源 MAC地址为 00:0C:29:AA:E0:27,目标 MAC 地址为 00:08:09:0A:0B:0C。

  1. 伪造源 MAC 地址为 11:22:33:AA:BB:CC,指定目标 IP 地址为 192.168.59.135,MAC 地址为 00:0C:29:CA:E4:66。执行命令如下:

    root@daxueba:~# netwox 37 -a 11:22:33:aa:bb:cc -m 192.168.59.135 -b 00:0c:29:ca:e4:66 -o 8

输出信息如下:

Ethernet________________________________________________________.
| 11:22:33:AA:BB:CC->00:0C:29:CA:E4:66 type:0x0800                    |
|_______________________________________________________________      |
IP______________________________________________________________.
|version|  ihl  |      tos      |            totlen                   |
|___4___|___5___|____0x00=0_____|___________0x001C=28___________      |
|              id                     |r|D|M|       offsetfrag        |
|__________0x246B=9323__________|0|0|0|________0x0000=0________       |
|      ttl      |   protocol    |           checksum                  |
|____0x00=0_____|____0x01=1_____|____________0x9E08_____________      |
|                            source                                   |
|________________________192.168.59.131_________________________      |
|                          destination                                |
|________________________192.168.59.135_________________________      |
ICMP4_echo reply________________________________________________.
|     type      |     code      |           checksum                  |
|____0x00=0_____|____0x00=0_____|_________0xFFFF=65535__________      |
|              id               |            seqnum                   |
|___________0x0000=0____________|___________0x0000=0____________      |
| data:                                                               |
|_______________________________________________________________      |

从 Ethernet 部分可以看到,源 MAC 地址由原来的 00:0C:29:AA:E0:27 变为了 11:22:33:aa:bb:cc;目标 MAC 地址由原来的 00:08:09:0A:0B:0C 变为了 00:0C:29:CA:E4:66;而 IP 部分 Source 的值保留原来的值。

  1. 为了验证构建的 ICMP 数据包,可以捕获数据包查看,如图所示。

从第 6 个数据包的 Ethernet II 部分可以看到,Source 的值为 11:22:33:aa:bb:cc,是伪造的 MAC 地址。

在 Internet Control Message Protocol 部分中,Type 值为 8,Code 值为 0,表示该数据包为 ICMP 请求包。

  1. 选择第7个数据包进行查看,如图所示。

从该数据包的 Ethernet II 部分可以看到,源 MAC 地址为目标主机的 MAC 地址 00:0c:29:ca:e4:66,目标 MAC 地址为实施主机的 MAC 地址 00:0c:29:aa:e0:27。这表示目标主机成功给伪造 MAC 地址的主机进行了回复。

在 Internet Control Message Protocol 部分中,Type 值为 0,Code 值为 0,表示该数据包为 ICMP 响应包。

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn