网络流量分析详解(包含OSI七层模型、TCP协议及Wireshark工具用法)

网络流量分析 Network Traffic Analysis(NTA)

这个系列讲的是整个网络流量分析流程,其中包含TCP协议、HTTP协议详解和Wireshark、Tcpdump的详细用法,现在只完成了其中一部分内容,每周更新,感兴趣的可以持续关注一下~

内容比较杂,直接用Ctrl+F找自己需要的就可以

前言

​ 网络流量分析(NTA)可以描述为检查网络流量以表征所使用的常用端口和协议、为我们的环境建立监视和响应威胁以及确保尽可能深入地了解我们组织的网络行为。此过程可帮助安全专家确定异常情况,包括网络中的安全威胁,及早有效地查明威胁。攻击者经常更新他们的策略以避免检测,并利用大多数公司允许允许使用的工具获取用户凭证,这使得对检测和随后的响应更具挑战性。

​ 如果一个威胁行为者瞄准并渗透我们的网络,攻击者必须不可避免地与我们的基础设施进行交互和通信。网络通信通过许多不同的端口和协议进行,所有这些端口和协议都被员工、设备和客户同时使用。要发现恶意流量,我们需要利用我们对本地内典型网络流量的了解。这样做会缩小我们的搜索范围,并帮助我们快速找到并破坏对抗性交流。例如,我们使用SYN扫描,在一些从未使用的端口上检测到许多数据包,这很可能是有人试图确定我们主机上打开了哪些端口。像这样的动作是典型的端口扫描。

常用流量分析工具

工具描述
tcpdumptcpdump是一个命令行实用程序,借助 LibPcap,它可以从网络接口捕获文件和解释网络流量。
TsharkTShark是一个类似于 TCPDump 的网络数据包分析器。它将从实时网络捕获数据包或从文件中读取和解码。它是 Wireshark 的命令行变体。
WiresharkWireshark是一个图形网络流量分析器。它可以离线捕获和解码帧并针对流量运行许多不同的解析器,以表征协议和应用程序。
NGrepNGrep是一种模式匹配工具,旨在为 Linux 发行版提供与 grep 类似的功能。最大的区别在于它适用于网络流量数据包。NGrep 了解如何从 PCAP 文件读取实时流量或流量,并利用正则表达式和 BPF 语法。当用于调试来自 HTTP 和 FTP 等协议的流量时,此工具表现最佳。
tcpicktcpick是一个命令行数据包嗅探器,专门用于跟踪和重组 TCP 流。使用 tcpick 读取流并将其重新组合回文件的功能非常出色。
Networking Span PortsSpan 端口是一种在出口或入口处理期间从第二层或第三层网络设备复制帧并将它们发送到收集点的方法。通常会镜像端口以将这些副本发送到日志服务器。
Elastic StackElastic Stack是一系列工具的集大成者,可以从多个来源获取数据、提取数据并将其可视化,以支持对其进行搜索和分析。
SIEMSSIEMS(例如Splunk)是分析和可视化数据的中心。针对流量的警报、取证分析和日常检查都是 SIEM 的用例。

NTA工作过程

在这里插入图片描述

1.获取流量

一旦我们确定收集流量的位置,就开始捕获流量。确定目标流量后,使用捕获过滤器进行筛选。

2.过滤降噪

捕获到的流量,尤其是生产环境中的流量,可能会非常嘈杂。一旦我们完成初始捕获,尝试从我们的视图中过滤掉不必要的流量(如广播流量)可以使分析更容易。

3.分析探索

查看特定的主机、协议,甚至是TCP标头中设置的标志等特定内容。尝试回答以下问题:

1.流量是加密的还是明文的?

2.是否可以看到用户试图访问他们不应该访问的资源?

3.之前几乎不收发流量的主机之间流量是否异常?

4.检测和警报

使用IDS和IPS等其他工具,针对流量运行检测算法和签名,并观察是否看到报错,是否存在设备没有响应,以确定其中是否存在恶意流量。

5.修复和监控

修复和监控不是循环的一部分,但应该包含在每次的工作流程中。我们解决了现存问题后,应该继续监控流量一段时间以确定问题是否已解决。

部分,但应该包含在每次的工作流程中。我们解决了现存问题后,应该继续监控流量一段时间以确定问题是否已解决。

OSI/TCP-IP模型

网络模型

在这里插入图片描述

上图并排展示了OSI模型和TCP-IP模型,这些模型是网络计算机之间如何处理通信的图形表示。

模型特征比较

特征OSITCP-IP
层数
灵活性严格的宽松的
依赖性协议独立和通用基于通用通信协议

​ 在检查这两个模型时,我们可以注意到 OSI 模型比 TCP-IP 模型分段更多。这是因为它被分解成小的功能块。OSI 模型的第一层到第四层专注于控制主机之间的数据传输。此控制包括从用于传输的物理介质到用于管理对话或传输数据的协议。第 五 层到第 七 层处理最终呈现给用户的封装数据。

