购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 网络流量分析

网络流量分析是指利用分析技术和统计手段对网络数据包进行处理,从而实现对网络的行为分析、性能分析和故障诊断等。它也是网络取证中经常使用的手段。

在几乎所有的CTF比赛中,都会涉及对网络流量分析能力的考查,尤其是在企业或者行业内部的比赛中,此类题目属于必考题目。这类题目的难度适中,涉及的知识面广泛,能有效结合企业内部的业务,因此建议各位读者重点关注并熟练掌握。

进行网络流量分析需要掌握多方面的知识,不仅涉及杂项知识,还需要结合Web渗透等方面的基础知识。本节首先介绍网络协议的基础概念,然后介绍Wireshark的使用方法,接着说明网络流量分析的通用步骤,并分析HTTP、FTP、Telnet、DNS、USB、TLS等协议的常见考查点。

1.2.0 网络协议的基础知识

网络协议是为在网络中进行数据交换而建立的规则、标准或约定的集合,通常也简称为协议。互联网的核心是一系列协议,总称为互联网协议(Internet Protocol Suite),它们对计算机如何连接和组网做出了详尽的规定,一个协议通常只为一个目的而设计。那么应该如何设计网络协议呢?

ARPANET(阿帕网)是美国国防高级研究计划局开发的世界上第一个运营的数据包交换网络,是全球互联网的鼻祖。但是,ARPANET无法和使用不同操作系统的计算机进行网络交流,这引发了研究者的思考。ARPANET的研制经验表明,对于非常复杂的网络协议,其结构应该是 层次式 的。1984年,国际标准化组织(International Organization for Standardization, ISO)发布了ISO/IEC 7498标准,它定义了网络互连的7层框架,也就是开放式系统互连参考模型(Open System Interconnection Reference Model, OSI/RM),其体系结构如表1.2.1所示。

表1.2.1 OSI/RM体系结构

OSI期望达到一种理想境界,即全球网络都遵循这个统一的标准,因此在标准制定的过程中试图涵盖当时最先进的技术,导致制定周期漫长。当OSI标准还在讨论时,一种新的网络协议在工业界被广泛采纳,而且被众多厂商使用,这就是TCP/IP。于是,OSI面临着非常尴尬的局面:大公司和厂商都认可OSI,但几乎找不到厂商能生产出符合OSI标准的商用产品;而基于TCP/IP的互联网已抢先在全球大范围运行,成为事实上的国际标准。

传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol, TCP/IP)包含 应用层、传输层(也称为运输层)、网络层(也称为网际层)和网络接口层 。但在学习计算机网络原理时,往往采取折中的方法,综合OSI和TCP/IP的优点,采用一个五层协议的体系结构,这样的体系结构称为协议栈。不同协议栈的体系如图1.2.1所示。

图1.2.1 不同协议栈体系结构

每层中的常见网络协议如表1.2.2所示。

表1.2.2 常见网络协议

有了协议栈的概念,我们就可以描述主机之间是如何通信的,如图1.2.2所示。主机A、B、C均有自己的网络协议栈,A向B发起请求,需要使用协议栈中各层提供的服务。图中的客户端程序和服务端程序都可以看作进程,若仅考虑进程之间的交互,则可以看作虚线表示的连接。对于相应的协议,我们可以按照下面的描述简单理解,网络层的IP协议头部会保存要连接的主机的IP地址,传输层的TCP或UDP的头部会保存端口信息,IP地址可以确定连接的主机,但不能确定是哪个进程,端口信息可以确定和哪个进程完成信息交互。

图1.2.2 网络通信过程

1.2.1 Wireshark的基本使用方法

当前,网络分析工具种类众多,常用的工具有Wireshark、CommView、Fiddler等,本节重点介绍Wireshark的使用方法。Wireshark是目前广泛应用的网络协议分析器,大部分企业、政府机构和教育机构都使用它作为网络分析工具。Wireshark的前身是1998年由Gerald Combs开发的Ethereal,出于一些商业原因,2006年起使用Wireshark这个名字。

在使用过程中,Wireshark更像一个“观测者”,把所有网络数据包忠实地捕获并展现出来。使用Wireshark的优势在于:安装方便,支持跨平台;图形化操作界面简单易用,操作友好,能提供多种辅助分析功能。但是,Wireshark并不是万能的,其缺点十分明显,例如,不能处理网络事务,只能“测量”(监视)网络;不能发送网络包或完成网络交互;不能作为入侵检测软件发现网络异常流量;不能修改网络数据包(也叫网络封包)的内容。

Wireshark有两大功能。第一个功能是对指定网卡实现“抓包”(正式的说法为“数据包捕获”),即捕获从网卡发送或者接收的每一个数据包,从而实时分析网络流量。直接打开Wireshark,可以看到网卡选择界面,如图1.2.3所示。第二个功能是可以打开保存好的网络数据包,离线分析网络流量,这也是目前CTF比赛中常见的题目类型。Wireshark安装完成后,会关联pcap、pcapng等后缀的文件,双击打开这些文件,就可以在Wireshark中看到离线网络流量了。

图1.2.3 网卡选择界面

打开pcap离线文件,Wireshark的主界面如图1.2.4所示。本节演示所使用的Wireshark版本为3.4.0,建议读者实践时下载最新版。“数据包窗口”显示每个单独的数据包,默认按照时间顺序显示。“TCP/IP协议栈解析窗口”用TCP/IP协议栈解析在“数据包窗口”选中的数据包。第一行“Frame”显示第几个数据包,以及数据包总长度等信息;从第二行开始,按照对应的协议逐层解析。例如,第1个数据包是TCP三次握手的第一个包,所以只解析到传输层的TCP,每层协议都可以通过单击三角符号显示更详细的解析结果。“数据显示窗口”以十六进制的形式对所有数据逐字节显示,其中很多数据都是不可打印字符。在“TCP/IP协议栈解析窗口”选择不同的字段,“数据显示窗口”中的相应数据会变为蓝色背景

图1.2.4 Wireshark的主界面

图1.2.4中还有两部分需要注意,即左上角的“应用显示过滤器”和右下角的“分组”,见图1.2.5和图1.2.6。“应用显示过滤器”决定哪些数据包被显示,如果表达式为空,则所有包都被展示。“分组”是指pcap文件中一共有多少个网络数据包,“已显示”是指满足“应用显示过滤器”条件后展示的数据包个数。

图1.2.5 应用显示过滤器

图1.2.6 分组显示

1.显示过滤器的使用

