【笔记】CTF图片、文件的简单取证

本文介绍了CTF中进行图像和文件取证的基本方法,包括GIF取证、文件取证、ZIP压缩密码爆破、MINIX文件挂载、查看十六进制内容、Magic Header识别及PCAP文件中的图片和USB键位信息提取。通过Linux命令和工具,如convert、binwalk、Wireshark等,解析隐藏在各种格式中的信息。

原课程链接:CTF取证实战课程(入门级)- 51CTO

https://edu.51cto.com/course/15228.html

 

文件、图片取证的简单思路:

1、gif图片:提取、拼合

2、可挂载系统文件:挂载系统文件

3、未知格式文件:查看十六进制编码,可能是Magic Header的修改

4、隐藏文件:binwalk提取文件中的隐藏信息;ls -a

5、PCAP:查找敏感信息,分离文件;USB信息

6、压缩包:爆破密码

7、文本:解码,解密

 

 

GIF取证

 

情况1:Flag隐藏在GIF的某一帧中

方法:将每一帧拆分成一个单独的png

linux下,使用:

convert gif文件名 %02d.png

 这句话的意思是将gif的每一帧拆分,并按数字顺序(%02d的作用)命名。

 

情况2:Flag需要将GIF各帧上的图形拼在一起才显现出来

方法:分离再组合

第一步分离:

convert gif文件名 %02d.png

第二步去掉背景白色:

ls *.png | while read filename; do convert $filename -transparent white $filename; done

 第三步,将透明背景的图片组合在一起

ls *.png | while read filename; do convert $filename 00.png -gravity center -composite 00.png; done;

 

 

文件取证

在Linux下,文件没有拓展名,可以用file命令来查询文件格式。

 

unzip:解压zip文件

gunzip:解压gz文件

 

ZIP文件压缩密码爆破

字典:https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt

爆破:

fcrackzip -b -D -v -u -p 字典txt zip文件

 

修复ZIP文件

解压出现这样的报错: bad zipfile offset (错误的ZIP文件偏移量)

 

MINIX 文件

MINIX文件是一个linux下的可挂载文件。

挂载方法:

mkdir mountpoint

mount 文件名 mountpoint/

 

查看十六进制内容

hexeditor 文件名

 

Magic Header

Magic header/Magic number,是具有无法解释含义的唯一值,用于识别文件格式或协议。

例如下图中的89 50 4E 47 0D 0A 1A 0A,就是PNG文件的Magic Header。

此类题目通常是需要我们用16进制读取文件数据,然后将被修改过的Magic Header改回正确的数据

对照:https://en.wikipedia.org/wiki/List_of_file_signatures

 

Binwalk提取隐藏信息

binwalk -e 文件名

-e 即extract

例子:

 

 

PCAP中的图片、文件取证

PCAP中的敏感信息:如名字带flag的文件,图片格式的文件,POST请求,带账号密码的文件等

 

查看所有关联文件

binwalk PCAP包

分离并保存关联文件

foremost PCAP包

查找指定字符串,-i是不区分大小写

string PCAP包 | grep -i "字符串"

例子:

 

解码

echo "字符串" | 编码 -d

如:

echo "dEo2NFpxYmRMdw==" | base64 -d

 

Wireshark中的HTTP方法筛选

http.request.method == GET

 

 

PCAP提取USB键位信息

这里的USB键位信息指的是:键位信息,鼠标信息,存储设备信息。

URB_INTERRUPT in :表示键盘USB信息。

 

筛选出Leftover Capture Data

tshark -r 文件名 -T fields -e usb.capdata

 

 -r: -r <infile> 设置读取本地文件

-T: -T pdml|ps|text|fields|psml,设置解码结果输出的格式,包括text,ps,psml和pdml,默认为text

-e: 如果-T fields选项指定,-e用来指定输出哪些字段;

 

还未弄清楚USB信息部分,待续

 

 