OSI 模型被视为一切工作原理背后的理论,而 TCP-IP 模型更接近于网络的实际功能。TCP-IP 模型有点混合,规则也很灵活。TCP-IP 模型包括四层,其中 OSI 模型的第五层、第六层和第七层与 TCP-IP 模型的第四层对齐。第三层处理传输,第二层是网络层,与 OSI 中的网络层对齐,第一层是数据链路层,覆盖 OSI 模型的第二层和第一层。

​ 在整个模块中,我们将检查许多不同的协议数据单元 ( PDU),因此需要对它在理论上和在线路上的表现有一个功能性的理解。PDU 是由 OSI 模型各层封装的控制信息和数据组成的数据包。下面的分线图将显示两个模型中的层如何与 PDU 相匹配。下面的图将显示两个模型中的层如何与 PDU 相匹配。

PDU示例

在这里插入图片描述

在检查 PDU 时,我们需要牢记封装的概念。当我们的数据在协议栈中向下移动时,每一层都会将前一层的数据包装在一个新的气泡中,我们称之为封装。该气泡将该层的必要信息添加到 PDU 的标头中。此信息可能因级别而异,但它包括前一层所持有的内容、操作标志、协商通信所需的任何选项、源和目标 IP 地址、端口、传输和应用层协议。

PDU 数据包分解

在这里插入图片描述
上图向我们展示了一个 PDU 的组成并显示了 Wireshark 中的的数据包详细信息。

TCP / UDP传输机制

传输层有多种机制来确保数据从源到目的地的无缝传输。传输层被视为控制中心,来自更高层的应用程序数据必须向下遍历堆栈到达传输层。该层指示如何封装流量并将其发送给下层协议(IP 和 MAC)。一旦数据到达预期的接收者,传输层与网络层协议一起工作,负责以正确的顺序重新组装封装的数据。用于完成此任务的两种机制是传输控制 ( TCP) 和用户数据报协议 ( UDP)。

TCP协议与UDP协议对比

特征TCPUDP
建立连接TCP使用三次握手来确保建立连接UDP不确保目标正在监听
数据交付基于流的传递逐个数据包传递,源不关心目标是否处于活动状态
接收数据序列号和确认号用于验证数据UDP不关心
传输速率TCP的传输开销大并且传输速度慢UDP速度快但不可靠

通过查看上表,我们可以看出TCP和UDP提供了两种截然不同的数据传输方式。TCP 被认为是更可靠的协议,因为它使用流量控制和拥塞控制。相比之下,当我们关心速度而不是质量和验证时(如视频通话),UDP 是一种快速、即用即忘的协议。

从这个角度来看,在移动需要完整性而不是速度的数据时使用 TCP。例如,当我们使用 SSH 从一台主机连接到另一台主机时,将打开一个连接,该连接在您发出命令和执行操作时保持活动状态。这是 TCP 的一项功能,可确保我们与远程主机的对话不会中断。如果由于某种原因确实被中断,TCP 将不会重组数据包的部分片段并将其发送给应用程序。我们可以通过这种方式避免错误。

如果当前流量正在使用UDP协议,并且我们准备使用命令sudo passwd user更改远程主机上的用户密码,在更改过程中,部分消息会丢失,我们将无法知道该消息的其余部分发生了什么,并可能弄乱用户的密码。但TCP 通过确认收到的每个数据包来帮助防止这种情况发生,以确保目标主机在组装命令并将其发送到应用程序以进行操作之前已获取每个数据包。

另一方面,当我们需要快速响应或使用需要速度而不是完整性的应用程序时,我们需要用到UDP。以传输视频为例,用户不会注意到从视频中掉落的一两个像素。我们更关心的是观看视频时不会多次停下来缓冲下一段。另一个例子是 DNS,当主机请求目标域名时,主机正在寻找快速响应以继续其正在执行的过程。如果 DNS 请求被丢弃,最坏的情况是它会被重新发出,并没有什么更大的损失。由于此丢弃,用户将不会收到损坏的数据。

UDP 流量看起来像常规流量,它是一个单独的数据包,没有发送或接收的响应或确认,因此这里不需要过多赘述。我们可以看一下 TCP 及其建立连接的方式。

TCP 三次握手

TCP 可以使用会话将数据从服务器传送到客户端。这些会话是通过三次握手建立的。为了实现这一点, 在 TCP 标头中使用了一个称为标志的选项,我们在三次握手中看到的常见标志是SYN和ACK。当主机请求通过 TCP 与服务器进行对话时;

在这里插入图片描述

