【1.6.4】伪造ICMP请求包

一、构造ICMP请求包进行路由跟踪

为了实施路由跟踪,也可以使用 netwox 工具提供的编号为 57 的模块,构造 ICMP 请求包进行路由跟踪,查询经过的路由地址。

该工具也是通过设定 TTL 值的方式向目标发送 ICMP 请求,每经过一个路由都会得到相应的 ICMP 响应包,直到目标返回 ICMP 响应。其中,超时消息的 ICMP 数据包的报文中类型值为 11,代码值为 0。

在主机 192.168.12.106 上,构造 ICMP 请求包对目标 125.39.52.26 进行路由跟踪。

  1. 进行路由跟踪,执行命令如下:

    root@kali:~# netwox 57 -i 125.39.52.26

输出信息如下:

1 : 192.168.12.1
2 : 192.168.0.1
3 : 183.185.164.1
4 : 218.26.28.157
5 : 218.26.151.161
6 : 219.158.15.214
8 : 125.39.79.158
14 : 125.39.52.26

输出信息显示了经过的路由IP地址。

  1. 通过 Wireshark 抓包,验证构造的 ICMP 请求包和对应的响应包,如图所示。

其中,第 1 个数据包是向目标主机发送的 ICMP 请求包,第 2 个数据包为经过的第一个路由返回的 ICMP 响应包,是一个超时消息数据包;第 3 个数据包是再次向目标主机发送的 ICMP 请求数据包;第 4 个数据包为经过的第二个路由返回的 ICMP 响应包,同样也是一个超时消息数据包。以此类推,直到成功得到目标 125.39.52.26 返回的 ICMP 响应信息。

  1. 选择任意一个路由返回的 ICMP 数据包,如图所示。

例如,第 15 个数据包是路由 125.39.79.158 返回的响应包。

在 Internet Control Message Protocol 部分中,Type 值为 11,Code 值为 0,表示该数据包为 ICMP 超时消息数据包。

  1. 选择最后一个数据包进行查看,如图所示。

该数据包源 IP 地址为 125.39.52.26(目标的),目标 IP 地址为 192.168.12.106(实施主机的),表示该数据包是目标主机返回构造 ICMP 请求的主机的数据包。

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

使用构造ICMP请求包进行路由跟踪方式时,容易被目标主机发现。为了避免这种情况,用户可以使用 netwox 工具提供的编号为 58 的模块伪造 ICMP 请求包。它可以伪造主机 IP 地址和 MAC 地址。

【实例】在主机 192.168.12.106 上,伪造 ICMP 请求包对目标 125.39.52.26 进行路由跟踪。

  1. 伪造源 IP 地址为 192.168.12.130,MAC 地址为 00:01:02:12:13:14,指定目标 IP 地址为 125.39.52.26,MAC 地址为 ec:17:2f:46:70:ba,执行命令如下:

    root@kali:~# netwox 58 -I 192.168.12.130 -E 00:01:02:12:13:14 -i 125.39.52.26 -e ec:17:2f:46:70:ba

输出信息如下:

1 : 192.168.12.1
2 : 192.168.0.1
3 : 183.185.164.1
4 : 218.26.28.157
5 : 218.26.151.161
6 : 219.158.15.214
8 : 125.39.79.158
14 : 125.39.52.26
  1. 通过 Wireshark 抓包,验证伪造的 ICMP 请求包,如图所示。

其中,第 3~33 个数据包为进行路由跟踪所产生的 ICMP 数据包,并且可以看到经过的路由返回了超时消息 ICMP 数据包。

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

其中,源 IP 地址为伪造的 192.168.12.130,目标地址为 125.39.52.26。在 Ethernet II 部分中,源 MAC 地址为伪造的 00:01:02:12:13:14。

二、发送ICMP时间戳请求

ICMP 时间戳请求允许系统向另一个系统查询当前的时间,但不包含日期,返回的建议值是自午夜零点开始计算的时间(UTC)。

ICMP 时间戳请求与应答报文格式如图所示。

在发送 ICMP 时间戳请求时,请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。

在请求和响应的交互过程中,当 ICMP 报文中的类型值为 13、代码值为 0 时,数据包为 ICMP 时间戳请求数据包;当 ICMP 报文中的类型值为 14,代码值为 0 时,数据包为 ICMP 时间戳应答数据包。

netwox 工具提供编号为 81 的模块,用于构建时间戳请求。

