PNG
结构
PNG由文件标志和3个以上的数据块构成
文件标志:89 50 4E 47 0D 0A 1A 0A
数据块(chunk)
重点关注IHDR,IDAT,IEND
exif信息
有时信息会藏于exif信息中,右键属性或者使用exiftool等工具查看文件exif信息
HEX数据
直接嵌入
有时信息会以明文或密文形式藏于十六进制数据中,常放于文件尾后
使用winhex或010editor等十六进制数据查看工具获取信息
此处的base64解密即可得到信息
文件头尾
有些图片损坏是由于没有或不正确的文件头尾导致
PNG文件头:89 50 4E 47 0D 0A 1A 0A
png文件尾:49 45 4E 44 AE 42 60 82
宽高修复
IHDR前八个字节中有两个位对应图片宽高信息
修改其值可将图片某部分信息隐藏
IDAT块
IDAT定义:
图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,用户就可以很方便的生成PNG图像。
IDAT有固定的长度,并且正常情况下最后一个idat块会比前面短
使用tweakPNG或其他工具可以进行idat块检查
可以看到蓝色边框的idat块属于异常现象,实际上去除本块依然不会影响png图片,将蓝色部分IDAT块数据获取下来,重新补上文件头尾并爆破出正确宽高后可以得到新的一张PNG图片
binwalk|foremost
有些文件可能藏于图片的数据中,例如在图片数据中插入zip文件数据:
binwalk -e 文件名
可以分离文件
颜色信道(常见lsb隐写)
zsteg
zsteg可以检测PNG和BMP图片里的隐写数据。
zsteg -a 文件名
查看所有信道内容
zsteg -a 文件名 | grep "flag"
若flag直接明文藏于某信道则可以搭配条件查询
stegsolve
stegsolve很强大,可以展示多个颜色信道的图片,也可以查对应的十六进制数据
其他工具
steghide/stegseek
steghide支持多种格式文件,用于查看隐写的内容
steghide extract -sf xxx.png -p 密码
stegseek基于steghide开发,用于暴力破解密码
stegseek xxx.png '字典'(默认使用rockyou.txt)
steghide隐藏文件指令
steghide embed -cf 原文件 -ef 要隐藏的文件 -p 123456
未完待续
参考:
IDAT block小结
PNG文件结构
https://ctf-wiki.org/misc/picture/png/
ctfshow 8神PNG隐写入门(土)赛 WP