- 文档
- 网络安全
- 教程
【免费下载链接】ctf-wiki
Come and join us, we need you!
导读
本篇技术指南以 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。
结合仓库中 流量包分析简介 的总结,一次完整的流量分析通常分为四步:
- 总体把握:利用协议分级(Protocol History)、端点统计(Endpoints)快速判断流量的主体协议与通信双方;
- 过滤筛选:借助显示过滤器语法,按 Host、协议、字符串特征缩小范围;
- 发现异常:查找特殊字符串、异常的协议字段,或判断「Flag 是否位于服务器中」;
- 数据提取:用字符串提取或文件还原的方式取出最终数据。
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 流量分析的三个核心步骤:
- 协议分析:用 Wireshark 的协议分级、端点统计与 HTTP 聚合统计,快速得出「HTTP 为主、目标单一、无附件」的总体判断;
- 异常发现:从 URL 中的
and、ascii(substr())、%23等关键字与密集的相同参数请求,识别出 SQL 布尔盲注行为,确定 Flag 藏在猜测的 ASCII 序列中; - 数据提取:用
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!
相关推荐
HTTP 流量包分析实战:以 SQL 注入盲注流量為例(ctf-wiki)
HTTP 流量包分析实战:以 SQL 注入盲注流量為例(ctf wiki) 本篇技術指南以 ctf wiki 流量分析章節中 HTTP 協議分析 https:/
文档网络安全教程CTF 流量取证之数据提取:基于 ctf-wiki 的 Wireshark 与 tshark 实战指南
CTF 流量取证之数据提取:基于 ctf wiki 的 Wireshark 与 tshark 实战指南 流量包取证是 CTF Misc(杂项)方向的核心考察点之
文档网络安全教程CTF 流量包數據提取實戰:從 Wireshark、tshark 到自定義協議解析
CTF 流量包數據提取實戰:從 Wireshark、tshark 到自定義協議解析 本文圍繞 CTF Wiki 流量分析章節 https://link.gitc
文档网络安全教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考