CTF | 那些比较好玩的stego(正传)

自从开了专栏之后(其实是我觉得在专栏上写东西方便),尤其是在写完读书 | The myths of security 之后,居然还收到了8个赞,我瞬间怀疑起贵乎的正确使用方式(233,但是还是很开心的)

在这儿给大家续CTF系列的正传。当时因为这篇文章,我获得了很多东西:一个乌云账号,意外的稿酬,简历上终于可以多了可以写的东西,等等。然而,6月份的时候,一直到现在,哎哟我去这篇文章居然被各路大神转载了,我当时的反应如下

不扯淡了,都过去了,现在本系列已经委托朋友 @ming Luo 进行文章转载的维护。


所以,各位老司机们,在转载前麻烦和本人打声招呼?OK?

好,正文(其实修改过了)开始:

-------------------------------------------------------------------------------

0X00 引子

最近国内各种CTF层出不穷,看出来国家对于信息安全终于决定下重本了。另外因为本人比较喜欢研究怎么藏东西,所以一开始在CTF队组建的时候,就负责了misc(杂项)中的Steganography(Stego)部分,中文翻译过来是“隐写术”。

乌云上也有好几篇关于隐写术的文章,其中以AppLeU0大大的那篇《隐写术总结》最为经典,还有Gump大大的《数据隐藏技术》。在这儿,本菜鸟也想和大家分享在CTF中见到的比较好玩的stego题目。写的不好,请大大们多多包涵。

(啊,某云的文章自己找镜像去吧……)

0X01 什么叫隐写术?

题图:无意中被“隐身墨水”给隐藏了下半身的Jerry正在尝试验证自己的手能不能被“隐身墨水”给隐藏(设置变量验证)

隐写术,在我们的生活中既熟悉而又陌生。记得童年回忆《猫和老鼠》有关于“隐写术”的这一集:Jerry有一天在玩耍的时候,不小心往自己的身上涂了一种“神奇墨水”,然后把自己藏了起来,还成功的把Tom戏弄一通并赶走了Tom。这种“神奇“的墨水,叫“隐形墨水”,写到纸上之后需要特殊处理才可以看得到对方想要给我们传达的信息。

同样的,在信息安全中,隐写术也是举足轻重的一块领域,从我们最早接触到的图种(copy /b 1.jpg+1.torrent 1.jpg),到有事没事就上个头条的locky,看个图片就中招的 stegosploit,图片木马Stegoloader,还有就是三大高危CVE之一CVE-2016-3714(ImageMagick的,linux下用于处理图像的一个应用),然后也有CHM打造后门,等等。总的来说,就和藏东西似的,能藏就藏,而我们就是要去寻找这种蛛丝马迹。

(现在JPEG 2000可执行任意代码漏洞已经加入Stego豪华漏洞套餐)

0X02 常用工具

手边刚好放了一本很老的大部头:

(管校图书馆借的),在第85页由暗夜舞者的《机密文件的图片隐藏法》里记载了将zip文件和gif图片的通过文件流读入ZIP文件将其合到一起的小办法。最后的文件要怎么打开呢?把.gif改为.zip就好啦~~

另外,在CTF中,老司机们可能更偏向于用UE/Winhex一类的16进制的编辑器去打开待分析文件,然后通过拼写文件头(嗯。常用的文件头有几类?)然后blah blah的解决了。然而,新手们尤其是像我这样的菜鸟们,就比较喜欢用工具先分析一下有什么样的发现,这时候,为什么不考虑使用binwalk呢?早年在freebuf上也有binwalk的身影。

寒假刷XCTF的OJ的时候,binwalk用起来很方便,但是也有不方便的时候。比如说我要想藏个字符啥的,这个也是binwalk看不出来的。记得最近的某CTF曾经出过这道题:

(到后面我还会再用这张图片来进行分析)

人家最后放了个提示Stegdetect,那时候我们用binwalk分析了很久也没分析出来个所以然。图上的,你总不能一个个链接试吧(反正有听说有师傅们通过这个攒了几部小电影的)。然后用binwalk分析的时候,提示有压缩包,然后foremost出来之后压缩包里攒着另一个压缩包

请根据以上描述,问:此文件属于什么样的数据结构? (大雾)


后来,就有了 @4ido10n 的《深入理解JPEG图像格式Jphide隐写》