在显示过滤器中输入表达式,如果表达式输入错误,则背景变为红色;如果表达式输入正确,背景会变为绿色。输入完成后,按回车键,使过滤规则生效。那么如何输入正确的表达式?这里我们推荐两种方法。

方法一 :利用Wireshark自带的表达式生成器。单击“分析”按钮后选择“Display Filter Expression”,打开表达式生成器,见图1.2.7。打开后的界面如图1.2.8所示,“字段名称”是各个协议,展开后可以看到具体的协议字段;“关系”是指对选中字段的具体逻辑要求。图中的过滤规则为“http.request.method=="GET"”,即把HTTP的GET请求包都过滤出来。如果表达式正确的话,背景会变为绿色。

图1.2.7 如何打开表达式生成器

图1.2.8 过滤表达式

当对过滤规则不熟悉时,可以采用这种方法,但是通过表达式生成器只能生成一条规则,不能实现多个规则的并列。

方法二 :利用显示过滤器的规则补全功能。直接在显示过滤器中输入过滤规则,大部分协议名的小写都可以直接作为过滤规则使用,例如,输入“http”,就可以把所有包含HTTP协议的数据包过滤出来。在协议名后面输入点(.),显示过滤器会把相关字段自动显示出来。如图1.2.9所示,输入“req”,会把请求相关的字段自动显示出来,这样有助于快速补全表达式。这种方法的优点在于可以任意建立规则,缺点是如果对规则不熟悉,就需要花大量时间完善表达式,建议各位读者熟练掌握一些常用的过滤规则的用法。

图1.2.9 显示过滤器规则自动补全

多个表达式并列时,可以用“&&”或者“||”。“&&”代表“与”,表示需要同时满足多个规则;“||”代表“或”,表示多个规则中有一个被满足,表达式即可成立。

2.统计功能

Wireshark的工具栏中自带统计功能,这些功能对流量分析具有关键作用,可以快速实现对当前离线数据包中的协议类型统计、数据包过滤、流量统计和HTTP请求提取等功能,如图1.2.10所示。下面重点介绍几个常用的统计功能。

(1)协议分级统计

协议分级统计是对显示过滤器中过滤出的数据包,按TCP/IP协议栈从底层向高层逐层进行统计,显示每个协议的数据包数、字节数以及各协议所占的百分比,如图1.2.11所示。如果一个数据包解析后最高层协议是TCP,那么该数据包的字节数等信息会被统计到Frame、Ethernet、IPv4和TCP四个层次中。“结束分组”和“结束字节”分别指该协议作为最高层协议时的包数和字节数,可以理解为以该协议作为数据包解析的结束。

图1.2.10 统计功能

协议分级统计是流量分析中最常使用的工具,通过这个工具可以直观、全面地了解当前所有数据包的流量,包括存在哪些协议以及各协议的占比。

对于想要过滤出来的协议,可以单击鼠标左键选中协议名称,再单击鼠标右键选择“作为过滤器应用”,然后选择“选中”,就可以把该协议对应的数据包全部过滤出来,显示过滤器也会随之变化,见图1.2.12。

图1.2.11 协议分级结果

图1.2.12 在协议分级过滤指定协议

(2)端点统计

端点是指网络上能够发送或者接收数据的一台设备。Wireshark的端点统计可以理解为根据Ethernet、IP、TCP或UDP,统计各地址接收或者发送的数据量,如图1.2.13所示。在图中可以选择不同的协议层级,Ethernet对应MAC地址,IP只有IP地址,TCP和UDP中包含IP地址和端口信息。各字段的含义如表1.2.3所示。

图1.2.13 端点统计结果

表1.2.3 端点统计中各字段的含义

(3)会话统计

会话统计功能可以统计两个端点之间发送/接收数据包的数量、字节大小以及数据的流向情况,也可以通过排序来判断占用最大带宽的主机,如图1.2.14所示。

图1.2.14 会话统计结果

(4)HTTP统计

HTTP统计包括四个功能,分别是分组计数器、请求、负载分配和请求序列,如图1.2.15所示。“分组计数器”包含HTTP请求类型和响应代码的统计信息。 “请求”是经常用到的一个重要功能,包含主机(host)和URI的完整信息 。“负载分配”会展示基于服务器地址和主机的HTTP请求和响应统计信息,从而了解数据包在各网站的分布情况。“请求序列”是Wireshark2.6之后版本新增的功能,使用HTTP的Referer和Location头将捕获的HTTP请求作为树进行展示,分析人员就能够看到一个HTTP请求如何导向下一个HTTP请求。

图1.2.15 HTTP统计功能

3.追踪流

流通常指一个由源IP地址、源端口、目的IP地址、目的端口、应用协议组成的五元组。这个概念在流量分析中经常被使用。Wireshark的追踪流功能其实是根据{IP A, port A, IP B, port B}这四个元素进行划分,针对某一协议(如TCP),将五元组[IP A, port A, IP B, port B, TCP]和[IP B, port B, IP A, port A, TCP]的信息映射到一个流中,从而实现追踪某条TCP流完整会话的功能。

追踪流的具体方法为:在数据包窗口选中数据包,单击鼠标右键,即可看到追踪流选项,如图1.2.16所示。可以根据要分析的协议,选择追踪TCP流、UDP流或者HTTP流等。如果是分析HTTP,建议选择追踪HTTP流,这是因为服务器返回包会采用gzip压缩数据,如果对HTTP的数据包选择追踪TCP流,那么看到的是压缩后传输的数据内容;如果选择追踪HTTP流,就可以看到解压后的数据内容。

图1.2.16 追踪流

我们可以利用一个技巧来简单、方便地查看到每一条TCP连接流的内容。对任意TCP数据包,选择“追踪TCP流”,可以看到追踪得到的信息,显示过滤器的过滤规则也会发生变化。例如,对于“tcp.stream eq 13”,通过修改数字,可以从0开始查看到每一条TCP流的信息。对于过滤出来的任意一个数据包,再选择“追踪TCP流”,就能看到Wireshark整理后的完整会话结果。

4.提取文件或数据

当我们千辛万苦地找到了关键协议后,下一个考查重点就是如何从中提取重要的文件或者数据。我们以HTTP协议为例,介绍三种文件提取方法。首先简单介绍下HTTP中的GET和POST请求方法,GET方法是客户端向服务器请求资源(文本、图像、音视频等),服务器把相应的资源返回给客户端;POST方法是向服务器提交数据处理请求(例如提交表单或者上传文件),数据被包含在请求体中。针对GET方法,要提取的文件或数据应该在服务器的返回包中;而对于POST方法,要提取的关键文件或数据在客户端的请求包中,这个细节上的区别需要读者们重点掌握。

