时隔这么久,我终于又发文章了,撒花。。。emmmm,因为最近一直都在准备CTF比赛的事情,所以一直纵横于各大CTF训练平台。就在我觉得自己已经练的差不多了,可以“叱咤赛场”了的时候,遇到了一道题,我一定要控诉一下这个题!!!哦对了,先给大家解释一下什么是CTF比赛(来源:百度百科)
内容:CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今,已经成为全球范围网络安全圈流行的竞赛形式,2013年全球举办了超过五十场国际性CTF赛事。而DEFCON作为CTF赛制的发源地,DEFCON CTF也成为了目前全球最高技术水平和影响力的CTF竞赛,类似于CTF赛场中的“世界杯” 。[百度百科]
好了话不多说,上手解题:
(本题练习平台:BugKuCTF,链接:http://ctf.bugku.com/challenges)
打开题目看到:(这似乎是安恒杯的一道比赛真题)——题目中可以看到有hint(提示),然而因为这个图是我2019年新截的图,我2018年做的时候是没有这一行hint的!!!
嗯?下载一下png,添加一下后缀名,打开,哇这猫好可爱!(10分钟以后。。。)等等,我好像是要做题来着。。。
其实在我这种久经CTF沙场的人的眼里,这当然不可能是一张单纯的图片,于是,我采用了各种方法,尝试对其隐藏的内容进行挖掘,然后我放弃了。。。
好了好了,继续做继续做。
打开一个解决图片隐匿的神器,进入下图这个界面,进行各种操作,终于发现了一些东西!
看看文件头是PNG,好嘛,一张图片里又藏了一张图片!保存出来,双击打开,咦,打不开。。。Emmmm。。。
打开winhex,删掉最前面的ff fe这两个干扰项,就能打开了!
终于能打开了,咦,怎么提莫的是半张看上去像二维码的东西:
这咋整啊。。。
还好之前遇到过类似的问题,利用工具把图片高度拉长啊!打开010Editor,载入png的tamplate,run一下,修改高度,一气呵成,呼!(图片红框所选位置原来显示的是140)
但是这个不是二维码啊。。。我的天,还要反色一波。。。画图打开,ctrl+shift+i,反色完成,扫描二维码。
哈???这居然还不是答案???
好吧,上百度网盘把它下载下来,可开心了,终于快做完了。。。
压缩包解压一下,打开flag.txt,激动人心的时刻到了!
这提莫的搞我!做不下去了。。。我要百度答案去了,不要拦着我!
用winrar解压,得到flag.txt,然后打开NTFS数据流处理工具,发现了一个pyc文件(这是个python编译过以后的文件)
拿到pyc还不行,要反编译一下得到py文件。。。打开看到代码:
encode。。。也就是说我还要写个程序给他decode一下?!多大点事儿嘛,编!(心在痛)
看到控制台输出flag的那一刻,老泪纵横。。。
好了终于做完了,这居然是一个只有100分的题,按照以往做题的难度来看,这个脑洞我觉得500分也不为过啊!不说了不说了,我还是继续刷题吧。。。
最后附上这个decode代码:
def decode():
ciphertext = ['96', '65', '93', '123', '91', '97', '22', '93', '70', '102', '94', '132',
'46', '112', '64', '97', '88', '80', '82', '137', '90', '109', '99', '112']
ciphertext.reverse()
flag = ''
for i in range(len(ciphertext)):
if i % 2 == 0:
s = int(ciphertext[i]) - 10
else:
s = int(ciphertext[i]) + 10
s = chr(i ^ s)
flag += s
return flag
def main():
flag = decode()
print(flag)
if __name__ == '__main__':
main()
作者注:本文最早发布于我的公众号Carl中,感兴趣的小伙伴们可以关注一下我的二维码:
(本文为作者原创。转载请注明:转自carlzhang.xyz)