CTF笔记 MISC#2 流量分析工具(Wireshark)简单使用总结&PNG格式标准
流量分析工具(Wireshark)
在CTF比赛中的MISC的类别下,流量分析是一项十分重要的考察方向。
通常比赛中会提供一个流量数据包文件(PCAP/PCAPNG),让选手对该数据包分析来获得flag。
Wireshark是目前使用最广泛功能基本上最强大的开源网络封包分析软件,也叫小鲨鱼。
Wireshark可以用来抓取流量包也可以用来对抓取到的流量包(pcap/pcapng文件)进行解析。
CTF比赛中,一般使用Wireshark解决流量分析类题目。
界面
开始抓包或者将一个已经打包好的流量包文件使用Wireshark打开后便会出现这样的界面。
其中,过滤栏、数据列表、数据包详情、原始数据四部分最为重要。
在数据列表中,各类型的数据包会被着上如下所示的不同颜色,可以方便我们快速判断数据包类别。
过滤器(过滤栏)
初使用wireshark时,由于目前计算机网络会在同时段内进行大量的数据交互,你将会得到大量的冗余数据包列表,以至于很难找到自己真正需要的数据包部分。
而流量分析题目最复杂的地方,便是靠大量冗余数据包进行混淆而使得真正包含flag相关内容的数据包被隐藏。这对选手的分类过滤流量包能力进行了挑战。
因此,学习解答流量分析类题目的第一步便是要学会如何使用Wireshark的过滤器。
基本格式
1 | [not] Expression [and|or] [not] Expression |
比较运算符
1 | == 等于 |
逻辑运算符(可以用于连接多条语句或元素)
1 | and , && #与 |
协议过滤(直接输入小写协议名称)
1 | tcp #筛选协议为tcp的流量包 |
描述符
1 | host #主机 |
用例
1 | ip.src == 地址 #源ip筛选 |
常用表达式
1 | #数据链路层 |
需要特别注意的是:
http协议的语句中
http.request表示请求头中的第一行 (如GET index.jsp HTTP/1.1)
http.response表示响应头中的第一行(如HTTP/1.1 200 OK)
其他头部都用http.header_name形式
实际用例
1 | ip.dst == 210.30.97.133 and http |
直接选中过滤
也可直接点选后作为过滤器应用
数据包还原
Wireshark还具有一个追踪数据流的功能,它可以将分散的HTTP或TCP流量集合在一起并还原出原始数据。
右键点击需要追踪的数据流中的其中一条,选择追踪流 —— (TCP 流/ UPD 流/ SSL 流/ HTTP 流)
即可还原出整条完整的数据包流
数据提取
Wireshark 还支持对于通过 HTTP 协议传输的文件内容进行提取
文件——导出对象——选择HTTP流
Wireshark会自动识别可导出的传输的文件和文件类型,如果Wireshark识别不了则需要我们手动处理
图片隐写补充
在上一篇文章中已经介绍了几种图片隐写,本次补充一些内容
EXIF信息
简单来说,Exif 信息是数码相机(或智能手机)在拍摄过程中采集的一系列的信息,它一般会放在照片文件的头部,使用010editor可以查看或直接在Windows下右键图片查看详细信息
严格意义上,EXIF信息不算隐写术,但题目中经常将一些隐藏的信息写入EXIF
PNG文件标准
PNG文件以它本身的性质成为了CTF竞赛中图片隐写题的常客,因此了解PNG文件的标准是有必要的。
参考来源:PNG文件格式详解
PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。
PNG图像格式文件由文件署名和数据块(chunk)组成,其中每个数据块都由下表所示的的4个域组成。
其中最后四字节是使用CRC-32算法对Chunk Type Code域和Chunk Data域中的数据进行计算得到的,是一种校验码,可以检测数据是否损坏或被篡改过。
关键数据块
PNG文件拥有4个标准的关键数据块,分别是文件头数据块IHDR(header chunk),调色板数据块PLTE(palette chunk),图像数据块IDAT(image data chunk)以及图像结束数据IEND(image trailer chunk),这四个数据库对于每个PNG文件都是必不可少的,而多数PNG的图片隐写题也是对这四个数据块进行修改。
文件头数据块IHDR(header chunk):
IHDR包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。文件头数据块固定长度为13字节,组成结构如下:
其中Width和Height两项数据可以被篡改,于是就有了宽高隐写类型题目。
调色板数据块PLTE(palette chunk)重要程度较低,此处暂且按下不表。
图像数据块IDAT(image data chunk)
存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
图像结束数据IEND(image trailer chunk)
它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
并且它总是为以下的12字符
1 | 00 00 00 00 49 45 4E 44 AE 42 60 82 |
不难明白,由于数据块结构的定义,IEND数据块的长度总是0(00 00 00 00,除非人为加入信息),数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。
最后,除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制。