接下来,我们以图1.2.17中的数据包为例(银行卡里的秘密.pcapng),详细介绍三种提取方法。首先过滤出所有的HTTP包(可以在显示过滤器中直接输入http),图中只有两个HTTP数据包,客户端通过GET方法向服务器请求flag.zip压缩包,服务器将压缩包返回给客户端。现在,我们希望提取flag.zip压缩包,因为采用GET方法,所以压缩包在服务器的返回包中,也就是在第二个HTTP数据包中。

图1.2.17 HTTP协议过滤结果

方法一:导出对象法 。这种方法依赖于Wireshark自带的解析功能,设备之间通过网络传输的文件在Wireshark中被称为“对象”。单击“文件”工具栏,可以找到“导出对象”选项,如图1.2.18所示,Wireshark可以根据不同的协议自动导出文件,导出结果如图1.2.19所示。单击“save”按钮,即可导出zip压缩包。用这种方法导出时,文件名由Wireshark根据流量自动生成。

这是一种“傻瓜式”方法,是三种方法中操作最为简单的一种,理论上可以把某个协议传输的文件全部导出。但是,当离线流量太大或者传输文件头部受损时,这种方法会失效。而且,导出对象法目前仅支持5种协议,应用范围十分有限,对于大量通过其他协议传输的文件,只能采用人工提取方式。

图1.2.18 导出HTTP对象

方法二:导出分组字节流法 。这是一种完全由人工操作的提取方法,具有广泛的适用性,需要读者们熟练掌握。根据上面的分析,压缩包在服务器的返回包中。在“数据包窗口”单击第二个HTTP包,可以查看协议解析结果,如图1.2.20所示。在HTTP协议下面有Media Type层,这个就是服务器返回的文件。将树状解析结果展开,可以看到“application/zip”,说明文件是zip格式,共197个字节。单击鼠标左键选中“application/zip”行,再单击鼠标右键,如图1.2.21所示,选择“导出分组字节流”,弹出的界面如图1.2.22所示。导出的文件需要手动命名,默认是*.bin文件,这要求我们对文件格式以及流量的交互信息非常熟悉。

图1.2.19 HTTP协议导出对象结果

图1.2.20 HTTP过滤结果

图1.2.21 如何选择导出分组字节流

图1.2.22 保存时注意文件名和后缀

方法三:binwalk提取法 。利用binwalk对离线流量文件进行检测和提取的方法在杂项题目中有一定的普适性。事实上,几乎所有杂项题目都可以用binwalk检测。用binwalk对pcap文件检测后,再添加“-e”选项,就可以提取出对应的文件。当离线流量较小时,这种方法比较有效,并且不用考虑协议的细节。但是,当流量较大时,提取出的文件太多,会影响进一步分析。binwalk检测的原理是根据文件头特征,如果流量中文件的文件头损坏,binwalk也无法提取成功,这时仍需要手工提取。因此,建议大家掌握第二种提取方法。binwalk的使用方法会在1.5.1节中详细介绍,这里不做更多的说明。

5.导出特定数据包

CTF比赛中拿到的离线流量往往有很多杂包,如果文件大小达到上百兆,那么打开文件和过滤数据包会占用较长时间。此时,可以把某种协议的数据包单独过滤出来再保存。以过滤HTTP数据包为例,具体方法为在“显示过滤器”中输入“http”,单击回车键使过滤条件生效。单击“文件”,选择“导出特定分组”,如图1.2.23所示,即可把过滤出的数据包保存成一个新的离线文件,方便后续做进一步分析。需要特别说明的是,在过滤出HTTP数据包后,在“文件”中选择“另存为”是没有用的。

图1.2.23 导出特定分组

1.2.2 CTF流量分析的通用方法

在CTF比赛或者企业的“蓝队”考核中,流量分析具有一定的“套路”。本节为流量分析的初学者介绍一种通用方法,目的是快速定位关键协议,具体流程如图1.2.24所示。本方法适合初学者快速上手分析流量,随着相关知识的积累,初学者可以根据分析需求对方法进行调整和改进。

图1.2.24 流量分析的通用方法

打开离线流量文件后,可以先观察一下分组数。如果分组数小于1000个,可以手工逐个数据包查看。因为当数据包个数较少时,协议分级的效果并不明显。而且,如果题目的分组数较少,说明考点较为直接,杂包过滤可能并不是重点。

如果分组数较多,通过 协议分级 可以看到各协议所占的比例。如果流量中存在Telnet、FTP、ICMP等明文传输协议,建议通过追踪流或过滤的方法,优先查看这些协议的通信过程。

如果没有上述协议,而是存在大量的HTTP(所谓“大量”,一般是指字节数占比较大),那么HTTP就是接下来分析的重点。通过“ 统计-HTTP-请求 ”工具,可以查看所有URL的详细信息。对于一般的Web流量,通过URL就可以看到所有请求的资源。如果是SQL注入攻击流量,在URL中会有大量的SQL特征。如果是菜刀、蚁剑等工具生成的流量,会存在大量的POST包,通过逐个查看POST请求的返回包,也可以掌握通信过程。关于HTTP的详细分析方法会在后面内容中说明。

如果离线文件中均无上述协议,就需要结合题目的描述进行针对性分析。例如,若题目中存在大量DNS协议,就需要重点关注查询的域名以及对该域名的响应。假如存在USB协议,则需要结合协议载荷判断设备类型,再根据设备通信规则复原出传输的信息。

需要说明的是,本方法不可能也没有必要覆盖所有协议的分析方法,本方法主要是提供一种分析思路,以便快速过滤杂包,发现关键协议,再针对关键协议结合其通信特征掌握通信的完整过程。从实践来看,流量分析不存在唯一、固定的方法,只要能满足分析需求就是好方法。但是,CTF比赛作为一种选拔性或者考核性的竞赛,题目往往具有一定的规律性,如果选手们能提前针对各类型题目总结出解题思路,就可以达到事半功倍的效果。本节的目的在于抛砖引玉,引导初学者总结出自己的“解题套路”。限于作者水平,本节所提出的方法具有一定的局限性,读者可基于自身已有的知识体系加以选择和参考。

本章后续内容会总结CTF比赛中常见协议的各个考点,但因篇幅所限,只能总结一些常见考查内容。随着CTF比赛的增多,知识点的考查深度会持续增加,已经考查过知识点可能不再出现。初学者应重点掌握协议特征、解题思路以及实操方法,不要过度关注考点的具体内容。

