CTF案例 | MISC隐写-解题思路大杂烩讲解
字数 1999 2025-08-20 18:18:23
CTF MISC隐写技术全面解析
一、前言
在CTF竞赛的MISC方向中,隐写术是非常常见的题型。各种文件格式都可以用于隐藏flag信息,包括但不限于:PNG、JPG、BMP、GIF、Word、PPT等。本文将系统性地介绍各类文件的隐写方式、解密原理及相关工具使用方法。
二、PNG文件隐写
1. 文件头修复
常见文件头尾签名:
- PNG: 文件头
89 50 4E 47 0D 0A 1A 0A,文件尾AE 42 60 82 - JPEG: 文件头
FF D8 FF,文件尾FF D9 - GIF: 文件头
47 49 46 38 39(37) 61,文件尾00 3B - BMP: 文件头
42 4D - ZIP: 文件头
50 4B 03 04,文件尾50 4B 01 02或50 4B 05 06
使用010 Editor等16进制编辑器可以查看和修复文件头。
2. 宽高隐写
PNG文件结构关键点:
- 前8字节为文件头签名
- 接下来4字节
00 00 00 0D表示数据块长度为13 - 接着4字节
49 48 44 52(IHDR)是文件头数据块标识 - 接下来的13字节数据块中,前4字节为宽度,后4字节为高度
宽高修复脚本示例:
import zlib
import struct
import itertools
bin_data = open(args.f, 'rb').read()
crc32key = zlib.crc32(bin_data[12:29]) # 计算crc
original_crc32 = int(bin_data[29:33].hex(), 16) # 原始crc
if crc32key == original_crc32:
print('宽高没有问题')
else:
for i, j in itertools.product(range(4095), range(4095)):
data = bin_data[12:16] + struct.pack('>i', i) + struct.pack('>i', j) + bin_data[24:29]
crc32 = zlib.crc32(data)
if(crc32 == original_crc32):
print(f"宽度: {i}, hex: {hex(i)}")
print(f"高度: {j}, hex: {hex(j)}")
exit(0)
3. LSB隐写
最低有效位(LSB)隐写原理:
- 修改RGB颜色分量的最低二进制位
- 每个像素可携带3比特信息
- 人眼难以察觉变化
常用工具:
- StegSolve 1.4:提供Data Extract功能查看隐藏信息
- zsteg:检测PNG和BMP中的隐藏数据
zsteg filename.png # 简单检测 zsteg -a filename # 检测所有通道LSB zsteg -e b8,a,lsb,xy file.png -> out # 提取特定通道数据
4. 盲水印
分为单图和双图盲水印:
- 双图盲水印工具:BlindWaterMark
python bwm.py decode hui.png hui_with_wm.png wm_from_hui.png - 单图盲水印可使用watermark工具
5. 附加文件隐写
使用工具提取隐藏文件:
- binwalk:
binwalk filename # 查看附加文件 binwalk -e filename --run-as=root # 提取文件 - foremost:
foremost -o output_dir filename
6. IDAT块隐写
检测工具:
- pngcheck
- PNGdebugger
三、JPG/JPEG文件隐写
1. 宽高修改
JPG文件结构:
FF C0为起始头- 宽高信息位于:
FF C0 00 11 08 [精度] [高] [宽]
2. EXIF信息
EXIF可能包含flag、密码等关键信息。
查看工具:
- 在线网站:https://exif.tuchong.com/
- Linux:exiftool
- Windows:元数据编辑器
四、BMP文件隐写
关键点:
- 文件头:
42 4D - 宽高修改方式与PNG类似
五、GIF文件隐写
1. 逐帧分析
使用工具:
- StegSolve逐帧查看
- convert工具分割帧:
convert glance.gif flag.png # 逐帧分割 montage flag*.png -tile x1 -geometry +0+0 flag.png # 合并图片
2. 帧信息分析
使用identify工具:
identify -format "%T" flag.gif
六、音频文件隐写
1. 拨号音分析
使用DTMF解码工具:https://github.com/ribt/dtmf-decoder
2. SSTV隐写
工具:
- MMSSTV
- e2eSoft
3. 频谱/波形分析
工具:
- Audacity
- Adobe Audition
4. MP3隐写
使用mp3stego工具:
# 加密
encode.exe -E hidden_text.txt -P pass svega.wav svega_stego.mp3
# 解密
decode.exe -X svega_stego.mp3 -P pass
七、文本文件隐写
1. 零宽隐写
在线解码网站:
- https://www.qqxiuzi.cn/bianma/yincangjiami.php
- http://330k.github.io/misc_tools/unicode_steganography.html
2. snow隐写
工具:SNOW
SNOW.exe -p password filename > outfile
八、Office文档隐写
1. Word/PPT隐写
技巧:
- 修改后缀为zip后解压查找
- 文字颜色修改
- 全选(Ctrl+A)可能有意外发现
- 密码爆破
2. Excel隐写
常见形式:
- 方块规律转换为二进制
- 黑白块组成二维码
九、Pyc隐写
工具:Stegosaurus
- 在Python字节码文件(pyc/pyo)中嵌入Payload
- GitHub: https://github.com/AngelKitty/stegosaurus
十、综合隐写工具
1. 常用工具
- oursecret:支持多种文件格式
- Outguess:支持PPM、PNM、JPG格式
- steghide:支持JPG、BMP、WAV
- F5隐写:支持BMP、GIF、JPG
- stegdetect:检测图片隐写方式
- SilentEye:支持JPEG、BMP、WAVE的LSB隐写
- DeepSound:WAV文件隐写
2. 集成工具
- CTF站点导航:https://ctf.mzy0.com/
- ToolsFx:跨平台密码学工具箱
- TaowaTools:集成snow+stegohide+jsteg+LSB等功能
十一、总结
MISC隐写技术种类繁多,关键在于:
- 熟悉各种文件格式结构
- 掌握常用工具使用方法
- 培养敏锐的观察力和分析能力
- 积累常见隐写模式的识别经验
通过系统学习和大量实践,才能在各种CTF比赛中游刃有余地解决隐写类题目。