【实例】向目标主机 192.168.59.135 发送 ICMP 时间戳请求,探测数据包传输的时间。

  1. 发送ICMP时间戳请求,执行命令如下:

    root@daxueba:~# netwox 81 -i 192.168.59.135

输出信息如下:

0 0

输出信息表示目标主机可达,如果目标主机不可达,将显示信息如下:

No answer.
  1. 可以通过 Wireshark 进行抓包,验证成功发送了时间戳请求,如图所示。

其中,第 6 个数据包为 ICMP 时间戳请求。

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

Originate timestamp 的值表示数据包发起的起始时间,这里为 0 秒(午夜 0 点 0 秒);Receive timestamp 的值表示接收数据包的时间,这里为 0 秒;Transmit timestamp 的值表示数据包的发送时间,这里为 0 秒。时间为 0 秒,是因为从午夜零点开始计算。

  1. 选择对应的响应包查看信息,如图所示。

其中,第 7 个数据包为 ICMP 时间戳应答。

在 Internet Control Message Protocol 部分中,Type 值为 14,Code 值为 0,表示该数据包为 ICMP 时间戳应答。

Originate timestamp 的值表示数据包发起的起始时间,这里为 0 秒(午夜零点后开始计算);Receive timestamp 的值表示接收数据包的时间,这里为午夜零点后 8 小时 44 分 24.379 秒;Transmit timestamp 的值表示数据包的发送时间,这里为 31464379 秒,时间为午夜零点后 8 小时 44 分 24.379 秒。

三、伪造请求超时的ICMP数据包

在网络传输 IP 数据报的过程中,如果 IP 数据包的 TTL 值逐渐递减为 0 时,需要丢弃数据报。这时,路由器需要向源发送方发送 ICMP 超时报文,表示传输过程中超时了。

在超时 ICMP 数据包报文中,类型值为 11,代码值为 0。

用户可以通过 netwox 工具中编号为 83 的模块伪造请求超时 ICMP 数据包。

【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135,在主机 C 上伪造请求超时 ICMP 数据包。

  1. 在主机 A 上 ping 主机 B,执行命令如下:

    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.447 ms
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.468 ms
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.773 ms
64 bytes from 192.168.59.135: icmp_seq=4 ttl=64 time=0.307 ms

上述输出信息表示主机 B 是可达的,并且给出了传输的时间。例如,time=0.447ms,表示时间需要 0.447 毫秒。

  1. 在主机 C 上伪造请求超时 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

    root@daxueba:~# netwox 83 -i 192.168.59.135

执行命令后没有任何输出信息,但是成功伪造了请求超时 ICMP 数据包。

  1. 再次在主机 A 上 ping 主机 B,执行命令如下:

    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=6 ttl=64 time=0.336 ms
From 192.168.59.135 icmp_seq=6 Time to live exceeded
64 bytes from 192.168.59.135: icmp_seq=7 ttl=64 time=0.532 ms
From 192.168.59.135 icmp_seq=7 Time to live exceeded
64 bytes from 192.168.59.135: icmp_seq=8 ttl=64 time=0.495 ms
From 192.168.59.135 icmp_seq=8 Time to live exceeded

从上述输出信息可以看到,主机 A 向主机 192.168.59.135 发送了 ping 请求。部分请求没有收到响应信息,而显示了 Time to live exceeded 信息,表示时间超时。

  1. 为了验证伪造的请求超时 ICMP 数据包,可以通过捕获数据包查看,如图所示,捕获到了若干个 ICMP 超时数据包。

其中,第 3 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机 B 发送的 ICMP 请求包;第 5 个数据包源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Time-to-live exceeded 表示时间超时,说明该数据包为伪造的请求超时 ICMP 包。

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

在该数据包的 Internet Control Message Protocol 部分中,Type 值为 11,Code 值为 0,说明该数据包是请求超时 ICMP 数据包。

四、伪造目标不可达的ICMP数据包

目标不可达包是指路由器无法将 IP 数据包发送给目标地址时,会给发送端主机返回一个目标不可达的 ICMP 消息。在目标不可达报文中,类型值为 3,代码值为 1。

伪造目标不可达的 ICMP 数据包需要使用 netwox 工具中编号为 82 的模块。

【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135,在主机 C 上伪造目标不可达 ICMP 数据包。

  1. 在主机 C 上伪造目标不可达 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

    root@daxueba:~# netwox 82 -i 192.168.59.135

执行命令后没有任何输出信息,说明成功伪造了目标主机不可达 ICMP 数据包。

  1. 在主机 A 上 ping 主机 B,执行命令如下:

    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=3.95 ms
