news 2026/9/28 20:14:34

CTF 流量分析实战:从 Wireshark 到 tshark 还原 HTTP 盲注流量中的 Flag

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CTF 流量分析实战:从 Wireshark 到 tshark 还原 HTTP 盲注流量中的 Flag
  • 文档
  • 网络安全
  • 教程

【免费下载链接】ctf-wiki

Come and join us, we need you!

项目地址:https://gitcode.com/gh_mirrors/ct/ctf-wiki
点击查看免费下载

导读

本篇技术指南以 CTF 中经典的流量包取证场景为主线,围绕 ctf-wiki 仓库中 HTTP 协议分析文档 展开,完整复现「江苏省领航杯-2017:hack」一题的解题链路:通过 Wireshark 的协议分级与 HTTP 统计把握流量总体特征,识别出 SQL 盲注型 HTTP 流量,再借助 tshark 批量提取 URL、配合 Python 脚本还原出被逐位爆破的 Flag。读完本文,你将掌握 HTTP 协议流量分析的基本流程、布尔盲注流量的典型识别特征,以及tshark -T fields -e这一高效命令行提取手段的实战用法。

HTTP 协议:流量取证的基础背景

HTTP(Hyper Text Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议,也是万维网数据通信的基础。在 CTF 的 Misc 流量分析题目中,HTTP 协议流量是最常见的考察对象之一:比赛方通常会提供一个 PCAP 文件,其中混杂着大量无关流量,选手需要先分类过滤,再定位到包含关键信息的 HTTP 请求或响应,最终从中提取出 Flag。

结合仓库中 流量包分析简介 的总结,一次完整的流量分析通常分为四步:

  1. 总体把握:利用协议分级(Protocol History)、端点统计(Endpoints)快速判断流量的主体协议与通信双方;
  2. 过滤筛选:借助显示过滤器语法,按 Host、协议、字符串特征缩小范围;
  3. 发现异常:查找特殊字符串、异常的协议字段,或判断「Flag 是否位于服务器中」;
  4. 数据提取:用字符串提取或文件还原的方式取出最终数据。

hack一题正是上述流程的典型实践——先通过总体观察锁定「HTTP 为主」,再通过 URL 特征识别出盲注行为,最后用 tshark + Python 完成数据提取。

例题实战:江苏省领航杯-2017「hack」

总体观察:锁定流量主体

拿到hack.pcap流量包后,首先在 Wireshark 中做总体观察,可以得到三个关键结论:

  • HTTP协议为主:流量的绝大部分数据包都是 HTTP 请求,而非其他协议;
  • 192.168.173.134为主:所有 HTTP 请求都指向同一个服务端 IP,通信目标高度集中;
  • 不存在附件:没有需要从 HTTP 响应中导出的文件对象,Flag 不以文件形式藏在数据包里。

下图是使用 Wireshark 对流量按 Host 进行 HTTP 统计的结果,可以直观印证上述判断:流量中所有 HTTP 请求均指向192.168.173.134,URL 统一为根路径下的index.php,且请求参数均为id,数量多达上千个,呈现出典型的自动化批量请求特征。

特征判断:这是一份 SQL 盲注流量包

从这张统计图中可以看到更进一步的细节:请求 URL 形如/index.php?id=1%27and%201=1%23(URL 编码了单引号'、空格与注释符#,是典型的单引号字符型 SQL 注入测试语句),以及/index.php?id=1%27and%20(select%20ascii(substr(database(),1,1)))=33%23这类请求——后者属于布尔盲注的核心特征:攻击者逐位猜测数据库或字段内容的 ASCII 值,通过构造恒真/恒假的 SQL 条件,从页面返回差异中确认每一位的取值。

结合「大量同参数、同结构的密集请求」「URL 中带and、ascii、substr、%23(注释符)等关键字」这两点,基本可以判断:这是一个 SQL 盲注过程中产生的流量包。

由此可以确定 Flag 的还原方向:盲注的每一次请求都在猜测某个字符的 ASCII 码,因此提取出全部 URL,解析出其中猜测的 ASCII 值序列,再转换为字符,即可得到 Flag。

提取 URL:tshark 一条命令搞定

手工在 Wireshark 中翻上千个请求显然不现实,这里使用 Wireshark 的命令行版tshark批量提取。核心命令如下:

tshark -r hack.pcap -T fields -e http.request.full_uri | tr -s '\n' | grep flag > log

这条命令的语义是:

片段作用
-r hack.pcap指定读取的流量包文件
-T fields将输出格式切换为「字段模式」,只打印指定字段
-e http.request.full_uri指定提取 HTTP 请求的完整 URI 字段
tr -s '\n'将连续换行压缩为单个换行,去掉空行
grep flag > log只保留包含flag的请求行,写入log文件

执行后,log文件中就是所有与 Flag 猜测相关的盲注请求 URL,每条请求中的=数字%23部分即每次猜测的 ASCII 值。

还原 Flag:Python 脚本解析盲注结果

拿到 URL 列表后,用 Python 正则提取每次猜测的数值并还原字符。原文档给出的脚本如下:

import re with open('log') as f: tmp = f.read() flag = '' data = re.findall(r'=(\d*)%23', tmp) data = [int(i) for i in data] for i, num in enumerate(data): try: if num > data[i+1]: flag += chr(num) except Exception: pass print flag

脚本的核心逻辑值得拆解:

  • re.findall(r'=(\d*)%23', tmp):匹配 URL 中=与%23(即#注释符)之间的一段数字。例如...ascii(substr(database(),1,1)))=33%23会提取出33,这正是盲注对某个字符的 ASCII 猜测值;
  • int(i)统一转为整数,便于比较大小;
  • 关键循环if num > data[i+1]:布尔盲注对每个字符是从小到大逐值尝试、命中后即进入下一字符,因此同一字符的多个猜测值单调递增,而相邻字符交界处会出现「前一个值大于后一个值」的断点。脚本利用这一规律,把每个递增序列的末尾值(即匹配成功的 ASCII 码)用chr(num)转换为字符并拼接,最终得到完整的 Flag;
  • except Exception: pass:处理列表末尾越界的情况。

需要说明的是,脚本末尾的print flag是 Python 2 语法(原文基于 Python 2 环境)。若在 Python 3 下运行,只需将最后一行改为print(flag),其余逻辑完全一致,可原样复现。整个提取过程无需手工干预,一条tshark管道命令加十余行脚本即可从流量包直达 Flag,这也是这类题目「流量包取证 + 数据还原」的标准解法。

工具纵深:Wireshark 与 tshark 的配合用法

Wireshark 侧的 HTTP 统计

在本例的「总体观察」环节,Wireshark 的信息统计功能提供了重要依据:

  • 协议分级(Protocol History):以树状分支展示捕获文件中所有协议的包数、字节数与带宽占比,用于判断「HTTP 为主」;
  • 端点统计(EndPoints):列出所有通信端点上的统计信息,用于确认「192.168.173.134为主」这一结论;
  • HTTP 统计(Packet Counter):按 Host / URI 聚合 HTTP 请求数量,直观呈现目标高度集中在index.php?id=...上,见上文插图。

上述功能的具体操作与字段含义可参考仓库中的 Wireshark 常用功能介绍,其中还包含显示过滤器语法([not] Expression [and|or] [not] Expression)、== != > < >= <=与and/or/not等运算符的用法说明。

tshark 侧的高效提取范式

Wireshark 图形界面适合「观察与定位」,而批量提取数据则更适合 tshark。仓库 数据提取 一节总结了 tshark 的通用范式:

tshark -r **.pcap -Y ** -T fields -e ** | **** > data

其中:

  • -Y <display filter>:指定显示过滤器,语法与 Wireshark 显示过滤器一致,用于先过滤后提取;
  • -T fields:文本输出格式切换为字段模式(其他可选值还包括pdml、ps、json、ek、tabs、text等);
  • -e <field>:指定要打印的字段名,例如http.request.full_uri、usb.capdata、dns.qry.name等。

一个实用技巧是:当不确定-e后面该填什么字段时,可以在 Wireshark 中右键点击感兴趣的数据段,直接拷贝对应的字段名,保证字段拼写准确。

同样的tshark -T fields -e范式在本仓库的其他例题中也被反复使用,例如 DNS 协议分析 中用tshark -r dnscap.pcap -T fields -e dns.qry.name提取子域名隐写数据,以及 数据提取 中通过-e usb.capdata配合awk还原鼠标轨迹坐标。可见「-Y过滤 +-e取字段 + 管道交给文本工具/脚本」是贯穿整个流量分析章节的通用方法论。

小结

以「领航杯-2017:hack」为代表的 HTTP 盲注流量题,完整覆盖了 CTF 流量分析的三个核心步骤:

  1. 协议分析:用 Wireshark 的协议分级、端点统计与 HTTP 聚合统计,快速得出「HTTP 为主、目标单一、无附件」的总体判断;
  2. 异常发现:从 URL 中的and、ascii(substr())、%23等关键字与密集的相同参数请求,识别出 SQL 布尔盲注行为,确定 Flag 藏在猜测的 ASCII 序列中;
  3. 数据提取:用tshark -r xxx.pcap -T fields -e http.request.full_uri一条命令完成 URL 批量提取,再用正则 + 字符比较还原出 Flag。

掌握「Wireshark 观察定位、tshark 批量提取、脚本还原数据」的组合拳,就足以应对大多数 HTTP 协议相关的流量取证题目。在此基础上,可进一步阅读仓库中的 HTTPS、FTP、DNS 等协议分析章节,举一反三地扩展到更丰富的取证场景。

  • 文档
  • 网络安全
  • 教程

【免费下载链接】ctf-wiki

Come and join us, we need you!

项目地址:https://gitcode.com/gh_mirrors/ct/ctf-wiki
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 20:14:23

Jev视觉生成模型全解析:定位、部署、参数调优与避坑指南

最近后台一直有人在问同一个问题&#xff1a;Jev到底是什么AI模型&#xff1f;明明不做自然语言生成&#xff0c;为什么讨论度这么高&#xff1f;我把零散的信息合并起来&#xff0c;结合自己的实测体验&#xff0c;这篇一次性把Jev的定位、申请、部署思路和典型坑全部讲透。先…

作者头像 李华
网站建设 2026/9/28 20:13:54

本地部署多模态家庭记忆档案:OCR、语音识别与向量检索搭建指南

“把短短几年的人生拆碎了&#xff0c;铺满了妻子的一生”——这句话如果从技术角度翻译&#xff0c;其实是在描述一个非常具体的数据工程任务&#xff1a;把一个人短暂人生里散落的照片、录像、录音、手写文字、社交媒体记录全部拆成可检索的原子数据&#xff0c;再通过时间线…

作者头像 李华
网站建设 2026/9/28 20:12:53

基于Catmull-Rom的曲线编辑器Demo演示

一、整体架构&#xff1a;MVC 式的 Delegate 模式 这套代码的核心思想是数据与逻辑分离&#xff1a;角色谁职责数据模型&#xff08;Model&#xff09;CurveDelegate 里的 std::vector<ImVec2> points只存数据&#xff0c;不画、不处理鼠标视图控制器&#xff08;View/Co…

作者头像 李华
网站建设 2026/9/28 20:12:48

深度学习情感分析实战:数据预处理与BiLSTM模型部署的坑与细节

简介&#xff1a;一份基于深度学习的电影评论情感分析系统完整项目&#xff0c;面向Python毕业设计、课程设计或希望入门情感分析、Web开发的读者。系统功能完善、界面美观&#xff0c;操作简单&#xff0c;管理便捷&#xff0c;前端采用HTML/CSS/JavaScript&#xff0c;后端为…

作者头像 李华