1.2.3 ICMP

ICMP(Internet Control Message Protocol)也称为Internet控制报文协议,它允许主机或路由器报告差错情况,并提供有关异常的报告。这些控制消息虽然不传输用户数据,但是对于用户数据的传递起着重要作用。需要注意的是:ICMP并不是高层协议,它和IP同属于网络层,但是ICMP报文封装到IP数据报中。ICMP报文如图1.2.25所示,它的报文头部为8字节,定义如下:

图1.2.25 ICMP报文

ICMP的一个重要应用是分组网间探测(Packet InterNet Groper, PING),它可以用于测试两个主机之间的连通性。PING使用了ICMP回送(echo)请求与回送回答报文。ICMP echo报文如下所示。

不难发现,数据部分可以用来传输消息。不同操作系统的数据部分的填充方法略有区别:在Windows系统下采用小写字母a~w循环;在Linux系统下,使用“-p”选项可以指定发送的数据,默认是0x00~0xFF的循环。

此时,读者们应该能想到ICMP的一种出题方法,就是在数据部分隐藏flag,将flag编码或者加密后经ICMP请求包传输。这个考点较为简单,在发现ICMP数据部分异常后,就转化为上节介绍的常见编码的问题。

数据部分明文传输的相关题目比较简单,为了增加比赛难度,一些出题人会想出新的考点。ICMP的另一个考点是以数据部分的长度表示要传输的信息,其本质是基于文本的信息隐藏。

【例题】fetus_pcap.pcap

【题目来源】 2019工业信息安全技能大赛个人线上赛。

【题目描述】 从流量中找到flag。

【解题思路】 文件只有230个数据包,都是ICMP echo的请求和响应。观察echo请求的数据部分,发现是用Base64编码后的字符串。以“icmp.type==8”作为规则过滤出所有ICMP echo请求包,提取出所有数据段后进行Base64解码(如何提取呢?提示:采用手工或者tshark),并没有发现flag。观察每个请求包数据部分长度,分别是79、106、112、99、98……可以发现,它们都在可打印字符范围内,于是把长度转换为ASCII码,得到:Ojpcbm1vbmdvZGI6IToxNzg0MzowOjk5OTk5Ojc6OjpcbnVidW50dTokNiRMaEhSb21URSRNN0M0bjg0VWNGTEFHe3h4MmI4YV82bW02NGNfZnNvY2lldHl9Ojo=。进行Base64解码后,得到:::\nmongodb:!:17843:0:99999:7:::\nubuntu:$6$LhHRomTE$M7C4n84UcFLAG{xx2b8a_6mm64c_fsociety}::,在最后部分可以发现flag,即FLAG{xx2b8a_6mm64c_fsociety}。

1.2.4 Telnet

Telnet是Internet远程登录服务的标准协议和主要方式,为用户提供了在本地计算机上远程管理主机的能力。实际上,Telnet的出现早于TCP/IP协议簇的其他应用层协议。它默认TCP端口号为23。Telnet的一个特点是以明文方式传输所有数据,这也意味着如果捕获了Telnet网络流量,就可能找到远程登录的用户名和密码。作为一种不安全的远程登录协议,Telnet几乎被SSH协议所替代,只有在某些场景下才会使用Telnet远程登录。

Telnet有四种工作模式,这里重点介绍两种。第一种是一次一字符模式,当用户输入命令时, 每按一个键,Telnet客户端会立刻把该字符发送给远程服务器 ,然后从TCP连接上读取收到的字符,返回给Telnet客户端,显示给用户看。大部分Telnet默认采用这种工作模式。第二种是准行模式(kludge line mode),用户每键入一行信息,客户端向服务器发送一次信息。

Telnet的考点主要是获取用户登录时的正确密码,通常采用一次一字符模式进行传输。下面举例说明。

【例题】packet2.pcapng

【题目描述】 从流量中找到flag。

【解题思路】 协议分级后发现Telnet协议,将其过滤出来,选择追踪TCP流,如图1.2.26所示。红色字段是客户端向服务器发送的数据,蓝色字段是服务器向客户端发送的数据。在login(也就是用户名输入)时,我们发现客户端每发一个字符,服务端就把这个字符再发一遍,符合一次一字符模式的传输特征。Password字段中有一些“.”,这其实是不可打印字符。把图1.2.26中的“Show data as”选择为“HEX转储”,如图1.2.27所示,可以看到客户端输入了ASCII字符0x08,这个字符是backspace,也就是删除,这意味着用户在输入过程中删除了一些字符。那么如何确定删除了多少个字符?一个简单的方法是看客户端发了多少个0x08。所以,本题中正确的密码是0p-!#cttT。

图1.2.26 Telnet追踪TCP流结果

图1.2.27 以“HEX转储”方式显示

1.2.5 FTP

FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议簇中的应用层协议之一。FTP服务包括FTP服务器和客户端,其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,因此在网络上传输大的文件时,一般也采用该协议。

默认情况下,FTP使用TCP端口中的20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则最终使用哪个端口要由服务器端和客户端协商决定。

FTP命令由3~4个字母组成,命令后面跟参数,用空格分开。每个命令都以“\r\n”结束。常用的FTP命令有USER、PASS、SIZE、REST、CWD、RETR、PASV、PORT、QUIT等。各命令含义如下:

❑USER:指定用户名。通常是控制连接后第一个发出的命令。“USER name\r\n”表示以用户名name登录。

❑PASS:指定用户密码。该命令紧跟在USER命令后。“PASS 123456\r\n”表示密码为123456。

❑SIZE:从服务器上返回指定文件的大小。“SIZE file.txt\r\n”表示如果file.txt文件存在,则返回该文件的大小。

❑CWD:改变工作目录,如“CWD dirname\r\n”。

❑PASV:让服务器在数据端口监听,进入被动模式,如“PASV\r\n”。

❑PORT:告诉FTP服务器客户端监听的端口号,让服务器采用主动模式连接客户端,如“PORT h1,h2,h3,h4,p1,p2”。

❑RETR:下载文件。“RETR file.txt\r\n”表示下载文件file.txt。

❑STOR:上传文件。“STOR file.txt\r\n”表示上传文件file.txt。

❑REST:该命令并不传送文件,而是忽略指定点后的数据。此命令后应该跟其他要求文件传输的FTP命令。比如,“REST 100\r\n”表示重新指定文件传送的偏移量为100字节。

❑QUIT:关闭与服务器的连接。

【例题】hehe.pcapng