1.client发送一个 SYN 标志设置为 on 的数据包以及 TCP 标头中的其他选项。
1)发送一个同步数据包。它只会设置在来自主机和服务器的第一个数据包中,并通过两端的序列号达成一致来建立会话。
2)在此阶段许多其他选项都处于协商状态,包括窗口大小和最大段大小。

2.server使用 TCP 数据包进行响应,该数据包包括为序列号协商设置的 SYN 标志和用来确认前一个 SYN 数据包的 ACK 标志。
服务器发送的数据包中还将包括在 TCP 标头的选项字段中设置的 TCP 选项的一些更改。

3.client使用带有ACK 确认标志的 TCP 数据包进行响应。这个数据包结束了三次握手并建立了客户端和服务器之间的连接。

当它出现在实际数据包的输出中时,让我们快速看一下它的实际操作以熟悉它。

在这里插入图片描述检查此输出时,我们可以在第一行看到握手的开始。查看红框中突出显示的信息,我们可以看到我们的初始 SYN 标志已设置。如果我们查看绿框中带下划线的端口号,我们可以看到两个数字,57678和80。第一个数字是客户端使用的随机高端口号,第二个是服务器用于侦听传入 Web 请求连接的 HTTP 的80端口。在第 2 行中,我们可以看到服务器通过向相同端口发送SYN , ACK数据包来响应客户端。在第 3 行,我们可以看到客户端确认服务器的同步数据包(ACK)以建立连接。我们应该看到以下数据包模式:SYN → SYN,ACK → ACK

第4行的数据包告诉我们 HTTP 请求已发送,并且已建立会话,以流式传输所请求图像的数据。我们可以看到,随着流的传输,TCP 会为发送的每个数据块发送ACK标志。

四次挥手

我们已经了解了如何使用 TCP 建立会话;现在,让我们看看会话是如何结束的。

在这里插入图片描述
在上图中,在末尾可以看到一组类似于三次握手的数据包,这就是 TCP 关闭连接的方式。这里看到的 FIN 标志用于表示数据传输已完成,并且发送方正在请求终止连接。客户端确认收到数据(ACK),然后发送一个FIN,ACK开始终止会话。服务器响应确认标志并发送自己的 FIN(FIN,ACK)。最后,客户端确认会话已完成并关闭连接(ACK)。在会话终止之前,我们应该看到以下数据包模式:ACK → FIN,ACK → FIN,ACK → ACK

HTTP

超文本传输​​协议 ( HTTP) 是一种无状态应用层协议,自 1990 年以来一直在使用。HTTP 支持在客户端和服务器之间以明文形式传输数据。客户端将向服务器发送 HTTP 请求,请求资源。建立会话,服务器响应请求的媒体(HTML、图像、超链接、视频)。HTTP 在正常操作期间通过 TCP 使用端口 80 或 8000。在特殊情况下,它可以修改为使用备用端口,有时甚至可以使用 UDP。

HTTP方法
要执行类似获取网页、请求下载项目或发布最新推文等操作,都需要使用特定方法。这些方法定义了请求 URI 时采取的操作。方法:

方法描述
HEAD请求头是一种从服务器请求响应的安全方法,类似于 Get 请求,只是不包括消息体。这是获取有关服务器及其运行状态等信息的好方法。
GETGet 是最常用的方法。它从服务器请求信息和内容。例如,GET http://10.1.1.1/Webserver/index.html根据我们提供的 URI 从服务器请求 index.html 页面。
POSTPost 是一种根据请求中的字段向服务器提交信息的方式。例如,向 Facebook 帖子或网站论坛提交消息就是一个 POST 操作。实际采取的操作可能因服务器而异,我们应该注意发送回的响应代码以验证操作。
PUTPut 将数据添加到消息中并将其放置在请求的 URI 下。如果某个项目不存在,它将使用提供的数据创建一个。如果一个对象已经存在,新 PUT 将被认为是最新的,并且原对象将被修改。 PUT 和 POST 之间区别是:PUT 将在提供的 URI 处创建或更新对象,而 POST 将在提供的 URI 处创建子实体。
DELETE它将删除给定 URI 处的对象。
TRACE允许远程服务器调试。如果启用了 TRACE 方法,远程服务器将回应在其响应中发送的相同请求。
OPTIONSOptions 方法可以收集有关 HTTP 的信息。这样,我们就可以确定特定资源或服务器交互的要求,而无需实际从中请求数据或对象。
CONNECTConnect 被保留用于代理或类似防火墙的安全设备。Connect 允许通过 HTTP 建立SSL隧道。

方法 trace、options、delete、put 和 post 是可以允许的可选功能。这方面的一个例子是像博客文章这样的只读网页。客户端 PC 可以从页面请求资源,但不能修改、添加或删除一个或多个资源。

有关 HTTP 作为协议或其运作方式的更多信息,请参阅RFC:2616

HTTPS

