很早就想做的一道题,也是当时V&N公开赛的misc压轴题,整体来看题目非常复杂,
套了一层又一层,但涉及考点很多,而且有些考点很新颖很少见,值得一做!
osu!
中观察flag下载附件解压,得到一个vmdk镜像文件和一个加密的压缩包,下面我们分部来进行解析
首先看加密的压缩包,WinRAR打开可以看到备注
发现关键字the eighth circle of Hell
,Google这个可以发现是和《神曲》有关,而且搜索到的第一条就是
而且这个Malebolge和压缩包中的txt文件名也相同,再搜索Malebolge可以发现有和code
、language
相关的词条,搜索查看发现竟然是一种编程语言
而且还有在线的编译网站:http://malbolge.doleczek.pl/,将压缩包备注中的看似乱码的字符串复制进去,而且要删去每行最后的换行,将其变为一行后再Run program,即可得到压缩包密码:%&^&#@()(*:";'/,,
解压后查看压缩包中的txt,得到hint,内容如下
用7z查看这个vmdk文件,打开后发现几乎就是整个C盘,而我们要做的就是找到出题人藏在其中的所有题目附件,一个可以相对减少工作量的方法就是按照修改时间排序,从最新的开始找(当然也得一个一个文件夹的翻),最终在以下目录找到一些名字奇奇怪怪的文件
查了一下这些名字都和题目背景有些关系,而且时间也都集中在6号7号这两天,再看这些附件都符合txt中提到的这些文件格式,可以判断这些都是题目的附件,直接从7z中将这些文件拽出来
结合txt中hint的NTFS,直接在题目附件所在文件夹打开cmd,执行dir /r
,可以看到在Door.png
这个文件后隐藏有exe文件,用工具ntfsstreameditor将其提取出来,得到Purgatory.exe
这个文件
用cmd执行该文件,得到了一句话
根据提示放在炼狱中执行,推测是需要和什么文件放在一起(最开始尝试了新建文件夹起名为炼狱,结果失败了),结合neverno师傅给我的提示,最终在以下目录又找到了一个名字奇怪的文件
将其提取出来,我查了Purgatorio
这个单词的意思,正是意大利语的炼狱
,将这个文件和Purgatory.exe放在同一目录下,再次运行程序,得到了另一个hint
010editor查看该文件,看文件头即可知道为ELF文件,但是在调用readelf来分析这个文件时,却报错
查看ELF文件的结构发现,开头四个字节应该为7f 45 4c 46
,而该文件的文件头错误,将20
改为7f
后,再次用readelf查看,可以发现这个文件的文件类型为NONE
用010editor运行ELF文件模板也可以看到
参考了网上有关ELF文件格式详解:
可以知道ELF文件格式主要有三种:
初步推测其为可执行文件(Executable file),在010editor中修改类型为ET_EXEC
后保存,尝试运行文件
在多次尝试后发现可以另外输入字符,并且可以得到其他内容
根据在Purgatory.exe中得到的提示:
尝试输入evoA
,得到了新的内容
在看了小白师傅的wp后发现刚刚得到的字符串30e308e8e7122579b8ea2fae774d1999
解md5也可以得到evoA
,在刚刚尝试的时候我还发现,当你输入由e
、v
、o
、a
这四个字母组成的非evoA
的字符串,还可以得到一个假的flag(算是彩蛋了吧2333)
刚刚通过ELF得到的字符串:pdfkG@0zl_3ptmVPfa7LHuB8rs#cRdi$
,为pdf开头,推测为此pdf文件的密码,输入后打开了pdf文件
看到这种字符串,而且每组字母在键盘上都相连,想到键盘密码,每个表情分隔为一个单词,但是这个键盘密码画出来的单词比较难看,横竖都有,需要多加分辨,最终组合在一起得到
得到word文档附件的密码:PROVERBS OF GOD
用刚刚得到的password解压,得到docm文件,百度可知docm文件为一种包含宏或启用了宏的文档,用word打开后查看宏:ALT+F8,可以看到有名为LargeSB的宏(大写字母即为LSB)
运行宏命令可以得到由大量base64组成的字符串(下图只为其中一部分)
如此大量的base64很容易想到base64隐写,用脚本解一下,得到:Hidden1nWord_
再看word文档的内容,为大量的16进制,FF D8 FF E0 0D 0A 1A 0A
开头,但不是FF D9
结尾,而89 50 4E 47 0D 0A 1A 0A
又是PNG的文件头,所以推测其为被修改了文件头的PNG文件,将文件头改回来后python写入文件,得到PNG图片
由于刚刚的宏提示LSB,而且解base64隐写还得到了字符串,推测该PNG为需要密钥的LSB隐写,密钥为Hidden1nWord_
,用脚本解密,得到内容如下
刚才得到的解压密码:Bliss_Syc!!!!
,解压后得到osz文件,百度可知这种文件和游戏osu!
相关,下载游戏后用游戏打开这个osz文件,发现是个可以玩的图,将这个osz文件拖进kali中,发现可以解压,解压后可以看到一个readme.jpg的文件,strings查看这个文件,在最后可以看到一些可读的数字和字符
在请教了小白师傅后才理解了这些字符的意思,每一行数字都对应一个时间,这个时间在游戏的图中对应了flag的一个字符,比如给出的例子,在这些数字的结尾也给了相应提示:Traversing.Time
根据下面所给的所有时间,在游戏图中找到对应的字符(在编辑地图模式的左下角可以跳转对应时间),有些时间对应图案只是一个圆点,点上显示的数字即是这个时间对应的字符,比如0135512
对应的图案,数字为9
将这些字符按照顺序组合在一起,就是题目的flag,内容是32位小写md5
其中md5的内容解密后为:Welcome to paradise