Jphide隐写过程大致为:先解压压缩JPEG图像,得到DCT系数;然后对隐藏信息用户给定的密码进行Blowfish加密;再利用Blowfish算法生成伪随机序列,并据此找到需要改变的DCT系数,将其末位变为需要隐藏的信息的值,最后把DCT系数重新压回成JPEG图片。

关于图片其他方面的隐写,请参考隐写术总结 - 安全客

到这儿为止,我们已经提了以下几种工具:

  • Binwalk
  • Stegdetect

此外根据刚刚提到的这几篇,图片方面我们还可以尝试这些工具:JPHS(由Stegdetect检测出来的,这个是分离工具)、Stegsolve、winhex、Power_exif、Pngcheck等等,此外也可以用编程、或者寻找图片的结尾符FFD9等辅助。

如果出的是其他类型的文件呢?

MP4:ffmpeg

PDF:常用的有wbStego4open

vmdk:Dsfok-tools

以上,当然如果你觉得用工具解不出来的话,那就……看下面几道题目压压惊

0x03 几道可以分辨恶趣味的题目

今年被吊打过的CTF里,我们可以发现隐写术不那么单调了,体现了隐写术的特点之“物所能及不能藏”。不光是常见的jpg、tiff、png,

如果你有细心算过0x1E是啥子玩意的话,你应该也不会直接foremost分离了……

这道题的正确打开方式如下:

这道题的解题思路是exif,exif承载了这张照片的一些比如相机型号、照相地点等重要信息。然后,我们判断出来这个是什么样的编码就直接解码就好。

另外,在风云杯2016上比较有意思的一道misc04是关于加密与解密,同时还涉及到stego,先是zip伪加密破解,然后得到一张图片。尔等菜鸟们用binwalk分辨出了文件头分出来四张图片,嗯?然后?其实在赛后处理这张图发现了一个诡异的地方:

诡异就诡异在文件尾的exif到底是啥?

然后就没然后了……

P.S. 老司机们看透了一切,早早在这儿打好了埋伏,这一次是使用了zip伪加密+stego+base32,杀了个misc的回马枪。当时还是太年轻啊……

还有这道png的题目(用pngcheck来分析的)

这道题通过块损坏和重排来出的题目,把损坏的块处理一下就变成了下面这样
重排一下即可。

Word的基础题

乌云网友评论:你把整个字体颜色调白了也可以达到隐写术的效果
PDF

之前见过的隐写题目都很容易,用wbStego4open这个工具都可以解出来,这儿一般是以字符串为主。然而,直到发稿之前刚刚看了一道让我整个都233的题解:

The website at hack.lu CTF 2016
allows you to download a pdf file. It contains an attachment named pdf10000.pdf.

Attachment pdf10000.pdf contains another attachment named
pdf9999.pdf; pdf9999.pdf contains pdf9998.pdf and so on...

With this behavior in mind, we can write a script to
automate the extraction process. The assumption is that pdf0.pdfmight contain the flag.

本来想尝试一下解这道题,然而

那还是不做了,把那道题的题解放出来:

After "guessing" (a 30.7 MB pdf file containing only few characters and a small image) that the pdf has something embedded in it I started to use pdfdetach to extract the file:

pdfdetach simplepdf_f8004a3ad0acde31c40267b9856e63fc.pdf -saveall

A new file was created pdf10000.pdf, then when I ran pdfdetach again and observed that it creates a file pdf9999.pdf and so on. The objective was to get to pdf0.pdf so a quick script solved it:

<?php 
for ($i=10000; $i >= 0; $i--)
{
	$j = $i + 1;
	if ($j < 10001)
	{
		exec("rm pdf$j.pdf");
	}
	exec("pdfdetach pdf$i.pdf -saveall");
	echo $i."\n";
}
?>



When it get to pdf0.pdf I ran it again

pdfdetach pdf0.pdf -saveall

And I got start.pdf, ran it again

pdfdetach start.pdf -saveall

but I got a file start.pdf with 0 bytes (and lost the original start.pdf, so be careful and backup it !). Something was wrong. I looked on the pdfdetach arguments and :

pdfdetach start.pdf -save 1 -o x.pdf

Opened x.pdf and there was the flag :)


#Environment: Linux
#https://cthulhu.fluxfingers.net/static/chals/simplepdf_f8004a3ad0acde31c40267b9856e63fc.pdf#Extract pdf10000.pdf and use the script