HTTP Secure ( HTTPS) 是对 HTTP 协议的修改,目的是利用 TLS / SSL 与较旧的应用程序一起使用以确保数据安全。TLS 被用作加密机制来保护客户端和服务器之间的通信。TLS 可以将常规 HTTP 流量包装在 TLS 中,这意味着我们可以加密我们的整个对话,而不仅仅是发送或请求明文数据。在 TLS 机制到位之前,我们很容易受到中间人攻击和其他类型的侦察或劫持,这意味着如果与客户端或服务器位于同一局域网中的任何人正在监听数据包,那他们都可以查看 Web 流量。我们现在可以提高浏览器的安全性,使每个人都可以加密他们的搜索请求、会话或数据传输、银行交易等。

尽管它的基础是 HTTP,但 HTTPS 使用端口 443 和 8443 而不是标准端口 80。这是客户端向服务器发送它希望建立安全连接的信号。让我们看一下 HTTPS 流量的输出,并在一分钟内了解TLS握手。

TLS 握手
待更新...
在前几个数据包中,我们可以看到蓝色框中客户端使用端口 443 与服务器建立会话。这向服务器发出它希望使用 HTTPS 作为应用程序通信协议的信号。

通过 TCP 启动会话后,接下来客户端会发送 Client Hello 以开始 TLS 握手。在握手期间,要保证包括会话标识符、要使用的压缩算法、密码规范加密算法在内的多个参数达成一致。

会话建立后,所有数据和方法都将通过 TLS 连接发送,并显示为 TLS 应用数据(红框中的内容)。TLS 仍在使用 TCP 作为其传输协议,因此我们仍会看到来自端口 443 的确认数据包。

总结握手:
1.客户端和服务器交换问候消息表示双方连接参数一致。
2.客户端和服务器交换必要的加密参数以建立密钥。
3.客户端和服务器将交换 x.509 证书和加密信息,并允许在会话中进行身份验证。
4.利用先前的密钥生成主密钥并交换随机值。
5.客户端和服务器向 TLS 协议的记录层发出安全参数。
6.客户端和服务器验证双方分别计算出相同的安全参数,并且握手发生时没有被攻击者篡改。

加密本身是一个复杂而冗长的主题,值得单独讨论。本节简单总结了 HTTP 和 TLS 如何在 HTTPS 应用程序协议中提供安全性。有关 HTTPS 如何运作以及 TLS 如何执行安全操作的更多信息,请参阅RFC:2246

FTP

文件传输协议 ( FTP) 是一种应用层协议,可在计算设备之间实现快速数据传输。可以从命令行、Web 浏览器或FileZilla 等图形化客户端使用 FTP。FTP 本身是一种不安全的协议,很多用户已开始使用 SFTP 等工具通过安全通道传输文件,从 2020 年开始大多数浏览器逐步停止支持 FTP。

当我们考虑主机之间的通信时,我们通常会想到客户端和服务器通过单个套接字进行通信,客户端和服务器都在同一链路上发送命令和数据。在这方面,FTP 通过 TCP 使用端口 20 和 21。端口 20 用于数据传输,而端口 21 用于发出控制 FTP 会话的命令,并且FTP 支持用户身份验证以及匿名访问。

FTP 能够以active或者passive的模式运行。 Active 是 FTP 使用的默认操作方法,这意味着服务器监听客户端的控制命令端口,以了解使用哪个端口进行数据传输。被动模式使我们能够访问位于防火墙后面的 FTP 服务器。在这种情况下,客户端将发送PASV命令并等待服务器的响应,通知客户端使用哪个 IP 和端口进行数据传输通道连接。

FTP 命令和响应示例
在这里插入图片描述
上图显示了几个通过 FTP 命令通道发出的请求示例(绿色箭头),以及从 FTP 服务器发回的响应
(蓝色箭头)。有关每个命令及其作用的列表,请查看下表。

查看 FTP 流量时,我们可以看到通过端口 21 传递的一些常见命令包括:

命令描述
USER指定登录用户
PASS用户登录所用的密码
PORT更改当前使用的数据端口
PASV将与服务器的连接从主动模式切换为被动模式
LIST显示当前目录中的文件列表
CWD将当前的工作目录改为指定目录
PWD打印当前正在使用的目录
SIZE将返回指定文件的大小
RETR从FTP服务器检索文件
QUIT结束会话

这不是 FTP 控制命令的所有内容。有关 FTP 的更多信息,请参阅RFC:959。

SMB

服务器消息块 ( SMB) 是一种在 Windows 企业环境中最常见的协议之一,它是一种面向连接的协议,支持在主机之间共享资源。SMB协议需要对用户进行身份验证,以确保用户具有使用该资源或执行操作的正确权限。以前,SMB 在 UDP 137 和 138 端口上使用 NetBIOS 作为其传输机制。现在 SMB 支持在端口 445 上直接进行 TCP 传输,NetBIOS在 TCP 端口 139 上。

