之前解开了datacon上的ctf夺旗题目:英雄联盟,也是记录一下解题过程,中间有碰壁的情况,急着看答案的直接拉到最下面就行了。
1、检查附件
将题目附件下载下来后发现是一个flag.zip压缩包,解压后是一张作者的LOL比赛结果截图(顺便一说作者0/14的寒冰还是很喜感的)。
既然没有别的文件,那么这张图肯定是藏着东西了:图片隐写。先直接用7z打开原来的flag.zip,发现里面果然藏着flag.txt。
试图直接解压,发现要密码,那么难题就在于找到这个解压密码了。
2、利用kali探测
将png复制到kali linux上,利用自带的binwalk探测一下。
只能看出藏着一个flag.txt文件,从前面两列可以知道它的起始位置和终点位置,那就按照习惯先把它分离出来。可以用dd指令或者foremost,都是能在kali上直接使用的。
分离出来以后尝试直接打开,乱码且无任何相关信息(白分了)。
3、WinHex分析png图像结构
上网搜了一下相关方法,然后下载WinHex打开png查看二进制。从文件头开始前8字节数据是PNG文件的标志,后8字节数据是图片前缀IHDR,第二行前8字节数据是宽度和高度的十六位进制,后面还有色深、压缩方式等等,通常来说会查看宽高来判断图片是否隐藏了部分区域,或者在ASCII编码中查看是否有隐藏flag、password等等。
931的十六位进制是3A3,696的十六位进制是2B8,宽高均无误,也就是没有未显示的隐藏区域,同时查找ASCII码也未发现相关信息。那也只能再换种思路了······
4、ZSTEG还原隐写
尝试了几种方法后,还是把隐写信息找出来了。此时用到了图片隐写信息快速检测工具——zsteg。安装过程中就不详细讲了,git克隆zsteg包,换源下载安装什么的。安装好了用zsteg打开png,瞬间明了。(作者还在吐槽LOL太难了哈哈)
5、伪代码编程跑出FLAG
password有了,直接打开flag.txt。
一段伪代码,照着写一段python代码把flag跑出来就行了。
或者直接把伪代码丢给AI,然后用IDLE得出flag:NUAACTF{LolC0d3_1s_fun5y} 。