【题目描述】 从流量中找到flag。

【解题思路】 通过协议分级,发现流量中存在FTP以及FTP Data, FTP中包含所有传输控制信息,FTP Data包含传输的文件数据。我们先通过追踪TCP流查看FTP中的内容,如图1.2.28所示。客户端下载了flag.zip和passwd.txt各两次。文件数据在FTP Data中,见图1.2.29,选中FTP Data的第二个数据包,在解析窗口选中“FTP Data”行,导出分组字节流,即可提取出flag.zip文件。同理,可以提取出passwd.txt文件。利用passwd.txt中的信息解压flag.zip,就可以得到flag。

图1.2.28 追踪TCP流的结果

1.2.6 DNS

TCP/IP协议簇中使用IP地址和端口号来确定网络上某一台主机中的某一个服务,那么为什么不用域名来直接进行通信呢?因为IP地址的长度是固定的,而域名的长度是可变的,可变的域名不便于计算机处理,而IP地址对于用户来说不方便记忆,但域名便于用户使用。总结来说就是:IP地址是面向主机的,而域名是面向用户的。

图1.2.29 FTP-Data的过滤结果

DNS(Domain Name System)也称为域名系统,是将域名和IP地址相互映射的一个分布式数据库,能够让用户更方便地访问互联网。DNS协议运行在UDP/TCP之上,默认端口号是53。图1.2.30是DNS域名查询的一个例子,query表示查询,query response是对查询的响应;0xf4d7是会话标识,因为大部分DNS报文是基于UDP的,通过会话标识可以区分DNS应答报文是对哪个请求的响应。图中查询的域名是google.ca,查询到的I P地址是173.194.46.88。Wireshark对DNS的解析结果见图1.2.31,图中解析了DNS查询响应报文,Queries下面给出的是查询的域名,Answers下面给出的是域名对应的IP地址。本例中,google.ca共查询到3个IP地址。

图1.2.30 DNS域名查询

图1.2.31 Wireshark对DNS查询响应报文解析结果

【例题】DNS.pcap

【题目来源】 2017年央企大赛决赛。

【题目描述】 从流量中找到flag。

【解题思路】 通过查询协议分级信息,结合题目名称,发现DNS报文数据量比较大,考虑重点查看DNS。在显示过滤器中输入“dns”后,还能看到一些ICMP报文,修改过滤规则为“dns&&!icmp”,把ICMP报文过滤掉。过滤出来的第一个数据包查询的域名为5647687063794270.192.168.191.129,这个域名有明显的问题。考虑把同一个IP地址请求的DNS都过滤出来,新的过滤规则是“dns&&!icmp&&ip.addr==192.168.191.128”,可以发现这个IP地址把每个异常域名都请求了2次。把所有可疑域名提取出来,去除所有的“.192.168.191.129”,重复项仅保留一个,再拼接到一起,就得到:56476870637942706379426849484e6c59334a6c64434230636d4675633231706448526c5a43423061484a766457646f494752756379427864575679655341364b534247544546484c555a554e44646a545667794e6e425865555a5453545a53554664685533493157564a33,利用ASCII解码得到VGhpcyBpcyBhIHNlY3JldCB0cmFuc21pdHRlZCB0aHJvdWdoIGRucyBxdWVyeSA6KSBGTEFHLUZUNDdjTVgyNnBXeUZTSTZSUFdhU3I1WVJ3,再用Base64解码,得到This is a secret transmitted through dns query:)FLAG-FT47cMX26pWyFSI6RPWaSr5Yrw。

1.2.7 HTTP

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,目前通过浏览器访问页面几乎都是基于HTTP完成的。该协议默认占用TCP的80端口。在CTF比赛中,HTTP非常常见。由于HTTP的细节十分繁杂,本节只介绍最基础的内容。首先介绍HTTP请求格式,如图1.2.32所示,HTTP请求包含头部(header)和实体(body,也称为主体),头部的第一行包括方法、URI和协议版本,以空格分隔;头部中还有其他字段,每个字段占一行,例如,Host说明访问网站的域名或者IP地址,User-Agent说明用户使用的操作系统和浏览器等信息。头部字段是可以任意添加和修改的。头部的行之间以“\r\n”分隔,头部和实体之间用两个“\r\n”分隔。HTTP响应的格式见图1.2.33,和请求格式一致。

图1.2.32 HTTP请求格式

鉴于HTTP协议的灵活性和使用的广泛性,其考点并不固定。一般而言,选手们要重点关注某些首部的特殊字段或者HTTP传输的具体内容。下面为大家介绍CTF比赛中HTTP的三个常见考点,希望读者们重点掌握。

图1.2.33 HTTP响应格式

考点1:HTTP头部字段【例题】攻击事件.pcap

【题目来源】 2017年国家电网选拔。

【题目描述】 从流量中找到flag。

【解题思路】 由协议分级,发现数据包中有大量HTTP数据包。过滤出HTTP后,查看所有HTTP请求,在请求中并没有发现login、shell等较为明显的请求。此时,可以考虑搜索特殊字符串。在显示过滤器中输入“http contains flag”,没有找到满足条件的报文,这里“contains”指包含指定的字符串。将过滤条件修改为“http contains ctf”,有一个数据包满足条件,查看HTTP协议的解析结果,发现了最终要找的flag,如图1.2.34所示。这个题目的flag格式并不是flag{},这也提醒我们在比赛前要先了解flag格式,flag格式本身也是非常重要的提示信息。

图1.2.34 flag在HTTP包的头部字段中

考点2:菜刀、蚁剑流量分析

中国菜刀(简称菜刀)是一个网站Webshell管理程序,通过在网站中预先植入木马,再利用菜刀和木马建立连接,从而达到攻击的目的。菜刀体积小,可提供文件下载、目录管理、虚拟终端等功能,受众多用户的喜爱。但是由于开发时间久远,越来越不能满足需求,而且缺少团队维护,因此现在白帽黑客更倾向于使用蚁剑。蚁剑的英文名为AntSword,是一款开源的跨平台网站管理工具,它主要供具有合法授权的渗透测试安全人员以及进行常规操作的网站管理员进行安全管理之用。

菜刀流量的特点是通过HTTP中的POST方法和木马后门建立连接,如图1.2.35所示,其中,dvwa.php是PHP一句话木马。

图1.2.35 菜刀流量的特点

POST数据包中的内容经过URL编码后一般如下:

这段代码需要执行PHP语句,需要先用Base64解码才能运行。Base64解码后的结果如下:

服务器返回的HTTP数据包不再进行编码,可以看到明文的返回结果:->|C:/AppServ/www/uploads\tA:C:D:\tWindows NT WIN-J3FT8P9R9AQ 6.1 build 7600(SYSTEM)|<-。可以发现,PHP脚本确实被运行,一般菜刀连接后的第一个包都会获取上述信息。接下来,我们针对菜刀常见的列目录、上传、下载、虚拟终端等功能做详细分析。

(1)列目录

列目录是把某个路径下的文件和文件夹遍历输出。URL解码后的POST实体如下:

其中有z0和z1两个参数,z0需要进行Base64解码后运行,解码后得到的关键代码如下:脚本的主要逻辑是:对z1进行Base64解码,遍历解码后路径下的全部内容。代码打开指定目录的句柄,然后进行循环扫描,并附带名称、时间、大小、日期这四个参数,用\t拼在一起发送回客户端。z1解码后的内容是C:\\,表示会把C盘根目录下的所有内容列出来。列目录是经常用到的功能,在流量中,z0不会改变,z1则根据目录的不同而变化。

(2)上传文件

上传文件的流量比较有特点,首先是有3个参数。URL解码后的流量特征如下:

z0解码后的结果如下:

利用fwrite函数把z2数据写到z1解码后的路径中,如果写文件成功,就返回1,否则返回0。z2经过Base16编码,提取出z2的数据,就能获取上传的文件。z1解码后的路径是C:\\AppServ\\www\\files\\world.png。需要特别说明的是,文件上传完成后,菜刀会再做一次列目录操作,在列目录的返回包中就能看到world.png文件。

(3)下载文件

下载文件也是菜刀经常用到的功能,其数据包的特点是:文件路径明文显示,没有被编码。具体如下:

z0解码后的结果是:

返回包以明文的方式包含上述echo指令打印的前缀("->|")和要下载的文件。需要注意的是,如果要从流量中提取出菜刀工具下载的文件,一定要删除菜刀PHP代码添加的前缀,否则文件不能正常打开。

(4)虚拟终端

虚拟终端是菜刀中一个非常实用的功能,就像攻击者获取了服务器shell一样,使得攻击者可以完成交互,获得更多的信息和操作。虚拟终端的流量如下:

这段载荷有3个参数,但是第2个参数几乎总是Y21k,可以作为虚拟终端流量的强特征。

z0解码后为:

z1解码后为:

z2解码后为:

将z1、z2的值解码后保存到$p、$s中,获取的shell文件的绝对路径保存到$d中,通过判断绝对路径的第一位来区分Linux和Windows系统。本例中的路径是Windows系统路径,所以要执行的语句为:

cmd/c cd/d "D:\phpStudy\WWW\upload-labs\upload\"&whoami&echo [S]&cd&echo [E]

真正执行的命令为whoami,并将结果重定向输出。

(5)解题技巧

目前,在CTF比赛中,菜刀流量主要考查列目录、文件上传/下载和虚拟终端等功能。我们当然可以逐个把POST数据包中的内容解码,查看代码逻辑,但这么做有些烦琐,一种更简单的方法是根据POST包的返回包内容猜测POST包中代码的功能。

【例题】packet3.pcapng

【题目描述】 从流量中找到flag。

【解题思路】 根据协议分级,重点查看HTTP协议数据包。发现都是POST请求,猜测可能是菜刀流量。我们首先查看第二个包,也就是第一个POST请求对应的返回包,其结果为“->|C:/AppServ/www/uploads\tA:C:D:\tWindows NT WIN-J3FT8P9R9AQ 6.1 build 7600(SYSTEM)|<-”,此时可以确定第一个POST请求中的代码是为了获取系统信息。逐个查看POST请求的返回包,在第83个数据包中看到了rar文件的头部,结合第82个数据包,判断是从服务器下载hello.rar文件,将其导出。同理,对于第234个数据包,服务器返回1,结合第233个数据包,判断是向服务器上传文件,将文件导出,再经过Base16解码,得到一张PNG图片。将RAR压缩包解压,结合PNG图片信息,得到完整的flag:c7265f898a52fcc4。

蚁剑的流量特征和菜刀有相似之处,都是通过POST请求发送脚本。但是蚁剑做了更多的优化,以减少流量特征。以版本2.1.8为例,如图1.2.36所示,在连接木马前可以选择编码器和解码器,除了菜刀默认的Base64编码,还可以选择chr、rot等方式。不仅POST请求包可以被编码,返回包的数据也可以被编码,这增加了分析的难度。但是,上传和下载的文件不会被编码,可以被直接提取。

图1.2.36 蚁剑连接前的配置选项

【例题】yijian.pcapng

【题目来源】 原创。

【题目描述】 从流量中找到flag。

【解题思路】 协议分级后,重点关注HTTP的协议数据,重点分析蚁剑的POST请求和返回信息。图1.2.37中的POST请求包采用ROT13的方式对传输内容加密,并且用boundary分隔多个字段。boundary的使用是蚁剑流量的特征之一,不难发现,返回包的内容也是经过ROT13加密的。在第60个数据包发现了从服务器下载的zip压缩包,将其提取并解压后,就能看到flag。

图1.2.37 蚁剑流量追踪TCP流结果

考点3:冰蝎流量分析

无论是菜刀还是蚁剑,在流量加密保护方面均存在较大的缺陷。为了更好地对流量加密、逃避防火墙拦截,冰蝎应运而生。冰蝎也是一个Webshell管理工具,它可以在HTTP明文协议中建立加密隧道,以躲避安全设备的检测。我们以2.0.1版本为例,分析冰蝎的协议特征。它使用对称加密算法,加密过程总共分为三步:

1)密钥传递阶段。客户端向服务器请求密钥,密钥是明文传递的。客户端向服务器发起GET请求以协商密钥,GET请求的URI中只带一个参数,如图1.2.38所示,URI中的pass参数是冰蝎连接时的密码,等号后的数字是随机生成的。密钥位于服务器返回包的实体部分,一般是16字节的小写字母或数字。密钥协商阶段会发起多个GET请求,可以根据HTTP头部字段的cookie值判断使用哪个密钥。

2)算法协商阶段。冰蝎将一串Payload用不同的算法加密,然后发送给服务器。如果服务器成功解密,那么接下来的通信就使用这种算法。如果算法不对,则解密失败,那么响应为空,冰蝎会更换另一种加密算法进行尝试,直到成功为止。加密算法一般为AES128 CBC模式和异或加密,两种加密采用相同的密钥。如果使用AES加密,则IV为全0。图1.2.39展示了算法协商过程,当服务器采用某种加密算法不能解密客户端的数据时,服务器会把Content-type字段置为0,当客户端收到这样的返回值后,会采用另一种加密算法再发送一次Payload。