SMB 使我们能够轻松方便地访问打印机、共享驱动器、身份验证服务器等资源。因此,SMB 对攻击者也非常有吸引力。

与其他使用 TCP 作为传输机制的应用程序一样,它执行标准的三次握手,并且确认接收到的数据包。让我们具体看一下 SMB 流量的传输过程。

SMB On The Wireshark
待更新...
查看上图,我们可以看到它在每次建立会话时都会执行 TCP 握手(橙色方框)。源端口和目的端口正在使用端口 445(蓝色方框),通过 TCP 发送 SMB 流量。绿色方框的信息告诉我们一些关于 SMB 通信中发生的事情,通信过程中出现很多error。一个用户的一次或两次身份验证失败是相对常见的,但是大量重复失败可能表明存在未经授权的登录或使用窃取到的用户凭据进行移动。这是攻击者的常见策略,抓住经过身份验证的用户,窃取他们的凭据,利用他们横向移动。

这只是 SMB 使用的一个例子。服务器和主机之间的文件共享访问是很常见的。但一个主机访问其他主机上的文件共享并不常见。如果观察到这样的流量,我们要注意一下谁在请求连接,去哪里以及他们在做什么。

Tcpdunp基础知识

Tcpdump是一个命令行数据包嗅探器,可以直接从文件或网络接口捕获和解释数据帧。我们需要root权限来运行此工具,它使用pcap和libpca库,与混杂模式下的接口配对以侦听数据。可以使用Tcpdump查看和捕获局域网中任何设备的数据包。

安装Tcpdump

使用命令which tcpdump,若无返回值,我们使用以下命令安装tcpdump:

h0st@htb[/htb]$ sudo apt install tcpdump

使用Tcpdump捕获流量

由于有许多不同的功能和过滤器,我们应该首先熟悉该工具的基本功能。让我们讨论一些基本的 TCPDump 选项及命令的使用,并展示如何将流量保存到PCAP文件并从中读取。

基础捕获命令

这里列出了一些比较常用的选项,我们可以利用这些选项修改流量捕获方式。

选项描述
-D将显示任何可用于捕获的接口
-i选择要捕获的接口
-n不要解析主机名
-nn不要解析主机名或常见的端口
-e获取以太网头以及上层数据
-X以十六进制和 ASCII 显示数据包内容
-v,vv,vvv增加输出的详细程度
-c抓取特定数量的数据包,然后退出程序
-s定义要抓取多少数据包
-q打印较少的协议信息
-r从文件中读取
-w写入文件

可以使用man tcpdump查看tcpdump的全部用法

列出可用端口

以下是基本 Tcpdump 的一些常见用法:

kali@kali:~$ sudo tcpdump -D

1.eth0 [Up, Running, Connected]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.bluetooth0 (Bluetooth adapter number 0) [Wireless, Association status unknown]
5.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless]
6.nflog (Linux netfilter log (NFLOG) interface) [none]
7.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
8.dbus-system (D-Bus system bus) [none]
9.dbus-session (D-Bus session bus) [none]
选择要捕获的接口

上面的命令使用 sudo 权限调用 tcpdump 并列出可用的网络接口,我们可以告诉 tcpdump 它应该监听哪些接口。

kali@kali:~$ sudo tcpdump -i eth0

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
10:58:33.719241 IP 172.16.146.2.55260 > 172.67.1.1.https: Flags [P.], seq 1953742992:1953743073, ack 2034210498, win 501, length 81
10:58:33.747853 IP 172.67.1.1.https > 172.16.146.2.55260: Flags [.], ack 81, win 158, length 0
10:58:33.750393 IP 172.16.146.2.52195 > 172.16.146.1.domain: 7579+ PTR? 1.1.67.172.in-addr.arpa. (41)
禁用名称解析

在这个终端中,我们正在调用 tcpdump 并选择接口 eth0 来捕获流量。一旦我们发出命令,tcpdump 将开始嗅探流量并查看接口上的前几个数据包。通过-nn选项,我们告诉 TCPDump 不要将 IP 地址和端口号解析为它们的主机名和端口名称。