From 192.168.59.135 icmp_seq=1 Destination Host Unreachable
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.608 ms
From 192.168.59.135 icmp_seq=2 Destination Host Unreachable
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.341 ms
From 192.168.59.135 icmp_seq=3 Destination Host Unreachable
64 bytes from 192.168.59.135: icmp_seq=4 ttl=64 time=0.499 ms
From 192.168.59.135 icmp_seq=4 Destination Host Unreachable

从上述输出信息可以看到,主机 A 向主机 192.168.59.135 发送了 ping 请求,但是部分请求没有得到响应信息,而显示了 Destination Host Unreachable 信息,表示目标主机不可达。

  1. 为了验证伪造的目标不可达 ICMP 数据包,可以使用 Wireshark 抓包查看,如图所示,捕获到了若干个 ICMP 数据包。

其中,第 3 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机B发送的 ICMP 请求包;第 5 个数据包的源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Destination unreachable(Host unreachable) 表示目标主机不可达,说明该数据包为伪造的目标不可达 ICMP 数据包。

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

在该数据包的 Internet Control Message Protocol 部分中,Type 值为 3,Code 值为 1,说明该数据包是目标不可达 ICMP 数据包。

五、伪造参数错误的ICMP数据包

当路由器或主机处理数据报时,发现因为报文头的参数错误而不得不丢弃报文时,需要向源发送方发送参数错误报文。该报文中,类型值为 12,代码值为 0。

伪造参数错误的 ICMP 数据包需要使用 netwox 工具中编号为 84 的模块。

【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135,在主机 C 上伪造参数错误 ICMP 数据包。

  1. 在主机 C 上伪造参数错误 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

    root@daxueba:~# netwox 82 -i 192.168.59.135

执行命令后没有任何输出信息,但是会伪造参数错误 ICMP 数据包。

  1. 在主机 A 上 ping 主机 B,执行命令如下:

    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=11.1 ms
From 192.168.59.135 icmp_seq=1 Parameter problem: pointer = 0
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.546 ms
From 192.168.59.135 icmp_seq=2 Parameter problem: pointer = 0
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.453 ms
From 192.168.59.135 icmp_seq=3 Parameter problem: pointer = 0

从输出信息可以看到,主机A向主机 192.168.59.135 发送了 ping 请求,但部分请求没有得到响应信息,而显示了 Parameter problem 信息,表示参数错误。

  1. 通过捕获数据包,验证伪造的参数错误的 ICMP 数据包,如图所示,捕获到了若干个 ICMP 数据包。

第 1 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机 B 发送的 ICMP 请求包;第 3 个数据包的源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Parameter problem 表示参数错误,说明该数据包为伪造的参数错误 ICMP 数据包。

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

在 Internet Control Message Protocol 部分中,Type 值为 12,Code 值为 0,说明该数据包是参数错误 ICMP 数据包。

六、伪造源站抑制的ICMP数据包

主机在处理报文时会有一个缓存队列。当主机接收数据包的速度比处理速度快时,一旦超过最大缓存队列,主机将无法处理,从而选择丢弃报文。这时,主机会向源发送方发送一个 ICMP 源站抑制报文,告诉对方缓存队列已满,稍后再进行请求。

在源站抑制的 ICMP 报文中,类型值为 4,代码值为 0。

伪造源站抑制的数据包需要使用 netwox 工具中编号为 85 的模块。

【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135。在主机 C 上伪造源站抑制 ICMP 数据包。

  1. 在主机 C 上伪造源站抑制 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

    root@daxueba:~# netwox 85 -i 192.168.59.135

执行命令后没有任何输出信息,但是成功伪造了源站抑制 ICMP 数据包。

  1. 在主机 A 上 ping 主机 B,执行命令如下:

    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=1.77 ms
From 192.168.59.135: icmp_seq=1 Source Quench
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.429 ms
From 192.168.59.135: icmp_seq=2 Source Quench
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=18.8 ms
From 192.168.59.135: icmp_seq=3 Source Quench

从输出信息可以看到,主机 A 向主机 192.168.59.135 发送了 ping 请求,但是部分请求没有得到响应信息,而显示了 Source Quench 信息,表示源站抑制。

  1. 通过捕获数据包,验证伪造的源站抑制的 ICMP 数据包,如图所示。

捕获到了若干个 ICMP 数据包,其中,第 4 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机 B 发送的 ICMP 请求包;第 6 个数据包的源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Source Quench 表示源站抑制,说明该数据包为伪造的源站抑制 ICMP 数据包。

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

