5.Wire Shark 抓包及常用协议分析
5.1WireShark 简介和抓包原理及过程
5.1.1 WireShark 简介
WireShark 是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。WireShark 使用 WinPCAP 作为接口,直接与网卡进行数据报文交换。
5.1.2 WireShark 的应用
网络管理员使用 WireShark 来检测网络问题,网络安全工程师使用 WireShark 来检查资讯安全相关问题,开发者使用 WireShark 来为新的通讯协议除错,普通使用者使用 WireShark 来学习网络协议相关知识,也可用于寻找一些敏感信息。
5.1.3 WireShark 快速分析数据包技巧
(1)确定 WireShark 的物理位置(如果没有一个正确的位置,启动 WireShark 后会花费很长时间捕获到一些与自己无关的数据)。
(2)选择捕获接口。一般都是选择连接到 Internet 网络的接口,这样才可以捕获到与网络相关的数据。否则捕获到的其他数据对自己也没有任何帮助。
(3)使用捕获过滤器。通过设置捕获过滤器,可以避免产生过大的捕获数据。这样用户在分析数据时,也不会受其他数据干扰。而且,还可以为用户节约大量时间。
(4)使用显示过滤器,通常使用捕获过滤器过滤后的数据,往往还是很复杂。为了使过滤的数据包更加细致,此时使用显示过滤器进行过滤。
(5)使用着色规则。通常使用显示过滤器过滤后发数据,都是有用的数据包。如果想更加突出的显示某个会话,可以使用着色规则高亮显示。
(6)构建图标。如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的形式可以更加方便的展现数据分布情况。
(7)重组数据。当传输较大的图片或文件时,需要将信息分布在多个数据包中。这时候就需要使用重组数据的方法来抓取完整的数据。WireShark 的重组功能,可以重组一个会话中不同数据包的信息,或者是重组一个完整的图片或文件。
5.2 WireShark 抓包及快速定位数据包技巧
5.2.1 常见协议包
ARP 协议
ICMP 协议
TCP 协议
UDP 协议
DNS 协议
HTTP 协议
FTP 协议
5.2.2 使用 WireShark 进行抓包
启动: 应用程序 –> 09 - 嗅探/欺骗 –> wireshark
双击选择当前网卡(eth0)
5.2.3 混杂模式介绍
普通模式:只接收发送给本机的数据包
混杂模式:接收所有经过网卡的数据包(一般默认混杂模式)
5.2.4 WireShark 的过滤器使用
--筛选指定IP
ip.addr==目标IP
--筛选指定协议
直接写协议名(如:TCP)
--筛选源IP(Kali向网关发送的数据包)
ip.src_host==源IP
--筛选目标IP
ip.dst_host==目标IP
--可使用逻辑查询
or 满足其中一个
and 两个同时满足
[扩] 客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过三次握手,这样DNS服务器负载更低,响应更快。理论上说,客户端也可以指定向DNS服务器查询时用TCP,但事实上很多DNS服务器进行配置时,仅支持UDP查询。
例:抓取访问百度站点的数据包
5.3 使用 WireShark 对常用协议抓包并分析原理
[注] 协议分析时,为避免一些干扰数据包存在,须关闭混杂模式。
5.3.1 常用协议分析:ARP 协议(地址解析协议)
地址解析协议(Address Resolution Protocol,ARP)是一个通过网络层地址来寻找数据链路层地址的网络传输协议,它在IPv4中极为重要。ARP是通过网络地址来定位MAC地址。
address Resolution Protocol(reply) //ARP地址解析协议(reply表示回复包)
Hardware type:Ethernet(1) //硬件类型
Protocol type:IPv4(0x0800) //协议类型
Harware size:6 //硬件地址
Protocol size:4 //协议长度
Opcode:_reply(2) //操作码(值为2表示ARP回复包)
Sender MAC address:XXXXXXXXXXX //源MAC地址
Sender IP address:xxx.xxx.xxx.xxx //源IP地址
Target MAC address:XXXXXXXXXXX //目标MAC地址
Target IP address:xxx.xxx.xxx.xxx //目标IP地址
使用nmap基于ARP协议进行扫描
# nmap -sn 192.168.1.1
5.3.2 常用协议分析:ICMP 协议
--本机发送一个 ICMP Echo Request 的包,接收方返回一个ICMP Echo Reply,包含了接收到数据拷贝和一些其他指令
# ping www.baidu.com
[注] ICMP基于IPv4
type:协议类型(ping类型)request请求包reply应答包
code:8 回写请求包 0:回写应答报文
checksum:校验和
[checksum status:good]检验状态
Identifier(BE):id值
Identifier(LE):id值
sequence number(BE):序列号(应答包会返回Identifier(BE)值)
sequence number(LE):序列号(应答包会返回Identifier(LE)值)
[Response frame:52] 响应帧的序列号:52
Data(48 bytes)填充数据共48字节
5.3.3 常用协议分析:TCP 协议
流量图分析
挥手分析
在终端输入 Exit 表示 SSHD 的 Server 端向客户端发起关闭链接请求。
第一次挥手 :服务端发送一个 [FIN+ACK],表示自己没有数据要发送了,想断开连接,并进入 FIN_WAIT_1 状态。
第二次挥手 :客户端收到 FIN 后,知道不会再有数据从服务端传来,发送 ACK 进行确认,确认序号为收到序号序号+1(与 SYN 相同,一个 FIN 占用一个序号),客户端进入 CLOSE_WAIT 状态。
第三次挥手 :客户端发送 [FIN+ACK] 给对方,表示自己没有数据要发送了,客户端进入 LAST_ACK 状态,然后直接断开 TCP 会话的连接,释放相应的资源。
第四次挥手 :服务端收到了客户端的 FIN 信令后,进入 TIMED_WAIT 状态,并发送 ACK 确认消息。服务端在 TIMED_WAIT 状态下,等待一段时间,没有数据到来,就认为对面已经收到了自己发送的 ACK 并正确关闭了进入 CLOSE 状态,自己也断开了 TCP 连接,释放所有资源。当客户端收到服务端的 ACK 回应后,会进入 CLOSE 状态并关闭本端的会话接口,释放相应的资源。
5.3.1 常用协议分析:HTTP 协议
[注] HTTP 是 TCP 的上层协议,所以过滤 TCP 的数据时会包含 HTTP 协议的数据包。
– 发送一个 HTTP 的 HEAD 请求
# curl -I baidu.com
– 服务器收到我们的请求返回了一个 Seq/ACK 进行确认
– 服务器将 HTTP 的头部信息
5.4 WireShark 抓包解决服务器被黑上不了网
场景:服务器被黑了上不了网,可以ping通网关,但是不能上网
模拟场景:修改主机 TTL 值为1(以下方式临时修改内核参数)
[扩]
TTL:数据报文的生存周期。
默认的 Linux 操作系统值:64,每经过一个路由节点,TTL 值减1。TTL 值为0时,说明目标地址不可达,并返回:Tine to live exceeded
--修改主机 TTL 值为1
# echo "1" > /proc/sys/net/ipv4/ip_default_ttl
--ping 测试网关
# ping 192.168.1.1
--ping 8.8.8.8
# ping 8.8.8.8 -c 1
//此时无法ping通,因为TTL值为1,每经过一个路由节点,TTL值减去1,过第二个路由节点时TTL值减到0,此时目标地址不可达,提示Tine to live exceeded(超过生存周期)。
//通过TTL值可判断经过了几个路由节点( 默认TTL值64-当前TTL值=经过的路由节点数)
//可通过WireShark抓取普通模式下ping8.8.8.8中的icmp数据包进行分析
--恢复系统内核参数
# echo "64" > /proc/sys/net/ipv4/ip_default_ttl
--ping 测试
# ping 8.8.8.8 -c 1
---------------------------------------------------------------------------
保存抓包数据时建议保存pcap格式,使用时【文件】->【打开】即可。
[扩] mtr工具
mtr xxx.xxx.xxx.xxx
//提示未找到命令则需要先进行安装
– mtr 安装
# apt install -y mtr