from subprocess import call
ctr = 10000
pdfname = "pdf10000.pdf"
while ctr > 0: 
   call(["pdfdetach", "-saveall", pdfname]) #for more info http://www.dsm.fordham.edu/cgi-bin/man-cgi.pl?topic=pdfdetach&sect=1   ctr -= 1
   pdfname = "pdf" + str(ctr) + ".pdf

----------------------------------------------------------------------------------------------------
From the script above, pdf0.pdf was extracted. It contains
start.pdf which contains the flag.

The flag is flag{pdf_packing_is_fun}


pcap流量分析:

运气好的话,可以尝试使用foremost+strings,当然特别高阶的方法还是请教各位老司机们……

WAV:

哎哟说到这个每次都是满脑子的渡口和魂斗罗……

常见的WAV文件使用PCM无压缩编码,这使WAV文件的质量极高,体积也出奇大,对于PCM WAV,恐怕也只有无损压缩的音频才能和其有相同的质量,平时我们见的什么mp3,wma(不含wmalossless)和wav的质量都是差很远的!这点可以通过频谱看出,即使320kbps的mp3和wav一比,也要自卑了!
Wav格式支持MSADPCM、CCITTALaw、CCITT μ Law和其它压缩算法,支持多种音频位数、采样频率和声道,但其缺点是文件体积较大(一分钟44kHZ、16bit Stereo的WAV文件约要占用10MB左右的硬盘空间),所以不适合长时间记录。

之前看别人的WP屯了这么几张图

p.s. 脑洞君你好

突然想起来今年的一件事,当时是刚比完四叶草的CTF之后,我们队又去了一次国外的小比赛。比赛当中,也是有一首隐写术的题目,给了rain.wav (这儿给了其他队伍提取的源文件),那道题当中按照同样的方法却没办法分析出来个所以然,“你听到这歌里有没有杂音?”,然后我和队友把声音调到最大才听出来这首歌的另外的一些声音,通过判断声音位置最后提取到了flag。

这件事告诉了我们:比赛的时候,如果有声音类的题目,不要用10块钱耳机,认真脸

MIDI:

从来没做出来过midi的flag的我……

AVI:

AVI含三部分:文件头、数据块和索引块。
其中数据块包含实际数据流,即图像和声音序列数据。这是文件的主体,也是决定文件容量的主要部分。视频文件的大小等于该文件的数据率乘以该视频播放的时间长度,索引块包括数据块列表和它们在文件中的位置,以提供文件内数据随机存取能力。文件头包括文件的通用信息,定义数据格式,所用的压缩算法等参数。

avi的编码标准不同导致的文件体积太大,比赛中应该不会放那么大的视频文件供CTFer下载吧?但谁又能说的准呢?给大家安利一个MSU VideoStego,是用于分析avi文件的小工具。

EXE:

exe里藏东西其实还涉及到病毒行为分析,有可能是藏在壳内,也有可能是其他地方,具体情况可以使用IDA或者OD还有C32Asm来进行跟进分析。

此话说出后不久,flag就没了,看这儿:CTF中比较好玩的stego(续一)

MP4:

BCTF2016出过catvideo (在这儿也给了源文件供各位黑阔分析), 然后用了ffmpeg大法:

ffmpeg.exe -i catvideo-497570b7e2811eb52dd75bac9839f19d7bca5ef4.mp4 -r 30.0 fr_%4d.bmp

然后就xor一下得到了这个(我只是打个比方,这道题我原来的脚本不是这么写的):


0x04 后记

这一块可以深挖的东西还有很多,都是特别的有意思,如果隐写术和密码学结合起来,也是一道非常有意思的题目,也有见到和算法结合起来的"png number"(png套路蛮多的)。个人感觉如果说是顺着CTF这一块往下挖的话,也挺考验选手自身的基础的。

不过现在光考察stego的题目也已经很少了,反正和这篇文章并不是同一个level……

-------------------THE END-------------------

旧文,原文发布于2016年05月20日的乌云知识库。


在此再次谢谢乌云知识库,谢谢。


来源:

CTFtime.org / Hack.lu CTF 2016 / simplepdf

wav文件格式分析

Rain or Shine (35 pts)

BCTF - Forensics

编辑于 2016-11-06

文章被以下专栏收录