Writeup 4 强网杯 2019 强网先锋打野
题目信息
- 题目名称:强网先锋打野
- 所属赛事:强网杯 2019
- 题目类型:Misc(隐写)
- 分值:0(一血:大方子)
- 解决人数:1828
- Flag 格式 :
qwxf{} - 题目提示:你了解 CTF 圈的实时动态么?
解题思路概述
这是一道经典的 图片 LSB 隐写(Least Significant Bit Steganography) 题目。
核心思路:
- 附件解压后得到一张 BMP 图片
- 使用
zsteg工具扫描图片的 LSB 数据 - 直接在输出中找到明文 flag
详细解题步骤
第一步:检查附件
附件解压后得到 瞅啥.bmp:
bash
root@Rambo:/瞅啥# file 瞅啥.bmp
输出:
瞅啥.bmp: PC bitmap, Windows 3.x format, 1224 x 689 x 24, image size 2530010, resolution 2834 x 2834 px/m, cbSize 2530064, bits offset 54
root@Rambo:/瞅啥#
关键信息:
- 格式:BMP(Windows 3.x)
- 尺寸:1224 × 689
- 位深:24 位(RGB 三通道,每通道 8 位)
为什么 24 位 BMP 适合 LSB 隐写:
- 每个像素有 R、G、B 三个通道
- 每个通道有 8 位,可以修改最低位(LSB)而不影响视觉
- 24 位 BMP 的 LSB 可以藏大量数据
第二步:安装 zsteg
zsteg 是 Ruby 编写的 PNG/BMP LSB 隐写检测工具:
bash
apt install ruby ruby-dev -y
gem install zsteg
第三步:运行 zsteg
bash
root@Rambo:/瞅啥# zsteg 瞅啥.bmp
输出:
[?] 2 bytes of extra data after image end (IEND), offset = 0x269b0e
extradata:0 .. ["\x00" repeated 2 times]
imagedata .. file: OpenPGP Public Key
b1,lsb,bY .. <wbStego size=0x78 ext="\x00\x8E\xEE" data="\x1Ef\xDE\x9E\xF6\xAE\xFA\xCE\x86\x9E"... even=false hdr=nil enc=nil mix=nil controlbyte=nil>
b1,msb,bY .. text: "qwxf{you_say_chick_beautiful?}"
b2,msb,bY .. text: "i2,C8&k0."
b4,msb,bY .. file: OpenPGP Public Key
b2,r,lsb,xY .. text: "UUUUUU9VUUUUUUUUUUUUUUUUUUUUUU"
b2,g,msb,xY .. text: ["U" repeated 22 times]
b2,b,lsb,xY .. text: ["U" repeated 10 times]
b3,g,msb,xY .. text: "V9XDR\\d@"
b4,r,lsb,xY .. text: "222\"#33\"#33\"#33\"3222333\"3#321"
b4,g,lsb,xY .. text: "3\"\"\"\"\"3###33##3#UDUEEEEEDDUETEDEDDUEEDTEEEUT#!"
b4,g,msb,xY .. text: "\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"DDDDDDDDDDDD\"\"\"\"DDDDDDDDDDDD*LD"
b4,b,lsb,xY .. text: "gfffffvwgwfgwwfw"
root@Rambo:/瞅啥#
第四步:提取 flag
在输出中,直接找到:
b1,msb,bY .. text: "qwxf{you_say_chick_beautiful?}"
Flag:
qwxf{you_say_chick_beautiful?}
zsteg 输出解读
zsteg 会尝试各种 LSB 组合,每行的格式是:
<通道>,<位序>,<扫描顺序> .. <数据类型>: <内容>
| 字段 | 含义 | 示例 |
|---|---|---|
b1 |
第 1 个颜色通道(通常是 R) | b1, b2, b3, b4 |
lsb / msb |
最低有效位 / 最高有效位 | b1,lsb 表示 R 通道的 LSB |
bY |
按位 Y 顺序扫描 | bY、xY 等 |
text: |
检测到可读文本 | text: "qwxf{...}" |
file: |
检测到文件特征 | file: OpenPGP Public Key |
本题关键行:
b1,msb,bY .. text: "qwxf{you_say_chick_beautiful?}"
b1:第 1 个颜色通道(R 通道)msb:最高有效位(Most Significant Bit)bY:按位 Y 顺序
关键工具:zsteg
什么是 zsteg
zsteg 是一个 PNG/BMP 隐写检测工具,用 Ruby 编写,专门用于检测图片中的 LSB 隐写数据。
常用命令
bash
# 基本扫描
zsteg image.png
# 扫描所有可能的组合(更全面,但更慢)
zsteg -a image.png
# 只看 text 类型的结果
zsteg image.png | grep "text:"
# 搜索特定字符串
zsteg image.png | grep -i "flag\|qwxf\|ctf"
支持的格式
- PNG(主要支持)
- BMP(支持)
- 其他格式(部分支持)
安装方法
bash
# Ubuntu/Debian
apt install ruby ruby-dev -y
gem install zsteg
# 或者用 Docker
docker run -it --rm -v $(pwd):/data zsteg /data/image.png
关于题目提示
题目提示:"你了解 CTF 圈的实时动态么?"
这个提示是干扰项 ,玩的是 2019 年强网杯期间流行的 "蔡徐坤打篮球" 梗:
- 附件图片是蔡徐坤的照片
- Flag 内容
you_say_chick_beautiful?也是这个梗的延续 - 但真正的解题关键 是
zsteg工具,与提示无关
CTF 题目中常见的干扰项:
- 与题目无关的提示
- 故意误导的线索
- 需要结合"实时动态"(梗、新闻)才能理解的提示
这类题目的通常解题思路
🎯 图片隐写类题目
核心思想:flag 藏在图片的像素数据里,而不是文件内容里。
常见隐写方式:
| 方式 | 工具 | 说明 |
|---|---|---|
| LSB 隐写 | zsteg、stegsolve |
修改像素最低位 |
| MSB 隐写 | zsteg |
修改像素最高位 |
| 颜色通道隐写 | stegsolve |
在单个颜色通道藏数据 |
| Alpha 通道隐写 | stegsolve |
在透明度通道藏数据 |
| EXIF 隐写 | exiftool |
在图片元数据藏数据 |
| 文件附加 | binwalk、foremost |
在图片末尾附加文件 |
| DCT 隐写 | steghide、outguess |
在 JPEG 频域藏数据 |
| 调色板隐写 | stegsolve |
在 GIF/PNG 调色板藏数据 |
🎯 通用解题流程
- 检查文件类型 :
file image.bmp - 检查元数据 :
exiftool image.bmp - 检查文件附加 :
binwalk image.bmp - 搜索字符串 :
strings image.bmp | grep -i "flag\|ctf" - LSB 扫描 :
zsteg image.bmp(PNG/BMP) - JPEG 隐写 :
steghide extract -sf image.jpg - 可视化分析 :
stegsolve image.png - 尝试密码 :如果有密码提示,用
steghide或outguess
🎯 本题的关键技巧
- 不要被提示误导:"你了解 CTF 圈的实时动态么?"是干扰项
- 先试
zsteg:BMP/PNG 图片先跑zsteg,它会自动尝试各种 LSB 组合 - 看
text:行 :zsteg输出中,text:后面是可读字符串,直接找 flag -a参数 :如果基本扫描没结果,用-a扫描所有组合
最终 Flag
qwxf{you_say_chick_beautiful?}
附录:完整命令序列
bash
# 1. 检查文件类型
file 瞅啥.bmp
# 2. 安装 zsteg
apt install ruby ruby-dev -y
gem install zsteg
# 3. 运行 zsteg
zsteg 瞅啥.bmp
# 4. 找到 flag
# b1,msb,bY .. text: "qwxf{you_say_chick_beautiful?}"
总结
题目:强网杯 2019 强网先锋打野
类型:Misc / 图片隐写
关键工具 :zsteg
解题关键:
- 附件是 24 位 BMP 图片
- 用
zsteg扫描 LSB - 在
b1,msb,bY通道找到明文 flag - 提示"你了解 CTF 圈的实时动态么?"是干扰项(蔡徐坤梗)
Flag:
qwxf{you_say_chick_beautiful?}
经验总结:
- BMP/PNG 图片隐写先试
zsteg - 不要被题目提示误导,直接看工具输出
zsteg的text:行是 flag 最常出现的地方
Rambo
2026年10月02日
🎉🎉🎉