ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CTF流量分析实战:Wireshark核心用法与高频考点全解析

CTF流量分析实战:Wireshark核心用法与高频考点全解析 做CTF Misc题有一段时间的朋友应该都有体会流量分析Traffic Analysis这类题目在比赛里出现的频率是真的高。给你一个pcap包让你从中找出藏着的flag。很多新手第一次拿到这种题打开Wireshark看到满屏的蓝色绿色条目直接就懵了不知道从哪里下手最后只能靠瞎点点碰运气。其实流量分析题是整个Misc方向里套路最固定、投入产出比最高的一类不需要逆向基础不需要太深的密码学功底核心就是把Wireshark用明白外加掌握几类高频考点的固定解法。这篇Writeup我就把流量分析题从入门到实战的完整打法捋一遍既讲工具本身的正确用法也讲CTF里真正会考的流量长相希望能帮你在下次比赛里直接省掉最痛苦的摸索阶段。1. 流量分析题的本质别把它当成“抓包软件使用题”先纠正一个常见的误解流量分析题虽然表面上是让你玩Wireshark但它本质上是“现场勘查”不是“软件操作考试”。你想题目给你一个pcap文件相当于给了你一段已经被提前录制好的网络通信录像。你要做的事情只有一件在这段录像里找出通讯双方到底聊了什么、传了什么、有没有人夹带私货。理解了这一点答案的查找思路就清晰了。流量里能藏flag的地方其实非常有限翻来覆去就这几类明文通信内容比如HTTP里的GET请求参数、POST表单、Cookie、响应报文看似正常但实际被用来传数据的协议比如DNS查询、ICMP的data字段、USB键盘上报数据通过流量直接传输的文件比如图片、压缩包、脚本把它们抠出来分析就能拿到flag。所以一个合格的分析思路不是“把每个包都点开看看”而是“先用统计视角搞清楚这段流量里主要有哪些协议然后按优先级逐个排查”。大多数情况下优先看HTTP其次看DNS和ICMP如果看到USB相关字段就立刻切到键盘流量分析套路这基本能覆盖八成以上的题目。再补一个很多人不知道的逻辑流量题里flag的位置要么在“通信内容”里要么在“通信方式”里。前者很好理解就是聊天记录里有暗号、表单里有提交的密码、下载的文件里藏字符串。后者则更隐蔽比如有人把一段base64编码后的数据拆成很多小块塞进几十个DNS查询的子域名里或者把flag的每个字符放到ICMP包body的固定偏移位置。识别这类题的关键是观察“反常”——为什么这个IP要持续不断地发起大量DNS查询为什么明明是小文件传输却产生了上百个ping包这些反常点就是出题人留给你的路标。2. 两大过滤器体系显示过滤器才是你真正要花时间记的东西Wireshark里最容易让人栽跟头的就是过滤器。新人经常在顶部那个绿色输入框里胡乱输入一串自己记得半生不熟的语法然后抱怨“为什么不过滤”这通常是把捕获过滤器和显示过滤器搞混了。简单说捕获过滤器Capture Filter是在抓包之前设置的它决定“什么包才被录下来”用的是古老的BPF语法写错了直接收不到包。而显示过滤器Display Filter是在已经抓完的包上做筛选它决定“当前界面显示哪些包”用的是Wireshark自己的一套表达式语法。CTF里我们拿到的是现成的pcap所以绝大多数时候你用的都是显示过滤器。显示过滤器的核心语法其实就三句话按协议名过滤直接输入http、dns、icmp、tcp、udp按字段值过滤ip.src 192.168.1.1、tcp.port 8080、http.request.method POST组合条件http ip.src 10.0.0.1、dns || icmp、tcp.port 80 !http。这里有个小诀窍Wireshark的过滤输入框是有自动补全和语法高亮的当你输入一个字段名时它会提示完整的字段路径如果输入框背景变红说明语法错了这时候不要强行往下写先查一下字段名对不对。我最常用的几个显示过滤组合如下过滤目标过滤器写法适用场景只看HTTP请求与响应http找网页访问记录、表单提交只看特定IP的通信ip.addr 1.2.3.4定位关键主机只看DNS查询dns发现DNS隧道或特殊域名只看ICMP报文icmp检查Ping包的data字段只看TCP SYN包tcp.flags.syn 1 tcp.flags.ack 0发现端口扫描行为只看USB键盘流量usb.transfer_type 0x03 usb.endpoint_address 0x81USB流量题型通用过滤还有一个经常被新手忽略的利器Wireshark的“统计”菜单。我每次拿到陌生pcap第一件事不是翻包而是依次点开“统计 - 协议分级”Protocol Hierarchy和“统计 - 端点”Endpoints。前者能告诉你这段流量里哪个协议占比最大、在哪一层开始分层后者能告诉你哪些IP是通信主体、传输了多少字节。这两个面板点完你对整段流量的“体感”就有了后面再决定深入哪一条线逻辑会顺很多。3. 高频考点逐个拆HTTP、DNS、ICMP、USB键盘流量这四兄弟CTF里流量分析题翻来覆去就考这四类协议把它们各自的套路吃透你就能应付大多数Misc流量题。下面逐个说。3.1 HTTP流量最直白的藏flag方式HTTP流量是新手最容易上手的因为信息全在明面上。出题人常见操作包括把flag直接放在GET请求的URI参数里、放在POST表单字段里、放在Cookie中、放在响应头部的某个自定义字段里、或者藏在HTML注释里。分析HTTP流量的正确姿势是先用http过滤然后“文件 - 导出对象 - HTTP”把服务器传过的所有文件一键导出再逐个查看。这一步能直接解决掉一大批“HTTP传了个压缩包/图片”的题目。如果导出的文件打不开或者内容残缺再用“右键 - 追踪流 - TCP流”去看完整通信。另外注意一个细节HTTP题里经常出现URL编码。看到%25、%7B、%7D这种连续百分号的时候别愣着在线解码或者用Python的urllib.parse.unquote解开里面往往就是flag。3.2 DNS流量子域名和TXT记录都是重点DNS题比HTTP稍微绕一点但规律更强。最常见的一种是把flag拆分后编码进子域名比如ZmxhZy4uLg.example.com解码前两段子域名就能拼出内容。分析时用dns过滤然后看“查询名称”Query Name那一列重点关注长度异常、base64风格字符明显的域名。第二种常见考法是DNS隧道DNS Tunneling特征是某台主机持续不断地发起大量DNS查询响应包的大小也远比正常DNS响应大。这种情况需要把每条查询的子域名提取出来按时间顺序拼接再统一解码。手工复制太累建议直接上tshark命令行一条命令就能把所有查询名拉出来tshark -r capture.pcap -Y dns.qry.name -T fields -e dns.qry.name拉出来的结果按顺序拼好大概率是base32或base64编码解码后就是flag。3.3 ICMP流量别只看IP重点看Data区ICMP题目也是常客。正常ping包的data区域是固定的英文字母序列Windows下是“abcdefghijklmnopqrstuvwabcdefghi”但在CTF里出题人会往data区里塞私货比如直接放ASCII字符串或者塞一个需要解码的hex串。分析时用icmp过滤然后随便点开几个包看data区的内容。如果data区肉眼可见是ASCII字符直接记录并拼接如果看起来是十六进制数字串把每个包的data字段提取出来转成ASCII。要注意的是某些题会把字符分散在连续的多个ICMP包中顺序就是包的时间顺序所以看到data区是明显的单字符或单字节时要有意识地把一整串连续包都看一遍依次拼接。用tshark批量提取data字段的姿势tshark -r capture.pcap -Y icmp -T fields -e data输出结果是按包顺序排列的hex字符串把这些hex转成文本就是答案。3.4 USB键盘流量看起来复杂套路却最固定USB流量题是很多人的噩梦因为协议结构看着就劝退。但冷静下来看它的解法是固定的一旦跑通一次以后就是套模板。这类题通常记录的是USB键盘的输入过程flag就是你“敲”出来的内容——只要你把按键码还原成字符就行。USB键盘上报的数据是8字节第3字节是按键码HID Usage ID。比如0x04对应字母A0x05对应B0x06对应C一直到0x1D对应Z数字0-9对应0x1E到0x27回车是0x28。如果有Shift组合键还需要看第1字节的修饰键位0x02是左Shift0x20是右Shift部分题目会让你区分大小写。拿到pcap后在Wireshark里用usb.transfer_type 0x03过滤出中断传输然后逐个查看数据。更高效的办法是直接用tshark把所有URB数据提取出来再用Python脚本做按键码映射tshark -r capture.pcap -Y usb.transfer_type 0x03 usb.endpoint_address 0x81 -T fields -e usb.capdata接着拿个小脚本把00 00 04 00 00 00 00 00这种原始数据转成字符跑完就得到一串按键序列flag通常就在里面。这套流程是固定模板强烈建议提前准备好脚本比赛时能省下大把时间。4. 把文件从流量里捞出来导出对象、流重组与binwalk联动流量分析题的第二个大类是flag藏在传输的文件里。这种题说难不难但很考验“捞文件”的熟练度。我给你捋一条从简单到复杂的操作链。4.1 第一层直接用导出对象在Wireshark里依次点击“文件 - 导出对象 - HTTP”能看到所有HTTP传输的文件列表勾选就能保存。这一步能解决所有“网页传了个图/压缩包/文档”的题。保存下来的文件如果是压缩包解压后就是flag如果是图片可能要用StegSolve之类的工具再看一层这就进入杂项范畴了但至少文件你是拿到了。4.2 第二层TCP流的原始数据另存有些文件不走HTTP而是通过裸TCP字节流传输。这时候用“右键 - 追踪流 - TCP流”把流内容按原始数据Raw格式保存。这里有个天坑很多人保存流内容时用的是默认的ASCII格式结果二进制文件被文本化最后打不开。选格式的时候一定要切到“原始数据”保存时才不会丢字节。4.3 第三层Foremost/Binwalk直接扫pcap如果上面的操作都拎不清文件在哪直接祭出杀手锏把pcap文件丢给foremost或binwalk。它们会直接扫描文件中的文件签名magic header把pcap里嵌套的png、zip、jpg等直接抽出来。这一步能解决很多隐藏较深的题甚至包括一些把文件藏在非HTTP协议里的情况。4.4 第四层文件分离后的伪加密陷阱从流量里拎出zip之后先别急着高兴CTF出题人不会让你赢得那么轻松。热词里出现的“zip伪加密”就是个经典坑文件确实是zip但文件头里的加密标志位被人为改成了0x09导致解压时要求密码。实际上这个zip根本没有加密只是出题人把标志位改成了加密状态。遇到zip要密码的情况用十六进制编辑器打开压缩包把全局方式位标记General Purpose Bit Flag里的数值从0x09改成0x00保存后再解压文件就直接出来了。CTF里有一种速查解法是直接对比正常zip的头部结构把加密标志位那一字节清零即可。5. 拿到陌生pcap的30分钟排查流程从capinfos到CtrlF前面讲了很多具体知识点实战时怎么把它们串成一条流水线我分享一套自己摸索出来的排查流程从拿到pcap到找到参考答案线索基本能让你在半小时内不走偏。第一步先别急着打开Wireshark。在命令行里用capinfos看pcap的基本信息包括包数量、持续时间、捕获的链路类型。包总数为个位数的题你直接全程跟随流看即可几万包的题多半是USB键盘流量或DNS隧道一上来硬翻会翻到吐。capinfos capture.pcap file capture.pcap第二步打开Wireshark后快速浏览“协议分级”和“会话”。目标只有一个搞清楚主要流量类型占比。看到HTTP占比高走第3章的HTTP套路看到DNS查询次数异常多重点在DNS子域名提取看到USB相关协议直接切到USB键盘分析。第三步全局CtrlF。在Wireshark里按CtrlF搜索类型选“字符串”然后在“包字节”里搜索flag、CTF、{、key、password这些高价值关键词。很多人不知道搜索范围选“包字节”比默认的“包列表”命中率高得多——即使flag没有出现在摘要栏只要它在报文任何位置出现这个搜法都能翻出来。这一步在大量题目里能直接帮你结束战斗。第四步发现疑似线索后理清它是“内容型flag”还是“编码型flag”。如果是明文直接记录如果看起来是一堆奇形怪状的字符串先用base64解再用base32最后尝试hex还原。CTF里90%的编码也就这几层。第五步把命中的关键包右键追踪TCP流/UDP流从上下文里理解flag怎么拼出来的。这一步是为了确保你找到的不是某个字符串的残留或噪音而是真正的答案或解题线索。6. 实战中反复踩过的坑与tshark命令行兜底文章最后集中讲几个我自己在比赛和练习中踩过不止一次的坑。这些坑写出来有点丢人但确实常有新手栽在原地能帮一个是一个。第一个坑是“一上来就Follow TCP Stream”。不是说跟随流没用而是有些题的flag根本不在TCP流里它可能在ICMP的data里、在DNS查询名里、在USB协议里。如果开篇就扎进TCP流很容易在无关的HTTP通信里浪费时间。正确做法永远是先看协议分级确定主战场再动手。第二个坑是“文件另存时格式没切对”。前面提过二进制文件保存时要用Raw格式否则文件头被文本化之后直接变成废文件。保存文件这件事看似小事我见过有人因为这个问题在赛场上卡了半个多小时。第三个坑是“忘了CtrlF全局搜索”。这里再强调一次Wireshark的搜索功能里默认搜的是“包列表”的摘要列很多字段的原始内容不会出现在摘要里。搜索范围一定要选“包字节”搜索类型选“字符串”。这一条值得刻在脑子里。第四个坑是依赖鼠标手动点包忘了tshark。当题目有几百个DNS查询或上千个ICMP包时手工提取就是灾难。这时候tshark 脚本是唯一正解。常备下面几个命令遇到大批量提取场景时直接套用# 提取全部DNS查询名 tshark -r capture.pcap -Y dns.qry.name -T fields -e dns.qry.name # 提取ICMP data字段 tshark -r capture.pcap -Y icmp -T fields -e data # 提取USB键盘按键原始数据 tshark -r capture.pcap -Y usb.transfer_type 0x03 usb.endpoint_address 0x81 -T fields -e usb.capdata # 按会话导出TCP流 tshark -r capture.pcap -q -z follow,tcp,ascii,0这些命令跑完把输出结果用文本编辑器处理后放入脚本结合HID映射表或者base64解码库往往能直接出答案。最后再分享一个小习惯做流量分析题时每找到一个关键点就随手记录一下过滤器和命中位置。CTF题目一紧张就容易乱有记录至少能让你复盘时知道自己当时是怎么走到这一步的。而且这一点对赛后写Writeup特别有帮助——流量分析题的Writeup写到后面其实写的就是你的排查链路链路越清晰读者跟起来就越轻松。我个人一直觉得流量分析是最能体现“侦查思维”的一类题目不依赖奇技淫巧只靠按部就班的观察、过滤、提取、解码。把上面这套流程练熟Wireshark对你来说就不只是一个抓包工具而是一副看清网络现场的火眼金睛。下次再遇到陌生的pcap别慌先看看它整体长什么样再决定从哪里下刀。
返回列表