2021年那场国赛,不知道有多少人跟我一样,在Wireshark这道题上栽了跟头。事后复盘才发现,这题压根不是在考你记了多少协议,而是考你在乱糟糟的流量包里,能不能快速定位到关键的那几秒。中职网络安全赛项的流量分析部分,向来是拉开分差的地方,而2021年的题目在思路上又跟往年不太一样——它更贴近真实攻击场景了。这篇文章我不想单纯贴一张答卷,而是想把当年这道题从审题、到逐步拆解、再到最终拿分的完整过程捋一遍,把我踩过的坑和后来带学生复盘时总结的经验一起放进来。不管你是正在备赛的选手,还是带赛的指导老师,这篇文章应该都能给你一些值得参考的东西。
1. 整体思路拆解:为什么2021年的题跟平时练的不一样
1.1 先说清楚这场比赛在考什么
中职网络安全赛项里的流量分析,本质上就是给你一个pcap包,让你扮演一个网络安全分析人员,从抓包文件里还原出攻击者的行为链条。2021年的题目包装成了一次比较典型的“内网失陷”场景:某个公司内部的主机被人攻陷了,攻击者在机器上做了一系列操作,你需要通过分析流量包把这些操作还原出来。它考的不只是你会不会用Wireshark,而是你有没有一套清晰的流量分析思路。
我把历年的题目放在一起对比过,2021年这题的命题逻辑有几处明显变化。第一,题目不再只考单一协议,而是HTTP、DNS、TCP、ARP这些协议混在一起出现,你需要自己判断哪段流量是关键的;第二,攻击链的完整性更强,从最初的扫描探测、到利用漏洞上传文件、再到建立连接执行命令,甚至可能包括内网横向移动的痕迹,整个链路是连贯的;第三,有些信息不是直接就能看出来的,比如攻击者可能对传输内容做了编码或者变形,你得有还原的意识。
1.2 拿到流量包后,第一步不是急着打开Wireshark
很多选手一看到pcap文件,第一反应就是双击打开,然后盯着那一堆花花绿绿的包发呆。这是最大的误区。我自己的习惯是先把题目全部读完,把每一个问题的关键词圈出来。国赛的流量分析题一般会配5到10个小问,每一问都在暗示你一个方向。
举个例子,如果题目问“攻击者使用了什么扫描工具”,那你心里就应该有数,要找的是扫描阶段的流量,特征大概率是大量的TCP SYN包,或者是某种特定指纹的HTTP请求;如果题目问“攻击者上传了什么文件”,那你关注的重点就应该切换到HTTP POST请求或者FTP的上传通道上。带着问题去看流量包,效率会高很多,而不是漫无目的地翻包。
2021年的题目我印象中比较明确的几个问题是:攻击者用什么方式做的端口扫描、扫描发现了哪些开放端口、通过什么漏洞拿到的权限、上传的木马文件名是什么、连接木马的密码是什么、攻击者从哪个IP发起的攻击。这些问题串起来,其实就是一条完整的攻击链。
1.3 这题的考核点其实集中在三个层面
第一个层面是协议基础的掌握程度。你至少要能在不查资料的情况下,快速判断一个包是TCP的三次握手、是DNS的查询响应,还是HTTP的GET请求。第二个层面是Wireshark的操作熟练度,能不能熟练使用过滤表达式、统计功能、追踪流功能,这决定了你的分析速度。第三个层面才是真正的分水岭——你能不能把零散的包串联成一个有逻辑的故事。
2021年这道题在设计上就比较巧妙地考了这三个层面。如果你只是会用过滤器,那最多拿到一半分;只有当你能够把扫描、入侵、上传、连接这条线完整还原出来,才算真正把这题吃透了。下面我拆开来细讲。
2. 核心细节解析:2021年国赛流量分析的关键考点
2.1 端口扫描阶段的流量特征识别
任何一次攻击,扫描往往是第一步。在2021年的流量包里,扫描阶段的特征其实非常明显,就看你会不会看。打开流量包之后,我习惯先用Statistics菜单下的Conversations或者Endpoints看一眼有哪些IP在通信,先把通信主体确定下来。这一步很关键,它能帮你快速锁定攻击者和受害者。
在2021年那道题里,攻击者的IP和受害者的IP之间的通信流量明显异常——短时间内有大量目标端口不同的TCP SYN包。这就是典型的端口扫描行为。Wireshark里有一个非常好用的过滤表达式:
tcp.flags.syn == 1 && tcp.flags.ack == 0这个表达式能筛出所有只有SYN标志位、没有ACK标志位的包。正常情况下,这种包只出现在TCP三次握手的第一步,数量不会特别多。如果你发现这个过滤器筛出来成千上万个包,而且目标端口是在规律地变化,那基本可以断定这是扫描流量。
当时我用这个方法筛完之后,发现扫描源IP集中在某个地址上,目标是内网的一台主机。扫描的端口范围很大,从常见端口到高位端口都有覆盖。这时候还需要进一步判断扫描方式。
关于扫描方式,有一个很实用的判断技巧:如果你看到大量SYN包发出去之后,紧接着有对应的SYN+ACK包返回,那说明目标端口是开放的,这是半连接扫描或者全连接扫描的特征;如果只看到SYN包发送,没有回应,那就是在探测端口是否关闭。2021年这道题里,攻击者扫描出了好几个开放端口,其中就包括后面被利用的Web服务端口和远程管理端口。这道题的答案就在这个结论里。
2.2 HTTP协议分析:找到漏洞利用和木马上传的痕迹
扫描完成之后,攻击者找到了可以利用的服务,紧接着就是漏洞利用阶段。2021年题目里,攻击者利用的漏洞点在Web服务上,这也符合近年来国赛的出题偏好——Web攻击始终是重中之重。
在分析这个阶段时,我用了一个比较高效的过滤方式,直接筛选HTTP请求。Wireshark的显示过滤器支持http.request,可以筛出所有HTTP请求报文。筛完之后,再把请求方法为POST的单独挑出来,因为上传文件、提交数据基本都是通过POST请求完成的。
2021年这道题里,通过筛选HTTP请求,可以看到攻击者先向一个特定的URL发送了带有恶意数据的请求。如果你对常见的Web漏洞有了解,看到这个URL的结构和POST的数据内容,基本就能判断出这是利用了文件上传漏洞。为了确认,我通常会右键点击可疑的请求包,选择Follow->HTTP Stream,把整个HTTP会话内容完整地看一遍,这样能看到请求头和响应体的全部内容,包括上传的文件名和服务器返回的状态码。
这里需要特别提醒一下,Wireshark的HTTP流追踪有一个小坑:如果HTTP请求和响应之间还夹杂着其他协议的包,流追踪的内容可能会显得不太连续,这时候不要慌,可以尝试调整TCP流的编号,找到最完整的那个会话。
2.3 提取攻击者上传的文件:从流量里还原木马
这是2021年题目的一个核心得分点,也是很多人丢分的地方。攻击者上传的木马文件就藏在HTTP的POST请求里,你需要把它提取出来,才能回答跟木马相关的后续问题。
Wireshark提供了非常方便的文件导出功能。在HTTP流追踪窗口里,你会看到请求报文里有一个叫Content-Disposition的字段,它后面跟的filename=参数就是文件名。还记得这题要求回答上传的木马文件名吗?答案就在这个字段里。我当时让学生做这题时,反复强调过一句话:文件名字段不一定是真的文件名,攻击者可能会伪装成图片或者文本文件,你需要结合HTTP响应的返回状态和后续的通信行为来判断哪个才是真正的木马。
提取文件有两种常用方式。第一种是File->Export Objects->HTTP,这个功能会把流量包中所有通过HTTP传输的文件对象列出来,你可以根据文件大小、修改时间等信息判断哪个是可疑的,然后直接保存到本地。第二种是手动复制,在HTTP流追踪窗口中找到POST报文里两个空行之后的部分,那部分就是文件内容,但要注意传输过程中可能经过了编码,需要相应地解码还原。
在2021年的题目里,提取出来的文件我印象中是一个脚本文件。如果你用文本编辑器打开它,能看到里面包含了连接密码等敏感信息。这些信息都是后面几道小问的答案。所以这一步做得好不好,直接决定了你能拿下多少分。
2.4 DNS和ARP流量分析:不能忽视的辅助线索
Web流量是2021年题目的主战场,但DNS和ARP流量同样不能忽视。有些选手看到非HTTP流量就跳过了,结果丢了一些基础分,非常可惜。
在分析攻击链的完整性时,DNS流量可以帮助你判断攻击者是否进行了域名解析,甚至是否存在DNS隧道传输的行为。2021年题目里,我记忆中DNS的流量不算特别复杂,但通过DNS查询记录,可以辅助确认受害主机的身份信息。你可以在Wireshark的显示过滤器里输入:
dns.qry.name contains "关键词"来筛选特定域名的DNS查询记录,快速定位可疑的域名解析行为。
ARP流量在2021年题目里也有一个考点,就是判断是否存在ARP扫描或者ARP欺骗的迹象。如果你看到某个IP在短时间内发送了大量的ARP请求,请求的目标IP在规律地变化,那这很可能是一次ARP扫描,目的是发现内网中存活的主机。用过滤器arp可以把所有ARP报文筛出来,再结合Statistics里的Endpoint功能,就能很清楚地看到ARP通信的双方。
2.5 TCP协议分析与连接状态判断
TCP协议分析在流量分析题里属于基础中的基础。2021年题目里虽然没直接考“请说明TCP三次握手的过程”这种题,但你对TCP连接状态的判断能力会直接影响你对整个攻击链的理解。
举个例子,当攻击者通过Web漏洞上传了木马之后,下一步往往是要主动连上去,这时候会产生一条新的TCP连接。判断这条连接是否成功建立,就要看是否完成了三次握手。在Wireshark里,你可以用过滤器tcp.stream eq 编号来追踪某一条TCP流的完整交互过程,从而判断连接是否建立成功、传输了什么数据。
另外,还有一个值得关注的点是TCP重传和异常断连。2021年题目里,攻击者在执行完命令之后,可能有意识地清理了痕迹,比如主动断开连接或者关闭会话。如果你在追踪流的时候发现连接是异常终止的,比如出现了RST包,那说明攻击者可能比较谨慎,这也可以作为入侵痕迹的一部分写在分析报告里。
3. 实操过程与核心环节实现:完整跑一遍2021年国赛流量分析题
3.1 环境准备与Wireshark配置
做流量分析之前,先把环境配置好,这个环节看似简单,但直接影响后面的分析效率。
我用的是Wireshark 3.x以上的版本,如果你还在用老旧版本,建议先升级。新版本在HTTP/2解析、TLS解密支持、界面流畅度上都有明显改进。然后我们需要在Edit->Preferences->Protocols里做几个关键配置:IPv4和IPv6的重组功能要打开,TCP的Allow subdissector to reassemble TCP streams选项要确保勾选,这样Wireshark才能正确重组跨多个数据包的完整数据流。
另外,建议把时间显示格式改成“相对时间”或者“自参考时间”。在View->Time Display Format里可以选择Seconds Since Beginning of Capture,这样能直观地看到从抓包开始到某个事件发生经过了多长时间,后续分析攻击时序时会非常有用。
我还有一个个人习惯,就是给不同协议上色,让重点流量更容易被注意到。Wireshark默认的上色规则已经能区分常见协议,但你可以自己添加一条规则,专门给包含攻击特征的流量标成醒目的颜色。虽然这不是必须的,但在分析几百MB的大流量包时,确实能帮你快速锁定关键区域。
3.2 从粗筛到精确定位:我的四步分析法
我给学生总结过一套四步分析法,这套方法在2021年国赛题上亲测有效。
第一步,宏观摸底。打开流量包之后,先不急着过滤,用Statistics->Capture File Properties查看流量包的基本信息,包括总包数、抓包时长、文件大小。然后用Statistics->Conversations查看通信双方的流量排行,用Statistics->Protocol Hierarchy查看各协议的数据包分布情况。这套组合拳打完,你对流量包的整体画像就出来了:谁在和谁通信、主要用了哪些协议、哪些协议的数据量异常大。
第二步,异常发现。异常通常来自于跟常态不一样的行为。如果你发现某个IP的数据包数量远超其他IP,或者某个协议的包数量在短时间内激增,这就是重点研究对象。2021年题目里的扫描行为就属于典型的数据包激增异常。
第三步,聚焦关键。根据题目的问题,判断攻击链当前处于哪个阶段,然后选择相应的过滤条件来缩小范围。比如要找扫描阶段,就过滤SYN包;要找木马上传,就过滤HTTP POST请求。
第四步,深挖细节。定位到关键包之后,使用Follow流、Export Objects等功能把细节完整地挖出来。这一步也是最耗时间的,但答案往往就藏在这些细节里。
3.3 关键环节实战演示:还原一次完整的攻击会话
下面我用一个假设但非常贴近2021年国赛的场景,完整演示一次分析过程。假设我们已经通过宏观摸底确定了两个通信主体,分别记为IP_A(攻击者)和IP_B(受害者)。
首先筛选IP_A发给IP_B的所有TCP SYN包:
ip.src == IP_A && ip.dst == IP_B && tcp.flags.syn == 1 && tcp.flags.ack == 0如果筛出来几百上千个包,且目标端口分布在不同的数值上,这就是扫描行为。把结果按目标端口排序,可以看到哪些端口收到了SYN包。再筛选包含SYN+ACK响应的包:
ip.src == IP_B && tcp.flags.syn == 1 && tcp.flags.ack == 1对比两个结果,就能得出哪些端口是真正开放的。这个结论直接对应题目里的“扫描发现了哪些开放端口”。
接下来,查找针对Web服务的攻击流量。输入过滤器:
http.request && ip.addr == IP_B筛出所有发往受害者的HTTP请求。逐条查看请求URL和方法,重点看POST请求。找到可疑的上传请求后,右键Follow->HTTP Stream,完整的请求和响应内容就展示出来了。从Content-Disposition字段提取文件名,再从POST数据区提取文件内容并保存。后续的题目就围绕着这个文件展开。
整个流程说着快,实操下来大概需要20到30分钟,前提是你对过滤器语法足够熟练。我建议备赛期间把上面这些过滤表达式练到条件反射的程度,考场上省下的每一分钟都是拿分的关键。
3.4 用统计功能辅助排查隐蔽通信
2021年题目里有一个小问,我记得是需要分析攻击者是否与受害主机建立了某种隐蔽的通信通道,或者是否存在异常的长连接。这种问题如果单纯靠肉眼翻包,效率极低。
Wireshark的Statistics->Conversations里有一个非常有用的信息——每个TCP会话的数据包数量和总字节数。正常的一次性请求响应,数据包数量很少;如果发现某条TCP流的数据包数量异常多、持续时间异常长,这就是值得深入调查的可疑连接。
点开那条流的详情,再双击进入追踪会话,就能看到完整的通信内容。如果通信内容看起来像是经过了编码或者加密(比如大段看不出含义的字符串),那很可能就是攻击者建立的隐蔽通道。2021年这道题的答案就在这里。
4. 常见问题与排查技巧实录
4.1 过滤不出任何结果,怎么办
这是新手最常遇到的问题:明明输入了过滤器,但结果区空空如也。排查思路很简单——先去掉过滤器,确定流量包里确实存在该协议的包。你可以用Statistics->Protocol Hierarchy看一下这个协议的数据包计数。如果计数是0,那就是流量包里确实没有这种协议的包,你需要检查是不是看错了协议类型;如果计数不是0,那就是过滤器表达式语法有误,检查一下字段名、标点符号是不是写错了。
另外一个常见的原因是大小写问题。Wireshark的过滤字段名通常是区分大小写的,比如http.request里http全小写,request全小写,不能写成HTTP.Request。如果你是从网上复制的过滤表达式,贴进来之后最好再手敲一遍,避免格式问题。
4.2 追踪TCP流时内容不完整
在分析HTTP上传文件的场景中,经常遇到这种情况:追踪TCP流时,发现内容断断续续,或者只有请求没有响应。这个问题的根源在于TCP分段传输——一个完整的HTTP报文可能被拆分到了多个TCP包中,如果Wireshark没有正确重组,内容就会显得不完整。
解决办法是在Edit->Preferences->Protocols->TCP里,确保Allow subdissector to reassemble TCP streams这个选项是勾选状态。此外,在追踪TCP流时,Wireshark会提示你有几条子流(substream),你可以尝试切换不同的子流编号,找到信息最完整的那一条。2021年题目里,我就遇到过需要切换子流的情况,这个操作技巧在考场上非常实用。
4.3 导出文件失败了,可能是编码方式的问题
还有一种情况是,你找到了POST请求里的文件内容,但保存下来之后发现文件无法打开,或者打开后是乱码。这通常是因为传输过程中对数据进行了编码,最常见的是base64编码。这时候你需要先把提取到的数据做base64解码,再保存为文件。
在Windows上,可以用PowerShell快速解码:
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("这里粘贴base64内容"))Linux或macOS上更简单,直接用命令行工具:
echo "这里粘贴base64内容" | base64 -d > output.bin如果你是命令行不熟练的新手,也可以直接问ChatGPT之类的工具帮忙解码,但赛场环境不一定允许外网访问,所以本地掌握解码能力比较稳妥。
4.4 无法判断哪个IP是攻击者
有时候流量包里涉及的IP比较多,一时难以判断谁是攻击者。我的判断依据有两个:第一,看通信行为的主动性。主动发起大量扫描请求、主动发送恶意数据的一方,大概率是攻击者。第二,看IP出现的频率和行为模式。攻击者的IP通常是孤立的,只跟少数目标通信,而且通信模式有明显的扫描特征。
另外可以结合时间线来判断。正常的业务通信在时间分布上相对均匀,攻击行为往往在短时间内集中爆发。在Wireshark里,按照时间排列数据包,观察哪个IP的行为在某个时间点突然变得异常活跃,那个IP基本上就是你要找的攻击者。
5. 从2021年国赛看Wireshark流量分析的备考方向
5.1 2021年题目给后续备赛带来的三点启示
第一点,基础协议知识必须扎实。2021年题目中涉及的HTTP、TCP、DNS、ARP全是基础协议,没有偏门冷门的协议。但恰恰是这些基础协议,组合在一起构成了一条完整的攻击链。很多选手在单个协议上没问题,但放在复合场景中就反应不过来,根源还是对协议的理解不够深入,只知其然,不知其所以然。
第二点,需要建立攻击链思维。流量分析不只是“看包”,而是要“破案”。每次分析前,先想清楚攻击者可能的攻击路径,从信息收集到漏洞利用再到权限维持,每一步对应什么流量特征,心中有数之后再动手看包,效率会大幅提升。
第三点,工具操作要形成肌肉记忆。考场上时间紧张,你不能一边翻笔记一边过滤流量。Wireshark的常用快捷键、过滤器语法、追踪流、导出对象这些操作,平时要练到闭着眼也能完成的程度。
5.2 推荐的Wireshark学习路线
考虑到中职学生的基础,我的建议是分三个阶段推进。第一阶段是熟悉界面和基本操作,重点是掌握数据包列表、数据包详情、数据包字节这三个面板的联动关系,以及保存、过滤、查找这几个核心操作。
第二阶段是深入协议分析。选择一个常见协议,比如HTTP,找一些包含Web访问的pcap包,把每一个HTTP请求从头到尾拆解一遍,搞清楚请求行、请求头、请求体之间的逻辑关系。这个阶段的目标是建立“看到包就能说出它是什么”的能力。
第三阶段是综合实战。找一些完整的CTF流量分析题目来做,条件允许的话,可以自己搭建环境模拟攻击,自己抓包自己分析。这个阶段的目标是把零散的技能整合成完整的分析能力。
5.3 一些给选手的心里话
回到开头的场景。2021年国赛那套题,我当时在现场看到不少选手在HTTP流量里翻来翻去,却始终找不到木马文件,不是因为他们不会用Wireshark,而是因为他们缺少一个关键的思路:流量分析题里的每一个问题都不是孤立的,它们是相互关联、环环相扣的。你看到的每一个可疑现象,都可能是在暗示下一个问题的答案。
平时做题的时候,不要只满足于“把答案做出来”,而是要追问自己:出题人为什么这么问?这个流量特征为什么能反映这种行为?如果换成别的攻击方式,流量会有什么不同?想通了这些问题,你才能真正进步。
我个人带赛这几年的体会是,流量分析是网络安全赛项里性价比比较高的一个模块,它不依赖复杂的工具链,也不需要高深的编程功底,只要你肯花时间刷题、肯动脑子总结,成绩的提升是非常可观的。希望这篇文章能帮你把2021年这套题吃透,也希望你在考场上看到流量包的时候,心里是踏实的。