MISC
explorere-the-music
这道基于wav隐写的题目在这次MISC题中显得中规中矩,但是在这道题目中所运用的知识点也是比较全面和丰富的
0x00
把题目下载下来以后拿到的是两个文件,一个是the_sound_of_silence.wav,一个是OpenPuff工具
查阅资料可以知道,OpenPuff工具是一个可以用来隐写的专业工具,当然也可用于将隐藏在文件中的数据解密出来
OpenPuff的使用方法这里就不赘述了,在Unhide功能内,需要提供三个密码才可以解密被隐写的文件,那么这道题的解题思路就清晰了:在wav文件中找到这三个密码值,进而解密Unhide得到被隐写的数据,从而获得flag
0x02
在对wav格式的音频文件的隐写类题目进行解题的时候,通常会用到Audacity
Audacity是一款易于使用的多轨音频编辑器和记录器,适用于Windows,Mac OS X,GNU / Linux和其他操作系统。
在CTF比赛中,可以通过对音频进行频谱的分析,以及音频其他内容的分析,找到flag。
https://www.audacityteam.org/download/source/
将音频导入到Audacity
频谱图
将波形图切换到频谱图,查看频谱图中是否含有其他隐藏信息
通过拖动和缩放频谱图可以发现,在频谱图中隐藏着psdB:74208645
由此猜测是三个密码中的一个,也由此可推测出三组密码前缀为psdA、psdB、psdC
简单字符串查找
既然知道了规则,那么就要从其他方向上去寻找密码了,在这里我们也用到最常用的字符串查找,查找存在psd
特征的字符串
linux下使用strings配合grep是查找文件内容特征字符串的一个好方法
下面是查找样例
llmf@DESKTOP-CUGCI8H:/mnt/f/文档资料/Desktop/天翼杯/2007305f227d82badce$ strings the_sound_of_silence.wav | grep psd
psdC:01374890
通过查找字符串的方法,得到了psdC
,最后只要找到psdA
就可以解出这道题了
波形图
波形图也是隐藏信息的一个好方法,在这道题目的wav音频中,左右声道波形大致是一致的,因此暂且认为隐藏信息的波形图在音频开始的前小节或最后小节
从音频开始处观察波形,一直到最后并没有发现有规律的正余弦变换或者高低电平变换,但发现前奏之前有一段微小的波形起伏,切换成波形(dB)(W)进行观察,发现波形(dB)(W)图成高低(峰值)电平的规律变化,将采样率修改为44100Hz以更清晰看到其变化规律
假设高电平(峰值)为1,低电平为0,不难得到下列二进制字符串(其实很难,得用尺子加抠图平移得方式估算得到)
01110000011100110110010001000001001110100011100000110011001110010011011100111001001100110011011000110111
一共104个二进制字符串,已知psdB和psdC均为13位字符串13x8=104,因此猜测将这104个二进制字符串每8个一组再转化成十六进制再转字符串即可得到psdA
import re
str = '01110000011100110110010001000001001110100011100000110011001110010011011100111001001100110011011000110111'
print(re.findall(r'.{8}',string))
#01110000 01110011 01100100 01000001 00111010 00111000 00110011 00111001 00110111 00111001 00110011 00110110 00110111
解得psdA:83979367
0x03
利用上面得到的psdA:83979367
、psdB:74208645
、psdC:01374890
输入到OpenPuff中,就可以解密出隐藏在wav音频中的信息
解密得到一个flag.txt,文本内容就是flag
LLMF@DESKTOP-CUGCI8H MINGW64 /f/文档资料/Desktop
$ cat flag.txt
EB10F48B42D7FB1CE35C171C2EBC0E2D
签到题
0x00
题目说下载完就可以得到flag,请求题目链接是一个5G大小的文件,要全部下载这个文件肯定不现实,也不是题目想考查的方向
那么这里就考察到了下载功能中的断点下载Range头
GET /6GTest.file HTTP/1.1
Host: http://das.wetolink.com:8941
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=66A7817B03AB36D8C5288A7E9B2BA9A7; JSESSIONID=4CC2394F96813D8480A5FAD09D3AA8A9
Upgrade-Insecure-Requests: 1
Range: bytes=-100 #只下载后100bytes的内容
这样就能读取到文件最后的flag值
- 本文作者: LLMF
- 本文链接: http://ll-mf.github.io/2020-08-06-2020天翼杯.html
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!