转自:计算机与网络安全
用户数据报协议(User Datagram Protocol,UDP)是一种传输层协议。在TCP/IP网络中,它与TCP协议一样用于处理数据包,是一种无连接的协议。
1、UDP协议作用
TCP协议在进行数据传输时,需要建立连接,并且每次传输的数据都需要进行确认。当不再进行传输数据时,还需要断开连接。这样做虽然安全,但是效率较低。而UDP协议正好避免了这些过程,它是一种没有复杂控制,提供面向无连接的通信服务协议。UDP协议具备以下特点:
没有各种连接:在传输数据前不需要建立连接,也避免了后续的断开连接。
不重新排序:对到达顺序混乱的数据包不进行重新排序。
没有确认:发送数据包无须等待对方确认。因此,使用UDP协议可以随时发送数据,但无法保证数据能否成功被目标主机接收。
2、UDP数据格式
相比TCP协议,UDP协议的报文结构相对简单。下面介绍UDP报文的数据格式。
(1)UDP报文格式
每个UDP报文分为UDP报头和UDP数据区两部分。报头由4个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。UDP报文格式如图1所示。
图1 UDP报文格式
UDP报文中每个字段的含义如下:
源端口:这个字段占据UDP报文头的前16位,通常包含发送数据报的应用程序所使用的UDP端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为0。这样,接收端的应用程序就不能发送响应了。
目的端口:接收端计算机上UDP软件使用的端口,占据16位。
长度:该字段占据16位,表示UDP数据报长度,包含UDP报文头和UDP数据长度。因为UDP报文头长度是8个字节,所以这个值最小为8。
校验值:该字段占据16位,可以检验数据在传输过程中是否被损坏。
(2)分析UDP数据包
客户端与服务器建立连接后进行通信,除了使用TCP协议外,还可以使用UDP协议。netwox工具提供了相关模块,用于建立UDP服务器和UDP客户端,实现基于UDP协议的数据交互。
已知主机A的IP地址为192.168.59.132,主机B的IP地址为192.168.59.135。分别在这两个主机上建立UDP服务器和客户端,并进行连接,监听指定端口上的通信信息。具体步骤如下:
1)在主机A上建立UDP服务器,设置监听端口为80,执行命令如下:
root@daxueba:~# netwox 90 -P 80
执行命令后,没有任何输出信息,但是成功建立了UDP服务器端。
2)在主机B上建立UDP客户端,连接UDP服务器端80端口,执行命令如下:
root@daxueba:~# netwox 88 -i 192.168.59.135 -p 80
执行命令后,没有任何输出信息,但是成功连接到了UDP服务器端,这里可以输入通信内容。
3)与UDP服务器端进行通信,在客户端输入hi:
root@daxueba:~# netwox 88 -i 192.168.59.135 -p 80
hi
4)在服务端可以看到客户端发来的消息如下:
root@daxueba:~# netwox 90 -P 80
hi
5)为了验证发送的消息使用的是UDP协议,可以通过抓包进行查看,如图2所示。从图中第1个数据包可以看到,是UDP客户端(源IP地址为192.168.59.132)向UDP服务器端(目的IP地址为192.168.59.135)发送的UDP数据包,使用的源端口为随机端口47203,目的端口为80(UDP服务器端监听的端口)。在User Datagram Protocol部分中显示了UDP数据包的详细信息。可以看到源端口、目的端口,以及包长度为11字节、校验值为0xf878等信息。
图2 客户端发往服务器端的UDP包
6)当服务器向客户端发送消息时,使用的也是UDP协议。例如,在服务器端回复客户端,输入hello:
root@daxueba:~# netwox 90 -P 80
hi
hello
7)通过抓包验证使用的是UDP协议,如图3所示。从第14个数据包可以看到,源IP地址为192.168.59.135,目的IP地址为192.168.59.132,源端口为80,目的端口为随机端口47203。该数据包正好是UDP服务器回复客户端的UDP数据包。在User Datagram Protocol部分中可以看到详细信息。
图3 UDP服务器回复客户端的UDP数据包
3、构造UDP包
(1)基于IPv4伪造UDP包
在发送UDP数据包时,为了避免被发现,可以基于IPv4伪造UDP包。它可以设置假的IP地址和假的端口等。伪造包需要使用netwox工具中编号为39的模块来实现。
基于IPv4伪造UDP包。
1)不使用选项,直接运行并查看基于IPv4的UDP包,执行命令如下:
root@daxueba:~# netwox 39
输出信息如下:
IP______________________________________________________________.
|version| ihl | tos | totlen
|___4___|___5___|____0x00=0____ |___________0x001C=28______
| id |r|D|M| offsetfrag
|_________0x5578=21880__________ |0|0|0|________0x0000=0____
| ttl | protocol | checksum
|____0x00=0_____|____0x11=17____|____________0x5D1F_______
| source
|________________________192.168.59.132_______________________
| destination
|____________________________ 5.6.7.8_____________________
UDP___________________________________________________________
| source port | destination port
|__________0x04D2=1234__________|___________0x0050=80_______
| length | checksum
|___________0x0008=8____________|_________0xF281=62081_______
其中,IP部分为IPv4数据报文头信息,可以看到源IP地址为192.168.59.132,该地址为当前主机的IP地址。UDP部分为UDP数据报文头信息,在该信息中可以看到每个字段的默认值。
2)基于IPv4伪造UDP数据包,伪造源IP地址为192.168.59.160,源端口为443。向目标主机192.168.59.135的8080端口发送UDP数据包,执行命令如下:
root@daxueba:~# netwox 39 -l 192.168.59.160 -m 192.168.59.135 -o 443 -p 8080
输出信息如下:
IP______________________________________________________________.
|version| ihl | tos | totlen
|___4___|___5___|____0x00=0_____|___________0x001C=28______
| id |r|D|M| offsetfrag
|_________ 0x76A7=30375_________|0|0|0|________0x0000=0______
| ttl | protocol | checksum
|____0x00=0_____|____0x11=17____|____________ 0x4BB2_______
| source
|________________________192.168.59.160_______________________
| destination
|________________________192.168.59.135_____________________
UDP___________________________________________________________
| source port | destination port
|__________ 0x01BB=443__________|_________0x1F90=8080______
| length | checksum
|___________0x0008=8____________|_________ 0xE61A=58906_______
在IP部分中可以看到,源IP地址变为了伪造的地址192.168.59.160。目的IP地址为目标主机的地址。在UDP部分可以看到,源端口为伪造的端口443,UDP数据包的长度为8,校验值为0xE61A。
3)通过抓包验证成功伪造了UDP数据包,如图4所示。从第6个数据包可以看到,源IP地址为192.168.59.160,目的IP地址为192.168.59.135,源端口为443,目的端口为8080。该数据包正是伪造的UDP数据包,在User Datagram Protocol部分中可以看到UDP数据报头字段信息,如长度为8、校验值为0xe61a等。
图4 伪造IP地址的UDP包
(2)基于Ethernet和IPv4伪造UDP数据包
上述基于IPv4伪造UDP包只能伪造IP地址,但是不能伪造MAC地址。netwox工具提供编号为35的模块,它可以基于Ethernet和IPv4伪造UDP包,可以伪造MAC地址。
基于Ethernet和IPv4伪造UDP包。
1)不使用选项直接运行查看基于Ethernet和IPv4的UDP包,执行命令如下:
root@daxueba:~# netwox 35
输出信息如下:
Ethernet________________________________________________________.
| 00:0C:29:FD:DE:B8->00:08:09:0A:0B:0C type:0x0800
|_____________________________________________________________
IP______________________________________________________________.
|version| ihl | tos | totlen
|___4___|___5___|____0x00=0_____|___________0x001C=28______
| id |r|D|M| offsetfrag
|_________ 0x555E=21854_________|0|0|0|________0x0000=0______
| ttl | protocol | checksum
|____0x00=0_____|____0x11=17____|____________ 0x5D39_______
| source
|________________________192.168.59.132_______________________
| destination
|____________________________ 5.6.7.8_____________________
UDP__________________________________________________________
| source port | destination port
|__________0x04D2=1234__________|___________0x0050=80_______
| length | checksum
|___________0x0008=8____________|_________0xF281=62081_______
其中,Ethernet部分表示以太网的数据报信息,在该部分中,00:0C:29:FD:DE:B8为源MAC地址,是当前主机的MAC地址。其他字段的值都为默认值。
2)基于Ethernet和IPv4伪造UDP包。伪造MAC地址为00:11:22:aa:bb:cc,源端口为443。向目标主机192.168.59.135(其MAC地址为00:0c:29:ca:e4:66)的8080端口发送UDP数据包,执行命令如下:
root@daxueba:~# netwox 35 -a 00:11:22:aa:bb:cc -b 00:0c:29:ca:e4:66 -m 192.168.59.135 -o 443 -p 8080
输出信息如下:
Ethernet________________________________________________________.
| 00:11:22: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
|_________ 0xA313=41747_________|0|0|0|________0x0000=0______
| ttl | protocol | checksum
|____0x00=0_____|____0x11=17____|____________ 0x1F62_______
| source
|________________________192.168.59.132_______________________
| destination
|__________________________192.168.59.135_____________________
UDP___________________________________________________________
| source port | destination port
|__________ 0x01BB=443__________|___________ 0x1F90=8080______
| length | checksum
|___________0x0008=8____________|_________ 0xE636=58934_______
在Ethernet部分可以看到,源MAC地址变为了伪造的地址00:11:22:AA:BB:CC。在IP部分中可以看到,源IP地址仍然为当前主机的IP地址192.168.59.132。
3)通过抓包验证伪造了MAC地址的UDP数据包,如图5所示。其中,第2个数据包为伪造的UDP包,源IP地址为真实的IP地址192.168.59.132。在Ethernet II部分中可以看到,Source的值为00:11:22:aa:bb:cc,该地址为伪造的MAC地址,而不是真实的MAC地址。
图5 伪造MAC地址的UDP包
团队网络安全技术方向公众号,给个关注
原文始发于微信公众号(LemonSec):网络基础知识:UDP协议概述
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论