CTF入门|第6期隐写术入门"

admin 2026-10-21 13:12:50 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

# 图片隐写合并Windows: copy /b normal.jpg + secret.zip output.jpgLinux: cat normal.jpg secret.zip > output.jpg# 提取工具binwalk output.jpgforemost output.jpg# dd手动分离dd if=output.jpg of=extracted.zip bs=1 skip=偏移量

▎ EXIF元数据信息

JPEG图片中存储的EXIF(可交换图像文件格式)数据,可能包含GPS坐标、相机型号、拍摄时间等元信息。CTF中有时Flag就直接写在EXIF里。

# EXIF查看exiftool image.jpg# 字符串检索strings image.jpg | grep -i \"flag\\|ctf\\|secret\"# Python读取EXIFfrom PIL import Imageimg = Image.open(\"image.jpg\")print(img._getexif())

三、LSB隐写详解

LSB(Least Significant Bit,最低有效位)是最基础也最高频的隐写手法。每个像素由R、G、B三个字节组成(24位真彩色),修改每个字节的最低位(即最低1个比特),人眼根本无法察觉颜色变化,却能存储大量信息。一张1920×1080的图片,LSB隐写可存储约1920×1080×3÷8 ≈ 777,600字节(约760KB)的秘密数据。

LSB隐写的提取方式有两种:按行扫描(从上到下、从左到右提取每个像素的LSB)和按颜色通道提取(分别提取R/G/B通道的LSB信息)。Stegsolve工具可以非常方便地完成这些操作。        ▎ Stegsolve工具详解

Stegsolve是CTFer人手必备的图片隐写分析工具,基于Java开发。它的核心功能包括:

# Stegsolve启动java -jar stegsolve.jar# 基础操作1. File->Open 载入图片2. 左右箭头切换RGB/Alpha通道3. Analyse->Data Extract LSB提取4. Bit Order: LSB First/MSB First5. Plane: RGB/BGR/RGBA6. Preview预览,出现flag即成功

▎ Python手动实现LSB提取

理解LSB原理后,用Python手动实现能加深认识。核心思路:加载图片像素矩阵,提取每个颜色通道的最低位,拼接成二进制数据后转回ASCII。

from PIL import Imagedef extract_lsb(p):    img=Image.open(p)    pix=img.load()    b=[]    for y in range(img.height):        for x in range(img.width):            r,g,b=pix[x,y][:3]            b+=str(r&1),str(g&1),str(b&1)    s=\"\".join(b)    return \"\".join([chr(int(s[i:i+8],2)) for i in range(0,len(s)-7,8)])print(extract_lsb(\"stego.png\"))

四、音频隐写

音频隐写在CTF中虽然没有图片隐写常见,但几乎是每场大赛的\"必出题型\"。最典型的两种手法:频谱隐写和波形隐写。        ▎ 频谱隐写(Spectrogram)

频谱隐写是将文字或二维码隐藏在音频文件的频谱图中。用Audacity打开音频文件,切换到频谱图视图(Spectrogram),就能看到隐藏在频域中的图案——通常是一个二维码或一串文字。

# Audacity音频隐写频谱查看1. File->Open 载入音频2. 选中轨道,左侧切换Spectrogram频谱图3. Settings->Scale->Linear4. 调整Window Size窗口大小5. 出现二维码截图扫码获取flag

▎ 波形隐写与摩斯电码    有些音频隐写将信息编码为摩斯电码形式的嘀嗒声,或通过波形的振幅变化来编码二进制数据。用Audacity查看波形图,识别出长音(-)和短音(.)即可还原出摩斯电码。

# 摩斯解码在线工具:https://morsecode.world/international/decoder/audio-decoder-adaptive.html.-=A -...=B -.-.=C -..=D.=E ..-.=F --.=G ....=H..=I .---=J -.-=K .-..=L--=M -.=N ---=O .--.=P--.-=Q .-.=R ...=S -=T..-=U ...-=V .--=W -..-=X-.--=Y --..=Z

五、文件隐藏与分离

很多CTF隐写题会将多个文件拼接在一起(如图片尾部附加ZIP、ZIP中嵌套其他文件),需要专门的工具来检测和分离。掌握以下工具能应对绝大部分文件分离场景。

# binwalkbinwalk mystery.pngbinwalk -e mystery.png# foremostforemost -i mystery.png -o output/# 字符串检索strings mystery.png | grep -i \"flag\\|ctf\\|{\"# zsteg LSB隐写zsteg -a mystery.png# 查看文件尾部tail -c 1000 mystery.png | xxdstrings mystery.png | tail -20

六、隐写常用工具速查

工具 适用场景 下载/安装
Stegsolve 图片通道分析/LSB提取 GitHub搜索stegsolve.jar
zsteg PNG/BMP自动LSB检测 gem install zsteg
binwalk 固件/文件嵌入式分析 apt install binwalk
foremost 按文件头分离文件 apt install foremost
Audacity 音频波形/频谱分析 apt install audacity
exiftool EXIF元数据提取 apt install libimage-exiftool-perl
strings 提取文件中可见字符串 内置(binutils)
010 Editor 十六进制编辑器 商业软件/在线试用

常见踩坑             ❌ 只检查文件扩展名,不检查文件头 — 文件可能被改后缀
       ❌ Stegsolve只遍历RGB通道,漏掉了Alpha通道或灰度位图
       ❌ 音频文件只听了声音没看频谱图 — 漏掉频谱隐写
       ❌ 找到可疑数据但没注意提取顺序(Bit Order / Plan Order)
       ❌ 忘记检查图片尾部是否有附加文件(用tail -c看最后几百字节)

防守要点             企业应阻止员工在网络中传输未经审核的图片/音频文件
       对敏感文件的图片输出做LSB清洗(随机化最低位)
       文件上传功能应检查文件头与扩展名是否一致
       使用内容安全检测系统扫描上传文件中的嵌入式数据


觉得有用?点个在看支持一下

下期预告:取证分析 — 内存取证、磁盘取证、流量分析、Volatility实战。初学者也能上手的数字取证全流程。