kali@kali:~$ sudo tcpdump -i eth0 -nn

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
11:02:35.580449 IP 172.16.146.2.48402 > 52.31.199.148.443: Flags [P.], seq 988167196:988167233, ack 1512376150, win 501, options [nop,nop,TS val 214282239 ecr 77421665], length 37
11:02:35.588695 IP 172.16.146.2.55272 > 172.67.1.1.443: Flags [P.], seq 940648841:940648916, ack 4248406693, win 501, length 75
11:02:35.654368 IP 172.67.1.1.443 > 172.16.146.2.55272: Flags [.], ack 75, win 70, length 0
11:02:35.728889 IP 52.31.199.148.443 > 172.16.146.2.48402: Flags [P.], seq 1:34, ack 37, win 118, options [nop,nop,TS val 77434740 ecr 214282239], length 33
11:02:35.728988 IP 172.16.146.2.48402 > 52.31.199.148.443: Flags [.], ack 34, win 501, options [nop,nop,TS val 214282388 ecr 77434740], length 0
11:02:35.729073 IP 52.31.199.148.443 > 172.16.146.2.48402: Flags [P.], seq 34:65, ack 37, win 118, options [nop,nop,TS val 77434740 ecr 214282239], length 31
11:02:35.729081 IP 172.16.146.2.48402 > 52.31.199.148.443: Flags [.], ack 65, win 501, options [nop,nop,TS val 214282388 ecr 77434740], length 0
11:02:35.729348 IP 52.31.199.148.443 > 172.16.146.2.48402: Flags [F.], seq 65, ack 37, win 118, options [nop,nop,TS val 77434740 ecr 214282239], length 0
显示以太网头

在使用-e选项时,我们要求 tcpdump 将以太网头连同其常规内容一起包含在输出中。通过检查输出,我们可以看到这是有效的。前面的字符由时间+IP修改为时间+主机的源 MAC 地址的组合。

kali@kali:~$ sudo tcpdump -i eth0 -e

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
11:05:45.982115 00:0c:29:97:52:65 (oui Unknown) > 8a:66:5a:11:8d:64 (oui Unknown), ethertype IPv4 (0x0800), length 103: 172.16.146.2.57142 > ec2-99-80-22-207.eu-west-1.compute.amazonaws.com.https: Flags [P.], seq 922951468:922951505, ack 1842875143, win 501, options [nop,nop,TS val 1368272062 ecr 65637925], length 37
11:05:45.989652 00:0c:29:97:52:65 (oui Unknown) > 8a:66:5a:11:8d:64 (oui Unknown), ethertype IPv4 (0x0800), length 129: 172.16.146.2.55272 > 172.67.1.1.https: Flags [P.], seq 940656124:940656199, ack 4248413119, win 501, length 75
11:05:46.047731 00:0c:29:97:52:65 (oui Unknown) > 8a:66:5a:11:8d:64 (oui Unknown), ethertype IPv4 (0x0800), length 85: 172.16.146.2.54006 > 172.16.146.1.domain: 31772+ PTR? 207.22.80.99.in-addr.arpa. (43)
11:05:46.049134 8a:66:5a:11:8d:64 (oui Unknown) > 00:0c:29:97:52:65 (oui Unknown), ethertype IPv4 (0x0800), length 147: 172.16.146.1.domain > 172.16.146.2.54006: 31772 1/0/0 PTR ec2-99-80-22-207.eu-west-1.compute.amazonaws.com. (105)

通过发出-X选项,我们可以在右侧获得一个 ASCII 输出,以解释与左侧十六进制输出相对应的任何明文。

输出 ASCII 和十六进制
kali@kali:~$ sudo tcpdump -i eth0 -X

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
11:10:34.972248 IP 172.16.146.2.57170 > ec2-99-80-22-207.eu-west-1.compute.amazonaws.com.https: Flags [P.], seq 2612172989:2612173026, ack 3165195759, win 501, options [nop,nop,TS val 1368561052 ecr 65712142], length 37
    0x0000:  4500 0059 4352 4000 4006 3f1b ac10 9202  E..YCR@.@.?.....
    0x0010:  6350 16cf df52 01bb 9bb2 98bd bca9 0def  cP...R..........
    0x0020:  8018 01f5 b87d 0000 0101 080a 5192 959c  .....}......Q...
    0x0030:  03ea b00e 1703 0300 2000 0000 0000 0000  ................
    0x0040:  0adb 84ac 34b4 910a 0fb4 2f49 9865 eb45  ....4...../I.e.E
    0x0050:  883c eafd 8266 3e23 88                   .<...f>#.
11:10:34.984582 IP 172.16.146.2.38732 > 172.16.146.1.domain: 22938+ A? app.hackthebox.eu. (35)
    0x0000:  4500 003f 2e6b 4000 4011 901e ac10 9202  E..?.k@.@.......
    0x0010:  ac10 9201 974c 0035 002b 7c61 599a 0100  .....L.5.+|aY...
    0x0020:  0001 0000 0000 0000 0361 7070 0a68 6163  .........app.hac
    0x0030:  6b74 6865 626f 7802 6575 0000 0100 01    kthebox.eu.....
11:10:35.055497 IP 172.16.146.2.43116 > 172.16.146.1.domain: 6524+ PTR? 207.22.80.99.in-addr.arpa. (43)
    0x0000:  4500 0047 2e72 4000 4011 900f ac10 9202  E..G.r@.@.......
    0x0010:  ac10 9201 a86c 0035 0033 7c69 197c 0100  .....l.5.3|i.|..
    0x0020:  0001 0000 0000 0000 0332 3037 0232 3202  .........207.22.
    0x0030:  3830 0239 3907 696e 2d61 6464 7204 6172  80.99.in-addr.ar
    0x0040:  7061 0000 0c00 01                        pa.....
