[CTF Misc 图片隐写] misc1:文件末尾追加 flag(strings 一秒出 flag,附原理)

题目:misc1(话不多说,看图片)

分类:Misc / 图片隐写

难度:★☆☆☆☆(入门)

考点:JPEG 文件结构、strings 搜索、文件末尾附加数据(append data)


一、题目描述

题目只有一句话:"话不多说,看图片",附件是一张 misc1.jpg:

图片是一张恶搞兔子表情包,肉眼看没有任何异常。flag 显然藏在图片文件本身。


二、解题步骤

1. 确认真实文件类型

bash 复制代码
file misc1.jpg

输出:

复制代码
misc1.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1,
segment length 16, baseline, precision 8, 440x444, components 3

确认是一张正常的 440×444 JPEG 图片,扩展名没有造假。

2. strings 搜索可读字符串

图片隐写的第一步通常是用 strings 提取文件中的可打印字符,往往能直接发现明文 flag:

bash 复制代码
strings -n 5 misc1.jpg | grep -iE "flag|key|pass|\{|ctf"

直接命中:

复制代码
flag IS flag{stego_is_s0_bor1ing}

flag 就这么出来了。

3. 分析 flag 是怎么藏进去的

为了搞清楚原理,我们定位 flag 在文件中的位置,并查看文件末尾:

bash 复制代码
# 文件总大小
stat -c%s misc1.jpg          # 25506

# 定位 flag 字符串偏移
grep -abo "flag IS" misc1.jpg   # 25473:flag IS

用 Python 查看文件末尾的原始字节:

python 复制代码
data = open('misc1.jpg','rb').read()
print(data[-40:])
# b'\xff\xd9---\xa1\xb7flag IS flag{stego_is_s0_bor1ing}'
print('最后一个 FFD9 偏移:', data.rfind(b'\xff\xd9'))   # 25466

可以看到:

  • JPEG 的结束标记是 FFD9(EOI,End Of Image),它出现在偏移 25466;

  • 而 flag 文本从偏移 25473 开始,正好位于 FFD9 之后;

  • 也就是说,出题人在一张正常 JPEG 的结束符后面直接追加了一段明文文本:

    ... FF D9 2D 2D 2D A1 B7 "flag IS flag{stego_is_s0_bor1ing}"
    ↑ 结束符 ↑ 追加的内容

图片解码器读到 FFD9 就认为图片已经结束,所以图片正常显示、肉眼毫无异常;但这段附加数据仍然存在于文件中,用 strings 或查看十六进制末尾就能发现。


三、得到 flag

复制代码
flag{stego_is_s0_bor1ing}

stego_is_s0_bor1ing 即 "stego is so boring(隐写真无聊)",其中用数字 0 代替字母 o、1 代替 i,是 CTF 中常见的 leetspeak(字符替换)写法。


四、知识点讲解

4.1 JPEG 文件结构

一个基础 JPEG 文件由若干"段(segment)"组成,关键标记如下:

标记 名称 含义
FF D8 SOI Start Of Image,图片开始
FF E0 APP0 JFIF 应用数据段
FF DA SOS Start Of Scan,扫描数据开始
FF D9 EOI End Of Image,图片结束

重点:解码器读到 FF D9 就认为图片结束,其后的任何数据都不会被当作图片渲染。 因此在 FF D9 之后追加文件或文本,是最常见的初级隐写手法。

类似地:

  • PNG 的结束标记是 IEND(在 49 45 4E 44 AE 42 60 82 之后);
  • GIF 结束标记是 3B(;)。

4.2 strings 命令

strings 用于提取文件中的可打印字符序列:

bash 复制代码
strings misc1.jpg              # 提取所有可打印字符串
strings -n 5 misc1.jpg         # 只显示长度 >= 5 的字符串
strings misc1.jpg | grep flag  # 配合 grep 过滤关键字

它对"明文追加""注释藏 flag"这类题目极其有效,是图片/二进制 Misc 题的首选命令之一。

4.3 文件附加数据(append data)

在文件末尾追加数据,常见的追加内容有:

  1. 明文 flag / 提示文本;
  2. 一个完整的 ZIP/RAR(常用 binwalk -e 或 foremost 分离);
  3. 另一张图片;
  4. 一段需要进一步解码的 Base64 / Hex。

通用排查命令:

bash 复制代码
xxd misc1.jpg | tail -20       # 直接看文件末尾
binwalk misc1.jpg              # 自动识别附加/嵌入的文件
binwalk -e misc1.jpg           # 分离提取
foremost misc1.jpg             # 文件雕刻

4.4 图片隐写的标准排查顺序

file 确认真实类型 → strings 搜明文 → binwalk/foremost 分离附加文件 → exiftool 看元数据 → 看 hex 头尾(结束符后是否有数据)→ 按格式上专用工具(PNG 用 zsteg、JPG 用 steghide)。

本题在第 2 步 strings 就直接拿到了 flag。


五、安全启示

  • 把敏感信息直接追加到图片文件末尾,没有任何保密性,一条 strings 命令就能发现;
  • 即使把追加内容做 Base64、Hex 等编码,也只是"多一步解码",依然等于明文;
  • 真正需要保护的信息应使用正规加密手段并妥善保管密钥,而不是藏在文件尾部。

六、总结

本题是典型的"文件末尾追加数据"隐写:

正常 JPEG + 结束符 FFD9 后追加明文 flag → 图片显示正常,但 strings 一搜即出。

核心收获:

  1. 图片隐写第一步先 file + strings,很多签到题在这一步就结束;
  2. 牢记 JPEG 结束符 FFD9、PNG 结束符 IEND,结束符之后的数据就是"附加数据";
  3. 学会用 xxd/010 Editor 看文件末尾,用 binwalk 分离附加文件。

Flag:

复制代码
flag{stego_is_s0_bor1ing}

版权声明

  • 本文为个人 CTF 学习笔记(Writeup),题目版权归其主办方所有。
  • 本文的文字分析、整理与总结部分为本人原创,转载请注明出处。
  • 本文仅用于网络安全学习与研究,请勿用于任何未授权测试;如内容涉及侵权,请联系本人删除。
相关推荐
Gnevergiveup3 小时前
ATT&CK红蓝对抗实战指南-Windows安全基础
笔记·网络安全
白帽攻防录4 小时前
某pc客户端app从xss到rce实战案例
前端·网络安全·黑客·xss·rce·src漏洞·app漏洞
学网安的肆伍6 小时前
认证机制攻防学习|PortSwigger Authentication 靶场复现总结(二):用户名枚举进阶
学习·web安全·网络安全·burpsuite·portswigger·认证安全·靶场复现
网络小江6 小时前
组网第41课:ACL 门禁——标准/扩展、规则顺序、time-range、in/out 方向
运维·网络安全·acl·访问列表·in/out
迪康coolmu8 小时前
金融客户数据合规落地:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·数据库·经验分享·安全·网络安全·金融
自由彩虹10 小时前
靶场通关16--victim1
linux·服务器·网络·安全·web安全·网络安全
sbjdhjd10 小时前
从污点追踪断点到 PHP-FPM 请求队列:HIDS PHP WebShell 样本复盘
开发语言·网络安全·数据挖掘·渗透测试·开源·php·shell
HackTwoHub1 天前
双通道红队 C2,MCP 接入 AI,全自动渗透实战利器,具备自动提权、进程伪装、无文件上线能力,载荷 AES 加密
安全·web安全·网络安全·系统安全·密码学·可信计算技术·安全架构
菩提小狗1 天前
每日安全情报报告 · 2026-10-28
网络安全·漏洞·cve·安全情报·每日安全