图⽚隐写安恒ctf_CTF中图⽚隐写的⼀些整理总结对历年来国内外CTF中常见的题型图⽚隐写的⼀些总结,本⽂长期更新,及时补充新的题型。
对历年来国内外CTF中常见的题型图⽚隐写的⼀些总结
赛题
XMAN-qualifiers-2017 : Misc/SimpleGIf
考察点Gif⽂件头
隐写相关技巧
Python 脚本编写
⼯具010Editor
Linux identify命令
Visual Studio Code
附件
Writeup
GIF头补全
⾸先⽤file查看下这个⽂件:
ctf@ubuntu:~/Desktop$ file '/home/ctf/Desktop/100_KHf05OI.gif'
/home/ctf/Desktop/100_KHf05OI.gif: data
binwalk再看下:
ctf@ubuntu:~/Desktop$ binwalk '/home/ctf/Desktop/100_KHf05OI.gif'
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
可以看出没有识别出什么⽂件,这⾥推测它就是⼀个gif⽂件,现在来补上gif头。
GIF⽂件头:47 49 46 38 39 61
得到Gif,什么都没有发现,看来题⽬没有这么简单:
分析Gif
使⽤identify命令去拆解Gif,发现每⼀帧存在规律。
ctf@ubuntu:~$ identify -format "%s %T \n" '/home/ctf/Desktop/100_KHf05OI.gif'
0 66
1 66
2 20
3 10
4 20
5 10
6 10
7 20
8 20
9 20
10 20
11 10
...
提取每⼀帧的间隔并进⾏转化:
ctf@ubuntu:~$ identify -format "%T\n" '/home/ctf/Desktop/100_KHf05OI.gif'
66
66
20
10
20
10
10
20
20
20
20
10
20
...
这⾥有2种可能:
20 & 10 分别代表 0 & 120 & 10 分别代表 0 & 1
20 & 10 分别代表 1 & 0
使⽤Visual Studio Code来进⾏批量替换:
去掉最前⾯2个66,⼀共是304⾏,304÷8=38 8个⼆进制为⼀组分组。
最后替换是这个样⼦:
数据处理这⾥20代表0,10代表1,写⼀个脚本来进⾏转换,⼆进制先转换为10进制,10进制转换为ascii码,asscii转换为相应的字符串。# coding:utf-8
# blog:www.sqlc,com
import re
def file():
text = raw_input("pleast enter your file path:")
with open(text,'r') as f:
binfile = (f.read()).replace("\n","")
bindata = re.findall(r'.{8}',binfile)
for i in bindata:
ascii = int(i,2)
print(chr(ascii))
file()
很明显flag是XMAN{96575beed4dea18ded4735643aecfa35}
总结
得了解常见的头⽂件的结构,学会分析Gif⽂件,对⼆进制数据要敏感。
赛题
XMAN-qualifiers-2017 : Pretty_CatPretty_Cat
⼯具exiftool
16进制编辑器
附件
Writeup
使⽤16进制编辑器
⾸先Windows下查看下图⽚的 exif 元数据信息:
WE1BTntVNWU=ba64解码得到XMAN{U5e 可以明显的感觉到是半个flag,尝试使⽤16进制编辑器打开查看找到完整的ba64 flag 加密后的信息:
最后拿到flag是U5e_3x1ftoo1}
标准解法使⽤exiftool
Linux下直接使⽤exiftool⼯具查看:
ctf@ubuntu:~$ exiftool '/home/ctf/Desktop/cat_t1dzFZS.jpg'
ExifTool Version Number : 10.10
File Name : cat_t1dzFZS.jpg
Directory : /home/ctf/Desktop
File Size : 4.7 kB
File Modification Date/Time : 2018:01:18 22:59:18-08:00
File Access Date/Time : 2018:01:18 23:00:34-08:00
File Inode Change Date/Time : 2018:01:18 23:00:34-08:00
File Permissions : rwxrw-rw-
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Exif Byte Order : Big-endian (Motorola, MM)
X Resolution : 1
Y Resolution : 1
Resolution Unit : inches
Y Cb Cr Positioning : Centered
Copyright : WE1BTntVNWU=
Comment : XzN4MWZ0b28xfQ==
Image Width : 144
Image Height : 144
Encoding Process : Progressive DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 144x144
Megapixels : 0.021
在图⽚元数据的Copyright和Comment种查找到关键信息。
总结
⼊门级别图⽚隐写之⼀。
下⾯介绍这种图⽚隐写题的制作⽅法,依然是使⽤exiftool。
假设flag为
sqlc{th13_1s_1m4g3_stg}
拆成2部分为:sqlc{th13_1s和_1m4g3_stg}
分别写⼊图⽚的copyright和comment
ctf@ubuntu:~$ exiftool -copyright="sqlc{th13_1s" -comment="_1m4g3_stg}" '/home/ctf/Desktop/cat_t1dzFZS.jpg' 1 image files updated
可以看到成功的更新的图⽚的元数据信息:
赛题
ZCTF:Whisper
考点图⽚隐写
⽂件切割
⼯具binwalk
Linux dd命令
Linux strings命令
Linux ba64命令
16进制编辑器
附件
Writeup
解压⾥⾯是⼀个压缩包⼀个png图⽚,压缩包是加密的,先看下图⽚hint1.png再决定要不要爆破压缩包。
打开看到⼀张空⽩的图⽚:
使⽤图⽚隐写的必备⼯具Stegsplve⼯具查看下:
得到提⽰信息:不应该直接爆破压缩包,这种图⽚⾥⾯含有重要信息,很可能就包含了压缩密码。
使⽤16进制编辑器查看下这个图⽚⽂件,再末尾的时候发现了⼤量的字符串:
很多字符串,这⾥binwalk下,查看下切割⽂件的位置:
ctf@ubuntu:~$ binwalk '/home/ctf/Desktop/hint1.png'
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 1000 x 150, 8-bit/color RGB, non-interlaced
41 0x29 Zlib compresd data, default compression
5984 0x1760 StuffIt Deluxe Segment (data):
f+XOzsDjboavwNtZvpjWWtvZsDDOfLiesSbRNPEQBEDgroTMqVBQrNkfVpHAuSOndiiwXODNISCYZMNrRACxiEtphChXksEVNQOWv
67936 0x10960 StuffIt Deluxe Segment (data):
fNuJpDERDdIaOZNai+CoqIa+DTgsEtMVsBjIAYItAPtSMrMkQQIJPpakhwWaIKJotVVBWpqHOMZPAwtWsHBV+rxNMEKgXRV+EilnPO
140829 0x2261D StuffIt Deluxe Segment (data):
fvPMpvjpTCfKGkjxG+VxfTVLftfvLraEDKvtDbSdXoZVizG+cCDDPKd+XEiIKqxvAfeWQtgCKXKWXtVAR+eQAegPqiPNp+pOMEPtzzvg
187232 0x2DB60 StuffIt Deluxe Segment (data):
fjpEVPsHTwrCroGzGnoLwjvYwiAvqxTueAuvuSXJglbrvoIClHJ+RPWsHZpthrYJBXgGdCPPsvfwliCeRnebbHbnSGzxkeoTdhNJRsOETW
244309 0x3BA55 eCos RTOS string reference: "ecosKtHYsvxIJRanOwiWWNYxriBWYzcOlEVoPxNzpeXReQcaAdVkqGhRkZcMEnYJOklurR+hWscMNYRtRJxXZeQfLcMJhMgZbvkNd
247553 0x3C701 StuffIt Deluxe Segment (data):
fnvX+GIGMKE+aiHXuKDWOHIHMXSLVdoKKosARHnTzsABOjVzWBlkdxdAspDRGIiQJOuTwqpDAtkSxdggQqoazuToGwpdzrJOPQaKG
277260 0x43B0C COBALT boot rom data (Flat boot rom or file system)
464214 0x71556 StuffIt Deluxe Segment (data):
fBEllSs7G4qIOURP8XckU4UJDEVod3DZPnQgkDoAUgAAAFIAAAACZ3NveUF3JUodMBgAIAAAAGQ3YjA1NzliMTdiNWExYmYzYmR