组合多个Tcpdump选项

我们可以按照自己的习惯组合多个选项输出相应捕获信息,以下命令禁用名称解析、获取以太网头、输出十六进制和ASCII显示数据包内容并且以一定的详细程度输出。

kali@kali:~$ sudo tcpdump -i eth0 -nnvXX

tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
11:13:59.149599 IP (tos 0x0, ttl 64, id 24075, offset 0, flags [DF], proto TCP (6), length 89)
    172.16.146.2.42454 > 54.77.251.34.443: Flags [P.], cksum 0x6fce (incorrect -> 0xb042), seq 671020720:671020757, ack 3699222968, win 501, options [nop,nop,TS val 1154433101 ecr 1116647414], length 37
    0x0000:  8a66 5a11 8d64 000c 2997 5265 0800 4500  .fZ..d..).Re..E.
    0x0010:  0059 5e0b 4000 4006 6d11 ac10 9202 364d  .Y^.@.@.m.....6M
    0x0020:  fb22 a5d6 01bb 27fe f6b0 dc7d a9b8 8018  ."....'....}....
    0x0030:  01f5 6fce 0000 0101 080a 44cf 404d 428e  ..o.......D.@MB.
    0x0040:  aff6 1703 0300 2000 0000 0000 0000 09bb  ................
    0x0050:  38d9 d89a 2d70 73d5 a01e 9df7 2c48 5b8a  8...-ps.....,H[.
    0x0060:  d64d 8e42 2ccc 43                        .M.B,.C
11:13:59.157113 IP (tos 0x0, ttl 64, id 31823, offset 0, flags [DF], proto UDP (17), length 63)
    172.16.146.2.55351 > 172.16.146.1.53: 26460+ A? app.hackthebox.eu. (35)
    0x0000:  8a66 5a11 8d64 000c 2997 5265 0800 4500  .fZ..d..).Re..E.
    0x0010:  003f 7c4f 4000 4011 423a ac10 9202 ac10  .?|O@.@.B:......
    0x0020:  9201 d837 0035 002b 7c61 675c 0100 0001  ...7.5.+|ag\....
    0x0030:  0000 0000 0000 0361 7070 0a68 6163 6b74  .......app.hackt
    0x0040:  6865 626f 7802 6575 0000 0100 01         hebox.eu.....
11:13:59.158029 IP (tos 0x0, ttl 64, id 20784, offset 0, flags [none], proto UDP (17), length 111)
    172.16.146.1.53 > 172.16.146.2.55351: 26460 3/0/0 app.hackthebox.eu. A 104.20.55.68, app.hackthebox.eu. A 172.67.1.1, app.hackthebox.eu. A 104.20.66.68 (83)
    0x0000:  000c 2997 5265 8a66 5a11 8d64 0800 4500  ..).Re.fZ..d..E.
    0x0010:  006f 5130 0000 4011 ad29 ac10 9201 ac10  .oQ0..@..)......
    0x0020:  9202 0035 d837 005b 9d2e 675c 8180 0001  ...5.7.[..g\....
    0x0030:  0003 0000 0000 0361 7070 0a68 6163 6b74  .......app.hackt
    0x0040:  6865 626f 7802 6575 0000 0100 01c0 0c00  hebox.eu........
    0x0050:  0100 0100 0000 ab00 0468 1437 44c0 0c00  .........h.7D...
    0x0060:  0100 0100 0000 ab00 04ac 4301 01c0 0c00  ..........C.....
    0x0070:  0100 0100 0000 ab00 0468 1442 44         .........h.BD
11:13:59.158335 IP (tos 0x0, ttl 64, id 20242, offset 0, flags [DF], proto TCP (6), length 60)
    172.16.146.2.55416 > 172.67.1.1.443: Flags [S], cksum 0xeb85 (incorrect -> 0x72f7), seq 3766489491, win 64240, options [mss 1460,sackOK,TS val 508232750 ecr 0,nop,wscale 7], length 0
    0x0000:  8a66 5a11 8d64 000c 2997 5265 0800 4500  .fZ..d..).Re..E.
    0x0010:  003c 4f12 4000 4006 0053 ac10 9202 ac43  .<O.@.@..S.....C
    0x0020:  0101 d878 01bb e080 1193 0000 0000 a002  ...x............
    0x0030:  faf0 eb85 0000 0204 05b4 0402 080a 1e4b  ...............K
    0x0040:  042e 0000 0000 0103 0307                 ..........

Tcpdump 输出

