上篇对PNG的文件格式进行了分析,介绍了如何在不影响PNG文件的正常浏览下将payload以辅助数据块tEXt的格式插入到PNG文件中。这次将要介绍一个在图像数据块IDAT下隐藏payload的技巧——LSB隐写
图片引用自http://datagenetics.com/blog/march12012/index.html
zlib解压缩的python实现代码如下:
#! /usr/bin/env python
import zlib
import binascii
IDAT = "789C5D91011280400802BF04FFFF5C75294B5537738A21A27D1E49CFD17DB3937A92E7E603880A6D485100901FB0410153350DE83112EA2D51C54CE2E585B15A2FC78E8872F51C6FC1881882F93D372DEF78E665B0C36C529622A0A45588138833A170A2071DDCD18219DB8C0D465D8B6989719645ED9C11C36AE3ABDAEFCFC0ACF023E77C17C7897667".decode('hex')
result = binascii.hexlify(zlib.decompress(IDAT))
print result
引用自http://drops.wooyun.org/tips/4862
关于LSB隐写在github上值得学习的项目:
https://github.com/RobinDavid/LSB-Steganography
https://github.com/cyberinc/cloacked-pixel
下面对cloacked-pixel进行测试
测试图片:
源文件下载地址: http://www.easyicon.net/language.en/1119182-Enderman_Png_icon.html
运行:
python lsb.py hide big.png 1.txt 123456
参数说明:
hide:表示加密模式 big.png:待加密的png图片 1.txt:存放payload 123456:加密的密码
运行后生成图片big.png-stego.png
如图
分析一下加密图片big.png-stego.png的格式
隐写术(Steganography)由来已久,其中有很多好玩儿的细节,所以打算系统的研究一下,这次先从PNG的文件格式开始。
图片来自于http://null-byte.wonderhowto.com/how-to/guide-steganography-part-1-hide-secret-messages-images-0130797/
隐写术可以理解为信息隐藏,在渗透测试中最主要的应用是对Payload的隐藏。本文会对PNG的文件格式进行分析,编写c程序实现自动解析文件格式,并按照其文件格式添加自定义的payload,不仅不会影响图片的正常浏览,同时可将图片上传到网络,使用时将图片下载再以特定格式解密,最终执行payload。