CTF之隐写
0x01 PNG图片
PNG文件结构分析
https://my.oschina.net/ososchina/blog/801358
(1)用16进制编辑工具更改图片的高度,会只显示图片的一部分,下面的部分就被隐藏了,是个藏东西的好办法
找表示宽度和高度的位置的话,可以先看看图片的属性,得到宽高值,转成16进制,搜索16进制值就找到了
注:png图片的保存恢复效果比较好,jpg貌似有点问题
题目链接:http://pan.baidu.com/s/1qY8sxZI 密码:5xam
图片尺寸为500x420(宽x高)
00 00 00 0D 说明IHDR头块长为13
49 48 44 52 IHDR标识
00 00 01 F4 图像的宽,500像素
00 00 01 A4 图像的高,420像素
最后四位CB D6 DF 8 A为CRC校验
将图片的高改为500像素就拿到flag了
(2)初次遇见条形码。。。。
![](http://upload-images.jianshu.io/upload_images/5608676-07e11ae8668b2910.png?imageMogr2/auto-orient/strip|imageView2/2/w/565/format/webp)
各种工具找,最后看了writeup才知道这马身上有条形码。。。。。
还是用画图工具拼接出来的完整条形码去扫描的,不会ps愁死人。。。。。
在线扫描https://online-barcode-reader.inliteresearch.com/
(3)烦人de皮卡丘
题目链接:http://pan.baidu.com/s/1i5IG3JZ 密码:lymw
不管是用binwalk还是stegsolve左右点都没有结果,在大佬这找到了答案http://blog.csdn.net/fuzz_nancheng/article/details/53384353?locationNum=4&fps=1
原理我也不懂啊。。。。。又找到相关文章http://www.tuicool.com/articles/qINzyum,有待理解。。。。
(3)双图
题目链接:http://pan.baidu.com/s/1pLiCMdd 密码:590r
拿过来图片先用binwalk分析一波,发现有两张图片,用winhex抠出来之后发现和第一张一样,第一张命名1.png,第二张2.png,用linux的compare命令比较一下,
compare 1.png 2.png diff.png,发现diff.png下面有红线,
![](http://upload-images.jianshu.io/upload_images/5608676-a86e4f073190796f.png?imageMogr2/auto-orient/strip|imageView2/2/w/460/format/webp)
用stegslove打开2.png选择image combiner
![](http://upload-images.jianshu.io/upload_images/5608676-d125b0c1b1b996d2.png?imageMogr2/auto-orient/strip|imageView2/2/w/742/format/webp)
选择1.png这时候会做一个xor运算,保存图片为solved.bmp
![](http://upload-images.jianshu.io/upload_images/5608676-65c17d2a0b9e4a64.png?imageMogr2/auto-orient/strip|imageView2/2/w/642/format/webp)
winhex打开solved.bmp
,发现除了00就只有这里有东西了
![](http://upload-images.jianshu.io/upload_images/5608676-021171141ac88bf5.png?imageMogr2/auto-orient/strip|imageView2/2/w/538/format/webp)
记下地址之后把2.png用ps打开另存为2.bmp,再用winhex打开2.bmp找到刚刚记下的地址把16进制数据复制出来,写个脚本把其中的二进制数扣出来,00为0,01为1然后再把二进制转换成ascii码得到flag
(4)再遇双图
题目链接:http://pan.baidu.com/s/1qYtzZIG 密码:31bg
这次很直接,解压出来就是双图,用stegslove的image combiner
![](http://upload-images.jianshu.io/upload_images/5608676-13ba96a17d2227f1.png?imageMogr2/auto-orient/strip|imageView2/2/w/203/format/webp)
保存反色,再用stegslove对二维码变化一下,得到三张二维码,扫描结果是DES 6XaMMbM7
和一长串字符,des加密,秘钥是6XaMMbM7,解密吧得到flag
(5)py的交易
题目链接:http://pan.baidu.com/s/1c2KmV1A 密码:2m3f
binwalk跑了一下除了很多的zlib什么也没发现,winhex打开看到了几个连续的pypypy。。。。。在一串常规的字符中看到了fireworks。。。
![](http://upload-images.jianshu.io/upload_images/5608676-ad299f6b340ee9b0.png?imageMogr2/auto-orient/strip|imageView2/2/w/636/format/webp)
发现图层1被隐藏了,打开后发现了二维码
扫描得到一串16进制
03f30d0a3b8bed56630000000000。。。。。用winhex保存一下看到了CTF字样,
![](http://upload-images.jianshu.io/upload_images/5608676-e2b82e77a8adba59.png?imageMogr2/auto-orient/strip|imageView2/2/w/550/format/webp)
还有pyt。。file一下发现python 2.7 byte-compiled,应该是pyc了,用uncompyle解一下发现flag里有个变量key,那key就是py了。强行符合题目要求。。。
(6)盲水印攻击
这里是利用脚本及说明 https://github.com/chishaxie/BlindWaterMark
当用compare两张png之后发现不再是上面双图情况下的一条红线,而是很多条,就可以考虑一下是不是盲水印攻击了
(7)IDAT数据块隐藏
前面说过png的IHDR属性,在png中,大致分为四个大的数据块,IHDR数据块,PLTE数据块(调色板),IDAT数据块,IEND数据块(结尾标志),IDAT数据块在一个png图像中是可以存在多个的,但是好像正常情况下binwalk检测和插入了IDAT数据块后检测的结果是不一样的,,可以这样来辨IDAT是否有问题
比如这是正常的png图片,分析的结果是
![](http://upload-images.jianshu.io/upload_images/5608676-3b31ff74b818c070.png?imageMogr2/auto-orient/strip|imageView2/2/w/760/format/webp)
这个图片也是有多个IDAT的块的,而在添加了一个IDAT块之后检测结果是这样
![](http://upload-images.jianshu.io/upload_images/5608676-b84a6716290683b0.png?imageMogr2/auto-orient/strip|imageView2/2/w/757/format/webp)
并且FFDA位置是第二个IDAT的起始位置。当把第一个IDAT块扣掉之后原图就会显露出来,
IDAT包含了四部分,第一部分是数据块长度(4位16进制),第二部分是IDAT标识符(4位16进制),第三部分是数据块,第四部分是CRC校验码(4位16进制)
![](http://upload-images.jianshu.io/upload_images/5608676-5a8f39a7136c0cec.png?imageMogr2/auto-orient/strip|imageView2/2/w/596/format/webp)
00 00 FF A5(数据块长度为FFA5)
49 44 41 54 (IDAT标识符)
接下来是数据块,在FFA5长度的数据块之后是4位16进制的CRC校验码
并且合并过的IDAT的png图片用fireworks打开会提示格式错误,查看不了,ps就没有这个功能。。。。
0x02jpg图片
(1)图种
题目链接:http://pan.baidu.com/s/1c2L8euk 密码:4h6k
binwalk跑一下发现是两张图片
![](http://upload-images.jianshu.io/upload_images/5608676-44d5a1b759d495c7.png?imageMogr2/auto-orient/strip|imageView2/2/w/801/format/webp)
第二张图片的偏移量是158792,用winhex将第二张图片提取出来保存为jpg格式就是flag了
或者用foremost提取 foremost -v -i 2.jpg -o /root/aa aa为空目录
(2)画图
题目链接:http://pan.baidu.com/s/1o7ZkGC6 密码:rmro
这里没有flag,用winhex打开发现图片后面有很多的数据
复制下来保存为txt文件用notepad++转换一下编码
![](http://upload-images.jianshu.io/upload_images/5608676-460c392f009d6a53.png?imageMogr2/auto-orient/strip|imageView2/2/w/371/format/webp)
![](http://upload-images.jianshu.io/upload_images/5608676-043d68b1499c2943.png?imageMogr2/auto-orient/strip|imageView2/2/w/227/format/webp)
这就是坐标了,这样来画图吧 转换成gnuplot能识别的格式
![](http://upload-images.jianshu.io/upload_images/5608676-c2a7fddd031808d0.png?imageMogr2/auto-orient/strip|imageView2/2/w/236/format/webp)
![](http://upload-images.jianshu.io/upload_images/5608676-379ca07f08ce89ae.png?imageMogr2/auto-orient/strip|imageView2/2/w/661/format/webp)
![](http://upload-images.jianshu.io/upload_images/5608676-fd6032bfd29d4499.png?imageMogr2/auto-orient/strip|imageView2/2/w/640/format/webp)
扫码得到flag
(3)妹子的默默
题目链接:http://pan.baidu.com/s/1c1YjjDA 密码:id5a
binwalk跑一下发现rar文件,但是加密了。。。。找了很久密码,看了大佬的writeup才知道密码是图片上的“喜欢我吗.”注意:密码是汉字不是拼音,解压出来是这个
![](http://upload-images.jianshu.io/upload_images/5608676-7eebcc646d3cbbfb.png?imageMogr2/auto-orient/strip|imageView2/2/w/955/format/webp)
第一个莫斯电码解码,得到一个网址,根据下面 的提示是AES加密,解密得到momoj2j.png访问http://c.bugku.com/momoj2j.png得到二维码
(4)F5隐写
链接:http://pan.baidu.com/s/1cnMYzs 密码:v0er
cd F5-steganography
java Extract 123456.jpg -p 123456
后会生成output.txt文件,里面就有flag了
0x03bmp格式图片隐写
题目链接:http://pan.baidu.com/s/1jIp82NG 密码:ikov
下载下来之后发现后缀是png,然而winhex打开发现并不是png头文件
![](http://upload-images.jianshu.io/upload_images/5608676-97bced26ffb54631.png?imageMogr2/auto-orient/strip|imageView2/2/w/541/format/webp)
file一下是bmp文件,用wbs43open来解密吧http://pan.baidu.com/s/1slc2YHR,
![](http://upload-images.jianshu.io/upload_images/5608676-e145e3322b05cb92.png?imageMogr2/auto-orient/strip|imageView2/2/w/542/format/webp)
![](http://upload-images.jianshu.io/upload_images/5608676-39e6bcaa27ddcbd7.png?imageMogr2/auto-orient/strip|imageView2/2/w/538/format/webp)
![](http://upload-images.jianshu.io/upload_images/5608676-9a3116e713aa0d11.png?imageMogr2/auto-orient/strip|imageView2/2/w/535/format/webp)
密码值为空
![](http://upload-images.jianshu.io/upload_images/5608676-95369e436ef413e1.png?imageMogr2/auto-orient/strip|imageView2/2/w/536/format/webp)
解出来用notepad打开就看到flag了
![](http://upload-images.jianshu.io/upload_images/5608676-e9121816f0a51ef1.png?imageMogr2/auto-orient/strip|imageView2/2/w/842/format/webp)
0x04流量分析
题目链接:http://pan.baidu.com/s/1mi3aWwK 密码:4fd9
(1)下载了一个pcapng的文件,用wireshark打开,过滤条件是http协议,发现了一句话的痕迹
![](http://upload-images.jianshu.io/upload_images/5608676-7819095afcf65f57.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
在开始的时候发现
![](http://upload-images.jianshu.io/upload_images/5608676-b225aa9249b36bbc.png?imageMogr2/auto-orient/strip|imageView2/2/w/1044/format/webp)
有flag.tar.gz
接下来的http里应该就有这个数据了,在最后一个包里发现
![](http://upload-images.jianshu.io/upload_images/5608676-35763a3ad9b2a93c.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
解一下压缩吧
![](http://upload-images.jianshu.io/upload_images/5608676-e5068da9dc17d2cf.png?imageMogr2/auto-orient/strip|imageView2/2/w/948/format/webp)
![](http://upload-images.jianshu.io/upload_images/5608676-23c3a7e79bfbd213.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
其他
(1)遇到了一个exe文件,用notepad++打开发现是一串base64,直接把代码复制到在线base64转图片得到flag
题目链接:http://pan.baidu.com/s/1kUCWiNX 密码:xlui
在线转换 http://imgbase64.duoshitong.com/
(2)遇到一个宽带信息泄露的bin文件用routerpassview查看搜索username找到用户名就是flag
题目链接:http://pan.baidu.com/s/1pLbQzTT 密码:g1i9
(3)linux基本问题
题目链接:http://pan.baidu.com/s/1dFIivh3 密码:olcx
用notepad++打开发现flag.txt,用binwalk提取得到flag.txt
(4)onlyonefile
题目链接:http://pan.baidu.com/s/1geO9DHT 密码:nia7
下载之后先用binwalk跑了一下发现很多zip包,果断分解,发现文件夹里都是布置格式的文件但名字是有规律的,并且还有一个0.zip解压出来也没发现什么,用winhex打开第一个文件看到了PNG,猜想是png图片,但是结尾没有IEND,不完整,打开最后一个文件发现了IEND,题目又叫onefile,应该是图片分解了,于是linnux下cat outfile/* >1.png合成了png图片,但是依旧没有flag,binwalk发现图片后面好多zlib文件,找了很久,再用winhex查看发现了头文件不远处的Adobe Fireworks CS5,下载下来看起来和ps差不多。。。。。。打开图片后原来是两个图层,把第一张图片拉开再翻转一下二维码颜色得到flag了。
(5)再遇Adobe Fireworks CS5
题目链接:http://pan.baidu.com/s/1c3vzum 密码:n26x 题目名为IHDR
这次比较干脆,直接给了一个png文件,winhex打开一切正常,binwalk跑一下还是满大街的zlib包,也发现了Adobe Fireworks CS5字样,于是用Adobe Fireworks CS5打开,发现格式错误。。。。。回去看了看png文件格式,没毛病,那就只有crc没有检测是否正确了,给个crc抄袭的计算代码。链接:http://pan.baidu.com/s/1dFcQTu5 密码:ytxd 里面的数据替换为相应的HIDR Chunk,就得到正确的crc了,再次用Adobe Fireworks CS5打开flag就直接出来了
(6)这个应该属于杂项
题目链接:http://pan.baidu.com/s/1jIwZIFc 密码:bk62
file一下发现是data文件(跟没发现一样),扔到winhex里发现是这样
FF D8不就是jpg头文件,FF D9不就是jpg尾文件标志吗,原来是把16进制逆过来了 ,写个脚本再还原回来就好了
f=open("1.reverseme","rb")
g=open("1.jpg","wb")
f.write(g.read()[::-1])
f.close()
g.close()
用ps旋转一下就好了
(7)加密的文档
题目链接:http://pan.baidu.com/s/1misRWU0 密码:b19t
下载得到一个zip压缩包,确实加密了。。。。可是题目没有给密码提示啊,伪加密?试试看,眼瞎的我没有看到在底部50 4B ,这个地方改成了09 00
还是找到writeup才回来找,不过看到了大神用010Editor,又get到一个新工具,并且看到未加密是这里是0,加密这里标志位就不是0了
别忘了第二行还有标志位。。。。
好了,改成0,成功解压出一个docx文档,
刚开始还以为是把flag字体和背景颜色设置一样了,结果没有。。。把图片拷出来也没找到。。。。又回来看大神的writeup,解压之后的docx文档还是藏着压缩包。。。。改成zip格式解压出来找到两张图片
![](http://upload-images.jianshu.io/upload_images/5608676-68190e40c0bb45e1.png?imageMogr2/auto-orient/strip|imageView2/2/w/993/format/webp)
吐了一升血。。。。。