图1.2.38 冰蝎密钥协商过程

图1.2.39 加密算法协商过程

3)加密通信阶段。客户端使用上述密钥和算法加密Payload后,通过POST请求将脚本发送给服务端,服务端解密后执行,并将结果以相同密钥和加密算法返回给客户端。

【例题】bingxie.pcapng

【题目来源】 原创。

【题目描述】 从流量中找到flag。

【解题思路】 打开文件后进行协议分级,重点关注HTTP。我们发现有两个是GET请求,其余都是POST请求,结合URI的特征,判断可能是冰蝎流量。根据第22个数据包的cookie值,可以发现采用第2次GET协商的密钥,由于加密算法未知,因此可以把AES加密和异或加密都尝试一遍。利用脚本BX2_aes_decrypt.py和BX2_xor_decrypt.py分别对其解密,发现采用的是异或加密。利用异或解密脚本BX2_xor_decrypt.py分别对POST请求包解密,也就是题目中第27、143、171、183个数据包(需要根据不同数据包的内容修改脚本中text对应的值)。对第183个数据包解密后,将其中的Base64数据解码,可看到图1.2.40的内容。结合代码逻辑,可知是向服务器上传了flag.zip文件,文件内容经Base64编码后存储在$content的变量中。将$content解码,得到zip压缩包,解压后就得到flag。

图1.2.40 冰蝎流量解密后的内容

1.2.8 USB

USB(Universal Serial Bus)的全称是通用串口总线,USB流量指的是USB设备接口的流量,攻击者能够通过监听USB接口流量获取键盘敲击键、鼠标移动与点击、存储设备的明文传输通信、USB无线网卡网络传输内容等信息。在CTF比赛中,USB流量分析主要以键盘和鼠标流量为主。图1.2.41显示的是从本地机器捕获的USB接口流量,需要注意的是,USBPcap pseudoheader(伪头)不属于发送内容部分,而是USBPcap控制程序的部分,pseudoheader后面的部分才是真正要发送或接收到的内容。在这个例子中,URB就是pseudoheader,占27字节,真正发送的内容是Leftover Capture Data中的8字节。

图1.2.41 USB流量

键盘和鼠标传输的内容就在Leftover Capture Data中。键盘数据包的数据长度为8字节,击键信息集中在第3个字节,这个字节并不是字符的ASCII码,具体映射关系需要查看USB HID USAGE TABLE第53页的内容。

鼠标移动时表现出连续性,但实际上鼠标动作所产生的数据包是离散的,每一个数据包的数据区有4个字节,第1个字节代表按键,值为0x00时,表示没有按键;值为0x01时,表示按左键;值为0x02时,表示当前按键为右键。第2个字节可以看成一个signed byte类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少个像素;这个值为负时,代表鼠标水平左移多少个像素。第3个字节与第2个字节类似,代表鼠标垂直移动的像素数。得到这些信息后,即可恢复出鼠标移动轨迹。

针对键盘和鼠标的USB流量分析,可以使用开源工具https://github.com/WangYihang/UsbKeyboardDataHacker和https://github.com/WangYihang/UsbMiceDataHacker完成。这两个工具可以从流量包中读出击键内容并恢复出鼠标轨迹。

【例题】key.pcap

【题目描述】 从流量中找到flag。

【解题思路】 这是非常明显的键盘USB流量,在Linux系统中运行UsbKeyboardDataHacker.py,可以直接提取出按键信息。命令为:python2 UsbKeyboardDataHacker.py key.pcap。

【例题】mice.pcap

【题目描述】 从流量中找到flag。

【解题思路】 这是非常明显的鼠标USB流量,在Linux系统中运行UsbMiceDataHacker.py,可以把鼠标左右键的轨迹都画出来,右键轨迹就是画出来的flag。

1.2.9 TLS

SSL/TLS是一种密码通信框架,也是目前使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码、消息认证码、公钥密码、数字签名、伪随机数生成器等算法。SSL(Secure Socket Layer,安全套接层)是1994年由Netscape公司设计的一套协议,并于1995年发布了3.0版本。TLS(Transport Layer Security,安全传输层)是IETF在SSL 3.0基础上设计的协议,相当于SSL的后续版本。

TLS协议位于传输层和应用层之间,其功能是一个加密通道,和上层应用协议无关。由于HTTP采用明文传输,很容易被攻击者窃听或者篡改内容,通过引入TLS对HTTP的内容进行加密等操作,可以有效防止窃听、篡改和劫持等,如图1.2.42所示。

在CTF比赛中,关于TLS的考点并不是很多。当没有私钥时,因为无法对加密流量进行解密,所以TLS协议一般不是我们关注的重点。但是,有一类题目会提供TLS的私钥,这就需要我们在Wireshark中导入私钥,从而解密相关流量。

图1.2.42 TLS协议简介

【例题】TheGreatEscape.pcapng

【题目来源】 2017 Insomni'hack。

【题目描述】 从流量中找到flag(提示:flag格式为INS{})。

【解题思路】 首先利用协议分级,发现有FTP。经过分析,发现向FTP服务器上传了ssc.key文件,将该文件导出并用记事本打开,发现是私钥文件。题目应该是让我们导入私钥文件,利用会话统计功能,发现有大量443端口的连接,猜测可能是TLS协议。单击“编辑”工具栏,选择最下方的“首选项”,打开后在窗口左侧选择“Protocols”,再选择TLS,如图1.2.43所示。单击“RSA keys list”旁边的Edit按钮,单击左下角的“+”按钮,新增一项,各字段按图1.2.44所示填写。其中,IP地址可以空缺,Wireshark会自动选择相应的TLS流解密;Port填写443;因为要解密HTTPS,故Protocol填写解密后的应用层协议HTTP;Key File是提取出的私钥的保存路径;如果知道证书的加密密钥,就填写到Password字段,一般情况下可以不填。单击右下角的“OK”按钮,Wireshark会使用该私钥对相关流量自动解密。输入过滤规则“http contains"INS"”,单击过滤出的第一个数据包,展开HTTP解析结果,可以看到flag: INS{OkThatWasWay2Easy}。当没有导入私钥时,输入上述过滤规则,则没有任何数据包满足过滤条件,说明导入的私钥被Wireshark正常用于解密。

图1.2.43 在Wireshark首选项中导入RSA私钥