刚开始查看 TCPDump 的输出时,可能会出现我们没有接触过的内容,接下来具体来看一下每一块返回内容。

Tcpdump Shell 分解

在这里插入图片描述

内容描述
黄色框时间戳,返回我们执行命令的具体时间
橙色框指出当前所用的协议和源端口、目的端口
绿色框显示用到的标志
红色框显示TCP握手期间的序列号(seq)和确认号(ack)
蓝色框客户端和服务器之间协商的TCP头相关内容
白色框识别流量类型,由于当前正在查看的流量是加密的,Tcpdump解析出加密的内容是FTP流量

使用Tcpdump的文件输入/输出

使用-w可以将捕获到的流量写入文件。我们在离线捕获流量时,要经常使用上面的过滤选项帮助调整我们的 PCAP 中存储的数据量,否则保存下来的文件很快会占满存储空间。以这种方式运行 tcpdump 时,不会像上面那样输出一长串内容,tcpdump 的所有输出都被保存到我们为捕获指定的文件。

将PCAP输出保存到文件
kali@kali:~$ sudo tcpdump -i eth0 -w ~/output.pcap

tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
10 packets captured
131 packets received by filter
0 packets dropped by kernel
从文件中读取输出

使用-r选项读取存储在中的捕获output.pcap。

kali@kali:~$ sudo tcpdump -r ~/output.pcap

reading from file /home/trey/output.pcap, link-type EN10MB (Ethernet), snapshot length 262144
11:15:40.321509 IP 172.16.146.2.57236 > ec2-99-80-22-207.eu-west-1.compute.amazonaws.com.https: Flags [P.], seq 2751910362:2751910399, ack 946558143, win 501, options [nop,nop,TS val 1368866401 ecr 65790024], length 37
11:15:40.337302 IP 172.16.146.2.55416 > 172.67.1.1.https: Flags [P.], seq 3766493458:3766493533, ack 4098207917, win 501, length 75
11:15:40.398103 IP 172.67.1.1.https > 172.16.146.2.55416: Flags [.], ack 75, win 73, length 0
11:15:40.457416 IP ec2-99-80-22-207.eu-west-1.compute.amazonaws.com.https > 172.16.146.2.57236: Flags [.], ack 37, win 118, options [nop,nop,TS val 65799068 ecr 1368866401], length 0
11:15:40.458582 IP ec2-99-80-22-207.eu-west-1.compute.amazonaws.com.https > 172.16.146.2.57236: Flags [P.], seq 34:65, ack 37, win 118, options [nop,nop,TS val 65799068 ecr 1368866401], length 31
11:15:40.458599 IP 172.16.146.2.57236 > ec2-99-80-22-207.eu-west-1.compute.amazonaws.com.https: Flags [.], ack 1, win 501, options [nop,nop,TS val 1368866538 ecr 65799068,nop,nop,sack 1 {34:65}], length 0
11:15:40.458643 IP ec2-99-80-22-207.eu-west-1.compute.amazonaws.com.https > 172.16.146.2.57236: Flags [P.], seq 1:34, ack 37, win 118, options [nop,nop,TS val 65799068 ecr 1368866401], length 33
11:15:40.458655 IP 172.16.146.2.57236 > ec2-99-80-22-207.eu-west-1.compute.amazonaws.com.https: Flags [.], ack 65, win 501, options [nop,nop,TS val 1368866538 ecr 65799068], length 0
11:15:40.458915 IP 172.16.146.2.57236 > ec2-99-80-22-207.eu-west-1.compute.amazonaws.com.https: Flags [P.], seq 37:68, ack 65, win 501, options [nop,nop,TS val 1368866539 ecr 65799068], length 31
11:15:40.458964 IP 172.16.146.2.57236 > ec2-99-80-22-207.eu-west-1.compute.amazonaws.com.https: Flags [F.], seq 68, ack 65, win 501, options [nop,nop,TS val 1368866539 ecr 65799068], length 0

Tcpdump数据包过滤

过滤语法

主机过滤

待更新…

源和目标过滤

待更新…

端口过滤

待更新…

预捕获过滤和捕获后处理

待更新…

技巧

待更新…

使用grep处理捕获结果

待更新…

Tcpdump流量分析实战

待更新…

使用 Wireshark 进行分析

待更新…

在 Linux 上安装 Wireshark

待更新…

Wireshark图形化界面

待更新…

Wireshark 捕获数据包

待更新…

基础知识

待更新…

捕获前和捕获后的处理和过滤

待更新…

应用过滤器

待更新…

Wireshare高级用法

待更新…

插件

待更新…

统计和分析

待更新…

跟随TCP流

待更新…

过滤特定TCP流

待更新…

从捕获流量中提取数据和文件

待更新…

FTP分区

待更新…

FTP过滤器

待更新…

Wireshark流量分析实战

待更新…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zyu0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值