<think>首先,用户的问题是关于CTF比赛中如何进行PNG图片组合取证以获取隐藏信息。用户提到参考了站内引用,特别是引用[1]和[2],这些引用了PNG图片隐写的内容。 我需要根据系统级指令来构建我的回答: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 用户的问题具体是:如何在CTF比赛中进行PNG图片组合取证获取隐藏信息。从引用中,我看到PNG图片隐写包括文件头、文件尾分析,以及分离隐藏文件。 关键点来自引用: - 引用[1]:提到PNG图片隐写,包括文件头、判断类型、分离文件等。 - 引用[2]:具体说明如何查找PNG文件尾(AE 42 60 82),并提到如果隐藏了数据,文件尾后可能有压缩包(PK开头),可以使用binwalk或foremost分离,或直接改后缀。 - 引用[3]和[4]:关于取证分析,但更偏向内存和磁盘取证,与PNG图片直接相关较少。所以,我应该主要参考[1]和[2]。 我的回答应该结构清晰,逐步解释过程: 1. **理解PNG文件结构**:解释PNG文件的头和尾。 2. **检查隐藏数据**:如何查找文件尾后的额外数据。 3. **分离隐藏文件**:使用工具如binwalk、foremost,或手动方法。 4. **提取信息**:一旦分离,如何访问隐藏内容。 5. **其他相关技术**:如LSB隐写、盲水印等,但用户指定了“组合取证”,可能涉及多个图片或数据组合。 用户说“PNG图片组合取证”,可能意味着分析多个PNG图片组合起来隐藏信息,或者PNG文件中组合了其他数据。从引用[2]看,是单个图片中隐藏文件。 在CTF中,“组合取证”可能指: - 多个图片文件组合成一个信息。 - 一个图片文件中组合了多个数据块。 基于引用,我应该专注于单个PNG文件的隐写分析,因为它是最常见的。 步骤大纲: 1. **检查PNG文件头**:确认文件类型。 - PNG文件头:89 50 4E 47 0D 0A 1A 0A (十六进制)。 2. **查找文件尾**:PNG文件尾是 IEND 块,签名为 AE 42 60 82。 3. **分析额外数据**:如果文件尾后有数据,可能隐藏了文件。 4. **使用工具分离**: - binwalk:扫描文件提取嵌入文件。 - foremost:类似,提取文件。 - 手动方法:用十六进制编辑器查找PK(zip)或其他签名。 5. **提取和访问**:一旦分离,解压或查看隐藏文件。 6. **其他隐写技术**:如果涉及LSB等,但用户指定“组合取证”,可能不是主要。 生成相关问题: - 基于主题,如其他图片类型隐写、工具使用、常见挑战等。 回答结构: - 引言:简要介绍PNG图片隐写在CTF中的重要性。 - 逐步方法: 1. 确认文件类型。 2. 检查文件头和尾。 3. 查找隐藏数据。 4. 分离隐藏文件。 5. 提取信息。 - 示例:可能给出一个简单示例。 - 相关问题。 添加引用:在相关部分末尾添加[^1]、[^2]等。 确保LaTeX:如果有数学,如计算偏移,但PNG隐写可能不涉及数学,所以可能不需要。但如果有,用$...$。 最后,生成相关问题。</think>### CTF比赛中PNG图片组合取证获取隐藏信息的方法 在CTF(Capture The Flag)比赛中,Misc方向(杂项)经常涉及图片隐写,其中PNG格式因其结构清晰而成为常见目标。PNG图片组合取证指通过分析PNG文件的二进制结构、数据块组合或与其他文件的关联,来提取隐藏信息(如压缩包、文本或flag)。以下我将逐步解释这一过程,确保方法可靠且基于实际CTF场景。参考了站内关于PNG隐写的资料[^1][^2],并结合常见工具和技术。 --- ### 步骤1: 确认PNG文件类型和结构 PNG文件有固定的文件头和文件尾,这是分析的基础。你需要先验证文件是否为PNG格式: - **文件头**:PNG文件头始终为 `89 50 4E 47 0D 0A 1A 0A`(十六进制),对应ASCII字符 `.PNG....`。这用于识别文件类型[^1]。 - **文件尾**:PNG文件以IEND块结束,签名为 `AE 42 60 82`(十六进制)。如果文件尾后还有额外数据,可能隐藏了其他文件(如压缩包)[^2]。 使用工具快速检查: - **十六进制编辑器**(如HxD、010 Editor):打开PNG文件,查看开头和结尾字节。 - **命令行工具**:在Linux/macOS中,用 `xxd` 命令输出十六进制: ```bash xxd -p 文件名.png | head -n 1 # 查看文件头 xxd -p 文件名.png | tail -n 1 # 查看文件尾 ``` 如果文件尾后出现非PNG数据(如 `50 4B` 表示PK开头,即ZIP压缩包),则可能有隐藏信息[^2]。 --- ### 步骤2: 分析隐藏数据组合 PNG图片中隐藏信息通常通过“组合”方式实现,即PNG文件结构后附加额外数据块。常见组合包括: - **尾部附加文件**:在PNG的IEND块后,直接附加ZIP、TXT或其他文件(常见于CTF题目)。 - **数据块组合**:PNG由多个数据块(Chunks)组成(如IHDR、IDAT、IEND)。攻击者可能修改或添加非常规块(如tEXt块存储文本)来隐藏信息。 - **多文件组合**:多个PNG文件可能需拼接或比较(如通过XOR操作)才能提取完整信息。 操作步骤: 1. **查找文件尾后数据**:在十六进制编辑器中,搜索 `AE 42 60 82`(文件尾签名)。如果其后有数据: - 查找常见签名:`50 4B`(ZIP)、`52 61 72`(RAR)、`FF D8 FF`(JPG)等,表明隐藏了文件[^2]。 2. **检查数据块**:PNG数据块包含长度、类型、数据和CRC。使用工具如 `pngcheck` 扫描异常块: ```bash pngcheck -v 文件名.png # 列出所有块,检查是否有可疑tEXt或IDAT块 ``` 如果发现冗余IDAT块(存储图像数据)或tEXt块包含Base64编码,可能隐藏信息。 --- ### 步骤3: 分离和提取隐藏文件 一旦发现可疑数据,需分离并提取隐藏内容。优先使用自动化工具,再手动验证: - **自动化工具**: - **binwalk**:扫描文件并提取嵌入内容。命令示例: ```bash binwalk -e 文件名.png # 自动提取隐藏文件到_output目录 ``` 如果输出显示 "ZIP archive" 或 "RAR archive",表明成功分离[^2]。 - **foremost**:类似binwalk,但更专注于文件恢复: ```bash foremost -i 文件名.png -o 输出目录 ``` - **dd命令**(手动分离):如果知道隐藏数据偏移量,用dd提取: ```bash dd if=文件名.png of=隐藏文件.zip skip=偏移量 bs=1 ``` 偏移量可通过十六进制编辑器计算(文件尾位置 + 4字节)。 - **提取后处理**: - 如果分离出ZIP/RAR,解压查看内容(可能包含flag.txt)。 - 如果提取出文本或编码数据,使用Base64解码或XOR分析(例如,在Python中:`bytes([a ^ b for a, b in zip(data1, data2)])` 比较两个PNG文件)。 --- ### 步骤4: 处理组合取证的特殊情况 在CTF中,“组合取证”可能涉及更复杂的场景: - **多PNG文件关联**:如果题目提供多个PNG文件,需组合分析: - **图像拼接**:用工具(如Python的PIL库)将多个图片拼接成一张,可能揭示隐藏信息。 - **差异比较**:使用 `compare` 命令(ImageMagick)或脚本比较像素差异: ```bash compare 文件1.png 文件2.png 差异.png # 输出差异图,可能显示flag ``` - **隐写术组合**:结合其他技术增强取证: - **LSB隐写**:用工具如Stegsolve检查PNG的Least Significant Bit(最低有效位),提取隐藏文本[^1]。 - **盲水印**:如果PNG包含水印,使用工具如OpenCV检测(例如,频域分析)。 - **宽高修改**:PNG的IHDR块存储宽高;修改宽高可能导致图像显示不全,用 `exiftool` 查看并修复: ```bash exiftool 文件名.png # 检查宽高,如果异常,调整以显示隐藏区域 ``` --- ### 示例:简单CTF题目复现 假设题目文件 `flag.png` 在CTF中出现: 1. 用 `xxd` 查看文件尾:发现 `AE 42 60 82` 后有 `50 4B`。 2. 运行 `binwalk -e flag.png`,提取出 `flag.zip`。 3. 解压zip,得到 `flag.txt`,内容为flag。 此方法在真实CTF中常见,成功率较高[^1][^2]。 --- ### 注意事项 - **工具选择**:优先用binwalk或foremost自动化处理,手动方法(如十六进制编辑器)作为补充。 - **错误处理**:如果分离失败,检查文件是否损坏或使用其他工具(如 `strings 文件名.png | grep 'CTF'` 搜索明文)。 - **可靠性**:基于PNG标准,方法适用于大多数CTF场景。但高级题目可能用加密或混淆,需结合密码学知识。 - **参考资源**:更多细节可参考PNG文件格式标准或CTF writeups[^1][^2]。 通过以上步骤,你能高效处理PNG组合取证,快速获取隐藏信息。实践中,多练习CTF题目(如来自CTFtime或HackTheBox)以提升技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值