图1.2.44 导入私钥时的详细配置

除了使用私钥,在SSL/TLS中,Pre Master Secret(预主密钥)的作用至关重要,无论是RSA加密算法还是DH密钥交换算法,最终都是为了交换或者协商出Pre Master Secret。通过Pre Master Secret,结合其他参数,可计算出Master Secret作为整个会话的密钥。因此,如果比赛题目提供了Pre-Master-Secret log或者Master-Secret log,在Wireshark中直接导入,在图1.2.43中(Pre)-Master-Secret log file name处选择合适的文件,就可以完成解密。这里我们不讨论解密算法的细节。

【例题】transcript.zip

【题目描述】 从流量中找到flag。

【解题思路】 在(Pre)-Master-Secret log处导入题目提供的keylogfile.txt文件,单击OK按钮后,Wireshark并没有直接解密。选中一个TLS协议的数据包,选择追踪TLS流,可以看到图1.2.45所示的结果。

图1.2.45 HTTPS的解密结果

1.2.10 IEEE 802.11

WLAN(Wireless Local Area Network,无线局域网)是利用电磁波传送数据形成的无线网络。设备通过AP(Access Point,无线接入点)连接到WLAN,我们平时连接的热点就属于AP。WLAN有WAPI和Wi-Fi两种传输标准,其中,Wi-Fi(Wireless Fidelity,无线保真)属于短距离无线技术,也是平时我们使用最多的网络传输标准,其数据传输使用的是IEEE 802.11协议,该协议又细分为20多个子协议,这里我们不一一赘述。

在CTF比赛中,对于IEEE 802.11协议主要考查如何破解出连接热点时的密码。我们连接热点时有多种加密类型,下面一一介绍。

1) WEP (Wired Equivalent Privacy)的全称为有线等效保密,采用RC4 prng算法。客户端与无线接入点的数据都会以一个共享的密钥进行加密,密钥的长度有40位和256位两种,密钥越长,就需要更多的时间进行破解。此类加密方式比较老旧,只需要捕获大量的网络数据包就可破解。

2) WPA (Wi-Fi Protected Access)是不安全的WEP标准的演变,采用128位密钥和48位初向量(IV)的RC4算法加密。WPA的主要改进是可以动态改变密钥的临时密钥完整性协议(Temporal Key Integrity Protocol, TKIP)。WPA是在802.11i完备之前替代WEP的过渡方案,WPA2才是最终的标准体系。WPA/WPA2是一种非常安全的加密类型,由于此加密类型需要安装Radius服务器,因此,普通用户一般用不到,只有企业用户为了无线加密更安全才会使用此种加密方式。在设备连接无线Wi-Fi时需要Radius服务器认证,而且需要输入Radius密码。

3) WPA-PSK/WPA2-PSK 是我们现在经常设置的加密类型。这种加密类型安全性高,设置简单。需要注意的是,它有AES和TKIP两种加密算法。这种加密类型仍然可以被破解,其破解方法是先捕获握手包,然后通过字典进行爆破。

WPA-PSK的破解原理

为了确保读者们能看懂破解WPA的原理,且阅读过程不那么“痛苦”,我们会尽量采用通俗易懂的方式描述,弱化密码学的细节。如果读者实在看不明白,可以先忽略这部分,直接进入后面的实操部分。下面先介绍一些术语和概念。

❑SSID(Service Set Identif ier,服务集标识符):也可以写为ESSID,用来区分不同的网络,最多可以有32个字符,无线网卡设置了不同的SSID就可以进入不同网络。可以简单地理解为,连接的不同Wi-Fi的名字就是SSID。

❑口令:连接WiFi时需要输入的安全密钥。

❑PSK(Pre-Shared Key,预共享密钥):口令经PSK映射转换算法处理后得到的结果。

❑MIC(Message Integrity Code):消息验证码。

❑四次握手(重头戏来了!):设备和AP为创建和分发动态加密密钥而相互发送4条信息,每条信息都包含一些重要内容,其中第3条信息包含一个重要的MIC,第4条信息包含一个报文信息。

破解步骤如下:

1)口令经一个算法计算得到PSK。

2)PSK+SSID生成PMK(PMK是什么不重要,这里我们把它记成“张三”)。

3)结合四次握手中前三次的信息以及张三(PMK),计算得到PKT(记不住的话叫“李四”)。

4)结合李四和四次握手中第4条的报文计算出新MIC,新MIC和四次握手中第3条的MIC比较,如果一致,说明口令正确;如果不一致,就从字典中获取一个新口令,重复上述步骤。

在实际破解过程中,不清楚原理也没有任何影响,我们可以使用Kali自带的aircrack-ng工具破解流量中的Wi-Fi密码。在这个过程中需要使用字典,可以说,破解能否成功完全取决于字典的好坏。

【例题】f low

【题目来源】 2018年湖湘杯。

【题目描述】从 流量中找到flag。

【解题思路】 经协议分级,发现都是802.11协议的数据包,需要破解Wi-Fi连接时的密码。在Kali虚拟机中打开终端,终端路径切换到题目路径下,输入命令“aircrack-ng-w password.txt ctf.pcap”,其中“-w”选项后面是我们准备好的字典,结果如图1.2.46和图1.2.47所示,加密方式为WPA,连接时的口令为“password1”,在Wireshark中导入口令就可以自动解密。导入方法和1.2.9节中介绍的一样,如图1.2.48所示,协议选择IEEE 802.11,再单击右侧的“Edit”按钮,然后添加Wi-Fi连接时的口令,如图1.2.49所示。“Key type”有4个选项,分别是wep、wpa-pwd、wpa-psk和tk,根据图1.2.46所示,应该选择wpa方式,又因为已经找到了口令,所以选择wpa-pwd。“Key”字段的填写方式如下:口令为ESSID,所以填入“password1:ctf”,这里需要注意大小写。再通过协议分级,发现有HTTP,分析可知第11 389个数据包中有flag,如图1.2.50所示,即flag{H4lf_1s_3n0ugh}。

图1.2.46 用aircrack-ng命令破解显示加密方式

图1.2.47 用aircrack-ng命令破解找到Wi-Fi密码

图1.2.48 Wireshark导入Wi-Fi密码

图1.2.49 添加Wi-Fi连接时的口令

图1.2.50 Wireshark对Wi-Fi流量解密的结果 ooLQJYtkAo7IY6awEqy8oPo9Pwko8kDe85J6X1LqEtfUjubdB36dSGrk9n82S41O

点击中间区域
呼出菜单
上一章
目录
下一章
×