在 Internet Control Message Protocol 部分中,Type 值为 4,Code 值为 0,说明该数据包是源站抑制 ICMP 数据包。

七、伪造重定向ICMP数据包

当路由收到 IP 数据报,发现数据报的目的地址在路由表上却不存在时,它发送 ICMP 重定向报文给源发送方,提醒它接收的地址不存在,需要重新发送给其他地址进行查找。

在重定向 ICMP 报文中,类型值为 5,代码值为 0。

伪造重定向 ICMP 数据包需要使用 netwox 工具中编号为 86 的模块。

【实例】已知主机 A 的 IP 地址为 192.168.59.132,netwox 工具所在主机 IP 地址为 192.168.59.135。基于 netwox 所在主机向主机 A 实施攻击。为了不让目标主机发现攻击的来源,伪造数据包的源 IP 地址为 192.168.59.136,将目标主机的网关修改为网段中的其他主机,使目标主机发送的数据包重定向到该主机上。

具体步骤如下:

  1. 查看目标主机A的网关。在目标主机 A 上,向 www.qq.com (http://www.qq.com) 发送 ping 请求。通过捕获数据包,查看网关信息,如图所示。

图中第 2 帧和第 3 帧为 DNS 协议查询数据包,是通过网关查询 www.qq.com (http://www.qq.com) 主机的 IP 地址信息。从中可以判断,目标主机的网关为 192.168.59.2。

  1. 向目标主机发送重定向数据包,设置源 IP 地址为 192.168.59.136,将目标主机发送的数据包重定向到主机 192.168.59.131 上,执行命令如下:

    root@daxueba:~# netwox 86 -g 192.168.59.131 -c 1 -i 192.168.59.136

执行命令没有任何输出信息。

  1. 在目标主机上向 www.qq.com (http://www.qq.com) 发送 ping 请求,执行命令如下:

    root@daxueba:~# ping www.qq.com

输出信息如下:

PING https.qq.com (125.39.52.26) 56(84) bytes of data.
64 bytes from no-data (125.39.52.26): icmp_seq=1 ttl=128 time=25.6 ms
From localhost (192.168.59.136): icmp_seq=1 Redirect Host(New nexthop:
localhost (192.168.59.131))
From localhost (192.168.59.136): icmp_seq=2 Redirect Host(New nexthop:
localhost (192.168.59.131))
64 bytes from no-data (125.39.52.26): icmp_seq=2 ttl=128 time=25.2 ms
From localhost (192.168.59.136): icmp_seq=3 Redirect Host(New nexthop:
localhost (192.168.59.131))
64 bytes from no-data (125.39.52.26): icmp_seq=3 ttl=128 time=27.1 ms
64 bytes from no-data (125.39.52.26): icmp_seq=4 ttl=128 time=25.5 ms
From localhost (192.168.59.136): icmp_seq=4 Redirect Host(New nexthop:
localhost (192.168.59.131))

上述输出信息中,64 bytes from no-data(125.39.52.26):icmp_seq=1 ttl=128 time=25.6 ms 表示成功向目标 www.qq.com (http://www.qq.com) 发送 ping 请求;From localhost(192.168.59.136):icmp_seq=1 Redirect Host(New nexthop:localhost(192.168.59.131)) 表示伪造的重定向 ICMP 数据包,源 IP 地址为 192.168.59.136,Redirect Host 表示目标主机已经重定向,重定向到了主机 192.168.59.131 上。

  1. 在目标主机上捕获数据包,验证重定向的数据包,如图所示。

其中,第 11 帧的源 IP 地址为 192.168.59.136(设置的源 IP 地址),目标 IP 地址为 192.168.59.132(设置的目标 IP 地址),Info 列的 Redirect(Redirect for host) 表示该数据包是一个重定向数据包。

在 Internet Control Message Protocol 部分中,Type 值为 5,Code 值为 1,说明该数据包是重定向的数据包;Gateway address:192.168.59.131 表示该主机的网关被重新定向到了 192.168.59.131。

  1. 选择第 13 帧,查看网关的重定向信息,如图所示。

第 13 帧的源 IP 地址为 192.168.59.136(设置的源 IP 地址),目标 IP 地址为 192.168.59.2(目标主机 A 的网关)。该数据包也是一个重定向的数据包。

在 Internet Control Message Protocol 部分中,Gateway address:192.168.59.131 表示目标主机 A 的网关被修改为了 192.168.59.131。

参考资料

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