- Python渗透测试教程
- Python渗透测试 - 首页
- 介绍
- 评估方法
- 网络通信入门
- 套接字及其方法
- Python网络扫描器
- 网络数据包嗅探
- ARP欺骗
- 无线网络渗透测试
- 应用层
- 客户端验证
- DoS & DDoS攻击
- SQL注入Web攻击
- XSS Web攻击
- 有用资源
- 快速指南
- 有用资源
- 讨论
网络通信入门
我们一直听说,要进行渗透测试,渗透测试人员必须了解基本的网络概念,例如IP地址、有类子网划分、无类子网划分、端口和广播网络。第一个原因是,诸如哪些主机在批准的范围内处于活动状态以及它们有哪些服务、端口和功能处于打开和响应状态等活动将决定评估人员将在渗透测试中执行哪种类型的活动。环境不断变化,系统经常重新分配。因此,旧的漏洞很可能再次出现,如果没有良好的网络扫描知识,初始扫描可能不得不重新进行。在随后的章节中,我们将讨论网络通信的基础知识。
参考模型
参考模型提供了一种标准化的方法,在全球范围内被接受,因为使用计算机网络的人员分布在广泛的物理范围内,并且他们的网络设备可能具有异构架构。为了在异构设备之间提供通信,我们需要一个标准化的模型,即参考模型,它将为我们提供这些设备可以通信的方式。
我们有两个参考模型,例如OSI模型和TCP/IP参考模型。但是,OSI模型是假设的,而TCP/IP是实际的模型。
OSI模型
开放系统互连是由国际标准化组织(ISO)设计的,因此也称为ISO-OSI模型。
OSI模型由七层组成,如下面的图所示。每一层都有特定的功能,但是每一层都为上一层提供服务。
物理层
物理层负责以下活动:
激活、维护和停用物理连接。
定义传输所需的电压和数据速率。
将数字比特转换为电信号。
确定连接是单工、半双工还是全双工。
数据链路层
数据链路层执行以下功能:
对要通过物理链路传输的信息执行同步和错误控制。
启用错误检测,并在要传输的数据中添加错误检测位。
网络层
网络层执行以下功能:
将信号通过各种通道路由到另一端。
通过决定数据应采取哪条路由来充当网络控制器。
将传出消息划分为数据包,并将传入数据包组装成更高层的邮件。
传输层
传输层执行以下功能:
它决定数据传输是否应在并行路径或单一路径上进行。
它执行多路复用,将数据拆分。
它将数据组分解成更小的单元,以便网络层更有效地处理它们。
传输层保证数据从一端到另一端的传输。
会话层
会话层执行以下功能:
管理消息并同步两个不同应用程序之间的对话。
它控制登录和注销、用户身份识别、计费和会话管理。
表示层
表示层执行以下功能:
此层确保信息以接收系统能够理解和使用的方式传递。
应用层
应用层执行以下功能:
它提供不同的服务,例如以多种方式操作信息、重新传输信息文件、分发结果等。
应用层还执行诸如登录或密码检查等功能。
TCP/IP模型
传输控制协议和互联网协议 (TCP/IP) 模型是一个实际模型,用于互联网。
TCP/IP模型将两层(物理层和数据链路层)合并成一层——主机到网络层。下图显示了TCP/IP模型的各个层:
应用层
此层与OSI模型相同,并执行以下功能:
它提供不同的服务,例如以多种方式操作信息、重新传输信息文件、分发结果等。
应用层还执行诸如登录或密码检查等功能。
以下是应用层中使用的不同协议:
- TELNET
- FTP
- SMTP
- DN
- HTTP
- NNTP
传输层
它执行与OSI模型中传输层相同的功能。请考虑与传输层相关的以下重要事项:
它使用TCP和UDP协议进行端到端传输。
TCP是一种可靠的面向连接的协议。
TCP还处理流量控制。
UDP不可靠,并且无连接协议不执行流量控制。
TCP/IP和UDP协议在此层中使用。
互联网层
此层的函数是允许主机将数据包插入网络,然后让它们独立地传输到目的地。但是,接收数据包的顺序可能与发送它们的顺序不同。
互联网协议 (IP) 用于互联网层。
主机到网络层
这是TCP/IP模型中的最低层。主机必须使用某些协议连接到网络,以便能够通过它发送IP数据包。此协议因主机和网络而异。
此层中使用的不同协议是:
- ARPANET
- SATNET
- 局域网
- 分组无线电
有用的架构
以下是网络通信中使用的一些有用的架构:
以太网帧架构
一位名叫罗伯特·梅特卡夫的工程师于1973年首次发明了以太网网络,并在IEEE标准802.3下定义。它最初用于在工作站和打印机之间互连和发送数据。超过80%的局域网使用以太网标准,因为它速度快、成本低且易于安装。另一方面,如果我们谈论帧,那么数据以这种方式在主机之间传输。一个帧由各种组件组成,例如MAC地址、IP报头、起始和结束分隔符等。
以太网帧以前导码和SFD开头。以太网报头包含源和目标MAC地址,之后是帧的有效负载。最后一个字段是CRC,用于检测错误。基本的以太网帧结构在IEEE 802.3标准中定义,解释如下:
以太网(IEEE 802.3)帧格式
以太网数据包将其有效负载作为以太网帧传输。以下是以太网帧的图形表示以及每个字段的描述:
| 字段名称 | 前导码 | SFD(帧起始分隔符) | 目标MAC | 源MAC | 类型 | 数据 | CRC |
|---|---|---|---|---|---|---|---|
| 大小(以字节为单位) | 7 | 1 | 6 | 6 | 2 | 46-1500 | 4 |
前导码
以太网帧之前是前导码,大小为7字节,它通知接收系统帧正在开始,并允许发送方和接收方建立比特同步。
SFD(帧起始分隔符)
这是一个1字节字段,用于表示目标MAC地址字段从下一个字节开始。有时SFD字段被认为是前导码的一部分。这就是为什么在许多地方前导码被认为是8字节的原因。
目标MAC - 这是一个6字节字段,其中包含接收系统的地址。
源MAC - 这是一个6字节字段,其中包含发送系统的地址。
类型 - 它定义了帧内协议的类型。例如,IPv4或IPv6。其大小为2字节。
数据 - 这也称为有效负载,实际数据插入此处。其长度必须在46-1500字节之间。如果长度小于46字节,则添加填充0以满足最小可能长度,即46。
CRC(循环冗余校验) - 这是一个4字节字段,包含32位CRC,允许检测损坏的数据。
扩展以太网帧(以太网II帧)格式
以下是扩展以太网帧的图形表示,通过它我们可以获得大于1500字节的有效负载:
| 字段名称 | 目标MAC | 源MAC | 类型 | DSAP | SSAP | Ctrl | 数据 | CRC |
|---|---|---|---|---|---|---|---|---|
| 大小(以字节为单位) | 6 | 6 | 2 | 1 | 1 | 1 | >46 | 4 |
与IEEE 802.3以太网帧不同的字段的描述如下:
DSAP(目标服务访问点)
DSAP是一个1字节长的字段,表示旨在接收消息的网络层实体的逻辑地址。
SSAP(源服务访问点)
SSAP是一个1字节长的字段,表示创建消息的网络层实体的逻辑地址。
Ctrl
这是一个1字节的控制字段。
IP数据包架构
互联网协议是TCP/IP协议套件中的主要协议之一。此协议在OSI模型的网络层和TCP/IP模型的互联网层工作。因此,此协议负责根据其逻辑地址识别主机并在它们之间通过底层网络路由数据。IP提供了一种通过IP寻址方案唯一识别主机的机制。IP使用尽力而为的交付,即它不保证数据包将被交付到目标主机,但它将尽最大努力到达目的地。
在随后的章节中,我们将了解IP的两个不同版本。
IPv4
这是互联网协议版本4,它使用32位逻辑地址。以下是IPv4报头的图以及字段的描述:
版本
这是使用的互联网协议版本;例如,IPv4。
IHL
互联网报头长度;整个IP报头的长度。
DSCP
区分服务代码点;这是服务类型。
ECN
显式拥塞通知;它携带有关路由中看到的拥塞的信息。
总长度
整个IP数据包的长度(包括IP报头和IP有效负载)。
标识
如果IP数据包在传输过程中被分片,则所有分片都包含相同的标识号。
标志
根据网络资源的要求,如果IP数据包过大而无法处理,则这些“标志”指示它们是否可以被分片。在这个3位标志中,MSB始终设置为“0”。
分片偏移
此偏移量指示分片在原始IP数据包中的确切位置。
生存时间
为了避免网络循环,每个数据包都发送了一些设置的TTL值,它告诉网络此数据包可以穿越多少路由器(跳数)。在每个跳数处,其值减1,当值达到零时,数据包被丢弃。
协议
告诉目标主机上的网络层,此数据包属于哪个协议,即下一层协议。例如,ICMP的协议号为1,TCP为6,UDP为17。
报头校验和
此字段用于保存整个报头的校验和值,然后用于检查数据包是否无错误地接收。
源地址
数据包发送方(或源)的32位地址。
目标地址
数据包接收方(或目标)的32位地址。
选项
这是一个可选字段,如果IHL的值大于5则使用。这些选项可能包含安全、记录路由、时间戳等选项的值。
如果您想详细了解IPv4,请参考此链接 - www.tutorialspoint.com/ipv4/index.htm
IPv6
互联网协议版本6是最新的通信协议,与其前身IPv4一样,它工作在网络层(第3层)。除了提供大量的逻辑地址空间外,该协议还具有丰富的功能,可以解决IPv4的不足。以下是IPv4报头图及其字段说明:
版本(4位)
它表示互联网协议的版本——0110。
流量类(8位)
这8位分为两部分。最高有效6位用于服务类型,让路由器知道应该为该数据包提供哪些服务。最低有效2位用于显式拥塞通知(ECN)。
流标签(20位)
此标签用于维护属于通信的数据包的顺序流。源标记序列以帮助路由器识别特定数据包属于特定信息流。此字段有助于避免数据包的重新排序。它专为流媒体/实时媒体而设计。
有效负载长度(16位)
此字段用于告诉路由器特定数据包在其有效负载中包含多少信息。有效负载由扩展报头和上层数据组成。使用16位,最多可以指示65535字节;但是,如果扩展报头包含逐跳扩展报头,则有效负载可能会超过65535字节,并且此字段设置为0。
下一个报头(8位)
此字段用于指示扩展报头的类型,或者如果不存在扩展报头,则指示上层PDU。上层PDU类型的值与IPv4相同。
跳数限制(8位)
此字段用于阻止数据包在网络中无限循环。这与IPv4中的TTL相同。跳数限制字段的值在经过链路(路由器/跳数)时减1。当字段达到0时,数据包被丢弃。
源地址(128位)
此字段指示数据包发起者的地址。
目标地址(128位)
此字段提供数据包预期接收者的地址。
如果您想详细了解IPv6,请参考此链接——www.tutorialspoint.com/ipv6/index.htm
TCP(传输控制协议)报头架构
众所周知,TCP是一种面向连接的协议,在开始通信之前,两个系统之间会建立一个会话。通信完成后,连接将关闭。TCP使用三次握手技术来建立两个系统之间的连接套接字。三次握手意味着在两个系统之间来回发送三个消息——SYN、SYN-ACK和ACK。两个系统(发起系统和目标系统)之间工作步骤如下:
步骤1 - 设置SYN标志的数据包
首先,尝试发起连接的系统以设置SYN标志的数据包开始。
步骤2 - 设置SYN-ACK标志的数据包
现在,在此步骤中,目标系统返回一个设置了SYN和ACK标志的数据包。
步骤3 - 设置ACK标志的数据包
最后,发起系统将向原始目标系统返回一个设置了ACK标志的数据包。
以下是TCP报头图及其字段说明:
源端口(16位)
它标识发送设备上应用程序进程的源端口。
目标端口(16位)
它标识接收设备上应用程序进程的目标端口。
序列号(32位)
会话中段的数据字节的序列号。
确认号(32位)
当ACK标志设置时,此数字包含预期数据字节的下一个序列号,并作为对先前接收到的数据的确认。
数据偏移量(4位)
此字段同时暗示TCP报头的大小(32位字)以及当前数据包在整个TCP段中的数据偏移量。
保留(3位)
保留供将来使用,默认为零。
标志(每个1位)
NS - 显式拥塞通知信号处理使用此Nonce Sum位。
CWR - 当主机接收到设置了ECE位的数据包时,它设置拥塞窗口减少以确认收到ECE。
ECE - 它有两个含义:
如果SYN位清零,则ECE表示IP数据包的CE(拥塞体验)位已设置。
如果SYN位设置为1,则ECE表示设备具有ECT功能。
URG - 它指示紧急指针字段具有重要数据,应进行处理。
ACK - 它指示确认字段具有意义。如果ACK清零,则表示数据包不包含任何确认。
PSH - 设置时,它是对接收站的请求,将数据(尽快到达)推送到接收应用程序,而无需对其进行缓冲。
RST - 重置标志具有以下功能:
用于拒绝传入连接。
用于拒绝段。
用于重新启动连接。
SYN - 此标志用于在主机之间建立连接。
FIN - 此标志用于释放连接,此后不再交换数据。因为带有SYN和FIN标志的数据包具有序列号,所以它们按正确的顺序处理。
窗口大小
此字段用于两个站之间的流量控制,并指示接收器为段分配的缓冲区大小(以字节为单位),即接收器期望多少数据。
校验和 - 此字段包含报头、数据和伪报头的校验和。
紧急指针 - 如果URG标志设置为1,则它指向紧急数据字节。
选项 - 它提供了常规报头未涵盖的其他选项。选项字段始终以32位字描述。如果此字段包含少于32位的数据,则使用填充来覆盖剩余位以达到32位边界。
如果您想详细了解TCP,请参考此链接——https://tutorialspoint.com/data_communication_computer_network/transmission_control_protocol.htm
UDP(用户数据报协议)报头架构
与TCP(面向连接的协议)不同,UDP是一个简单的无连接协议。它涉及最少的通信机制。在UDP中,接收方不会生成接收到的数据包的确认,反过来,发送方也不会等待发送的数据包的任何确认。这种缺点使该协议既不可靠,也易于处理。以下是UDP报头图及其字段说明:
源端口
此16位信息用于标识数据包的源端口。
目标端口
此16位信息用于标识目标机器上的应用程序级服务。
长度
长度字段指定整个UDP数据包的长度(包括报头)。它是一个16位字段,最小值为8字节,即UDP报头本身的大小。
校验和
此字段存储发送方在发送前生成的校验和值。IPv4将此字段作为可选字段,因此当校验和字段不包含任何值时,将其设为0,并且所有位都设置为零。
要详细了解TCP,请参考此链接——用户数据报协议