微信公众号:计算机与网络安全
ID:Computer-network
如要向目标主机发送数据包,首先需要确保目标主机是启用的。ICMP协议可以用来探测主机,以判断主机是否启用。本文介绍如何进行探测主机。
1、使用ping命令
ping命令就是借助ICMP传输协议,发出要求回应的Echo(ping)request消息。若远端主机的网络功能没有问题,就会回应Echo(ping)reply信息,因而得知该主机运作正常。因此用户可以通过ping命令来判断目标主机是否启用。
判断目标主机192.168.59.135是否启用。
1)使用ping命令探测目标主机,执行命令如下:
root@daxueba:~# ping 192.168.59.135
输出信息如下:
PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=1 ttl=64 time=0.683 ms
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=2.10 ms
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.291 ms
64 bytes from 192.168.59.135: icmp_seq=4 ttl=64 time=0.283 ms
64 bytes from 192.168.59.135: icmp_seq=5 ttl=64 time=0.339 ms
上述输出信息表示,成功向目标主机发送了ping请求并得到了响应时间,这表示目标主机已启用。如果目标主机未启用将显示以下信息:
PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
From 192.168.59.132 icmp_seq=1 Destination Host Unreachable
From 192.168.59.132 icmp_seq=2 Destination Host Unreachable
From 192.168.59.132 icmp_seq=3 Destination Host Unreachable
From 192.168.59.132 icmp_seq=4 Destination Host Unreachable
From 192.168.59.132 icmp_seq=5 Destination Host Unreachable
2)通过Wireshark捕获数据包,验证ping命令所产生的ICMP数据包,如图1所示。图中第10~25个数据包都为ICMP数据包。从图中还可以看到ping命令发出的ICMP请求Echo(ping)request与ICMP响应Echo(ping)reply。
图1 ICMP数据包
2、构造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
2)为了验证以上构造的ICMP数据包,使用Wireshark工具进行捕获数据包,如图2所示。其中,第1个数据包的源IP地址为192.168.59.132,目标IP地址为192.168.59.135,Info显示这是一个ICMP请求包。在Internet Control Message Protocol部分中,Type的值为8,Code的值为0,表示该数据包为正常的ICMP请求包。
图2 ICMP请求包
3)查看第2个数据包,如图3所示。该数据包的源IP地址为192.168.59.135,目标IP地址为192.168.59.132,这是第1个数据包的响应包。在Internet Control Message Protocol部分中,Type的值为0,Code的值为0,表示该数据包为正常的ICMP响应包。
图3 ICMP响应包
3、伪造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
2)验证伪造的ICMP数据包扫描,捕获数据包进行查看,如图4所示。其中,第4个数据包的源IP地址为192.168.59.140(伪造的),目标地址为192.168.59.135(目标主机),该数据包为伪造的ICMP请求包。在Ethernet II部分的Source中可以看到MAC地址为00:0c:29:ca:e4:99,也是伪造的。
图4 伪造的ICMP数据包
3)选择第7个数据包,查看信息,如图5所示。从该数据包可以看到源IP地址为192.168.59.135,目标IP地址为192.168.59.140(伪造的),目标MAC地址为00:0c:29:ca:e4:99(伪造的)。这说明目标主机给伪造的主机返回了ICMP响应。
图5 伪造的ICMP响应包
4、构造连续的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,表示目标主机已启用。如果目标主机未启用,将不会有任何输出信息。
2)通过捕获数据包,验证该模块发送的ICMP请求。捕获到的数据包如图6所示。图中捕获到了大量的ICMP数据包,其中,第10、12、14、16、18个数据包为构造的ICMP请求包,第11、13、15、17、19个数据包为得到的ICMP响应包。
图6 捕获持续的ICMP数据包
5、伪造连续的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
… #省略其他信息
2)通过捕获数据包,验证发送的ICMP伪造包,捕获的数据包如图7所示。图中捕获到了大量的ICMP请求包,并且都得到了响应。在这些数据包中可以看到成功伪造的IP地址和MAC地址,而不是真正实施主机的地址。
图7 大量的伪造ICMP数据包
6、伪造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数据包。
2)伪造源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。
3)通过捕获数据包,验证伪造的ICMP请求包是否被发送,如图8所示。图中第4个数据包为伪造的数据包,源IP地址为伪造的地址192.168.59.160,而不是本地IP地址。Ech0(ping)reply表示该数据包为ICMP请求数据包。
图8 伪造IP地址的ICMP数据包
7、伪造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。
2)伪造源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的值保留原来的值。
3)为了验证构建的ICMP数据包,可以捕获数据包查看,如图9所示。从第6个数据包的Ethernet II部分可以看到,Source的值为11:22:33:aa:bb:cc,是伪造的MAC地址。在Internet Control Message Protocol部分中,Type值为8,Code值为0,表示该数据包为ICMP请求包。
图9 查看伪造MAC地址的ICMP请求包
4)选择第7个数据包进行查看,如图10所示。从该数据包的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响应包。
图10 ICMP响应包
微信公众号:计算机与网络安全
ID:Computer-network