首届广西网络安全技术大赛初赛通关攻略
前言
第一次参加安全类比赛(好吧,其实我这种宅男参加的比赛都很少,很多种比赛都是第一次 – -),同组的组员建议我在比赛完写个通关攻略出来。听起来不错,写个通关攻略,顺便装装逼,真不错。
初赛分为5类题目,分别是:密码学、安全杂项、WEB、溢出类、逆向破解。题目总的来说,简单到离谱(至少解出来的所有题目都是特别简单的)。大概因为是第一届,环境没配好,有些题目解法有些奇特;有些题目是历届出过的题目,在网上就能找到攻略;有些题~~~~题目是错的 – -。
有些题目的分值我给忘记了,一般忘记的都是200-300分之间的,在后面标注有‘?’的就是忘记的。
题目有很多附件,图片附件我直接在本文中贴出来,其他附件我上传到网盘之中,大家可以去下载。
这个通关攻略不算完整,有两题我实在解不出来,问了主办方,他们也没透露什么信息,就没办法咯。
第一类:密码学
第一题 大帝的秘密武器(100分)
题目描述
公元前一百年,在罗马处上了一位对世界影响巨大的人物,他是当时罗马三巨头之一。在执政生涯中,传言他率先使用了一种简单的加密函,因此这种加密方法以他的名字命名。以下密文被解开后可以获得一个有意义的单词,你可以用这个相同的加密向量加密附件中的密文,作为答案进行提交:FRPHEVGL。答案为非常规形式。
附件中的密文:ComeChina
解法
这一题是非常简单的,稍微学过密码学就知道,这一题的加密方式是偏移。FRPHEVGL每个字的ASCII码+13,溢出的部分从’A’再数,就得到:SECURITY。
得到结果之后只要使用相同的办法加密一次,就能够得到结果。100分到手。
第二题 其实很简单(500分)
题目描述
在学习了凯撒大帝使用的神奇密码后,密码前辈们有创造出了更为奇异的加密方法。本题出题者喜欢用helloworld当密钥,密文如下:dlpcsegkshrij,请破解后提交。附录是一张似乎有用的表。答案为非常规形式。
附件:
解法
这题很简单,一看就知道这个附件是一张置换表,按照这个表将密文再反着置换一遍,就能够得到明文。500分到手。
第三题 还原大师(300分)
题目描述
我们得到了一串神秘字符串:TASC?O3RJMV?WDJKX?ZM,问号部分是未知大写字母,为了确定这个神秘字符串,我们通过了其他途径获得了这个字串的32位MD5码。但是我们获得它的32位MD5码也是残缺不全,E903???4DAB????08?????51?80??8A?,请猜出神秘字符串的原本模样,并且提交这个字串的32位MD5码作为答案。
解法
这题也是特别简单,题目告诉我们:问号部分是未知大写字母。那么我们直接给问号部分填大写字母,把所有的MD5求出来,然后和E903???4DAB????08?????51?80??8A?进行比较,只要匹配非问号部分就行了。300分到手。
第四题 Alice与Bob(200分)
题目描述
密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解为两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希,提交答案。
解法
太简单了,把98554799767拿去做素数分解,得到两个数,然后按照它的要求进行MD5加密,就得到结果。甚至比前面的几题都要简单,读题+解题+提交2分钟不到,200分到手。
第二类:安全杂项
第一题 wireshark(100分)
题目描述
黑客通过wireshark抓到管理员登陆网站的一段流量包(管理员的密码即是答案)
解法
下载wireshark,分析流量。里面有好多流量,注意到题目说是登录网站,我们就专注于寻找GET和POST。发现一个GET里有password=XXXX,可以猜测这个就是密码,提交就好了,100分到手。
第二题 小明的保险箱(200分?)
题目描述
小明有一个保险箱,里面珍藏了小明的日记本,他记录了什么秘密呢?。。。告诉你,其实保险箱的密码四位纯数字密码。(答案格式:flag{答案},只需提交答案)
题目附件
(这里显示的图片可能会被处理过,导致丢失一些信息,想测试的最好是去云盘下载吧)
解法
这个很简单了。还记得我小时候,CCTV1都针对这类加密方式做过特别报道呢。看到之后立马想到是图片后面追加内容。百度一下jpeg的图片格式,确定jpeg图片本身的大小,多余的部分就是追加的文件。追加文件的前4个字节一般是对文件格式的描述,对于这个文件,是’RAR!’,是一个加密过的rar压缩文件。题目说密码是4位纯数字。我们简单写一个bat脚本,用WinRAR自带的unrar.exe进行暴力破解。我的机器比较慢,每秒好像只能测试2个密码~不过很快就解出来了。解出来之后,里面有个文本文件,其中的内容就是答案。
第三题 间谍启示录(300分?)
题目描述
在城际公路的小道上,罪犯G正在被警方追赶。警官X眼看他正要逃脱,于是不得已开枪击中了罪犯G。罪犯G情急之下将一个物体抛到了前方湍急的河流中,便头一歪突然倒地。警官X接近一看,目标服毒身亡。数分钟后,警方找到了罪犯遗失物体,是一个U盘,可惜警方只来得及复制镜像,U盘便报废了。警方现在拜托你在这个镜像中找到罪犯似乎想隐藏的秘密。(答案为flag{}形式,提交{}内内容即可)
解法
附件是一个ISO文件,用什么打开都可以。里面有个WinRAR的自解压包,不要让它自解压,我们直接右键用WinRAR打开,就可以看到flag.exe。运行之后它就吐出一个flag.txt了。
第四题 静静听这么好听的歌(388分)
题目描述
小明喜欢听歌,更喜欢收集音乐。一天小明收集到了一份据说是从上世纪七十年代保存下来的音频文件,该文件被认为是某次特殊行动的秘密文件。然而令人费解的是这么多年了它一直是破损的无法正常打开,而随音乐附带的一段神秘歌词更是让音乐界百思不得其解。曲子作者是一个叫L.S.B的上校,据称此人的一切痕迹都被抹去了,所以查不到任何信息。现在已经2015年了,你是否能找出四十多年前的秘密?(答案为flag{}形式,提交{}内内容即可)
附件里有一段代码:
fid=fopen('33.wav','rb');
a=fread(fid,inf,'uchar');
n=length(a)-44;
fclose(fid);
io=imread('kkk.bmp');
[row col]=size(io);
wi=io(:);
if row*col>n
error('文件太小');
end
watermarkedaudio=a;
watermarklength=row*col;
for k=1:row*col
watermarkedaudio(44+k)=bitset(watermarkedaudio(44+k),1,wi(k));
end
figure;
subplot(2,1,1);plot(a);
subplot(2,1,2);plot(watermarkedaudio);
fid = fopen('2.wav', 'wb');
fwrite(fid,watermarkedaudio,'uchar');
fclose(fid);
解法
附件里有一段代码,还有一个音频文件。一看就知道这是matlab代码,不过具体是什么代码不重要,反正这些代码都是一看就懂的。代码是解题的切入口。代码之中出现了3个文件,我们可以推测我们得到的音频文件(假设它是data.wav吧)可能是代码中的33.wav或者是2.wav。仔细想想就能知道,我们的音频文件应该是代码中的2.wav。简单分析一下代码,我们就可以知道:kkk.bmp是一个二值图像,这个代码将二值图像的内容嵌入33.wav中,得到2.wav,也就是我们现在手上拿到的这个音频文件。这样我们就可以尝试恢复两个文件。
我先恢复的是33.wav,恢复的方法是根据你的经验,修改wav头部的一些信息。至于其他位置的信息就无关紧要了,对于音频来说,那点点偏差我们是听不出来的。恢复的结果是一首再正常不过的歌曲,而且还不是上世纪七十年代的歌曲~~~里面也没有flag。
这样的话我们就得恢复kkk.bmp。
从代码中我们可以看出,bmp中的重要信息:长和宽丢失了。为了解决这个问题,我们可以把所有可能的长和宽全部尝试一遍。如果这个图像是一副有意义的图像,那么正确的长和宽显示的图像应该是我们一眼就看得出来的图像。我的方法是先用简单的高亮工具测试一下这幅图像的宽度,很容易得出图像的正确宽度为100。最终这幅图像还原之后是一串Flag:
点评
这一题是我觉得比较好玩的题目。附件中的代码给出了明确的解题思路,而丢失一些重要信息,例如图像的长、宽会让解密过程变得更加扑朔迷离、丰富多彩。
第三类:WEB安全
第一题 管理员的愤怒 (100分)
题目描述
阿水是某部门的网站管理员,一天他发现自己管理的网站被挂上了暗链,链接指向了一个IP。阿水非常愤怒,表示一定要给点对方颜色看看,但是这小子没学过渗透。下面给各位这个IP,看大家如何进入坏蛋的网站获得flag为阿水报仇。
解法
额,好吧,这题我无从下手。100分的全场最低分刺瞎我的眼睛 – -。结果队友拿来一个啊D注入工具一扫,扫出了一张含有Flag的图片。它位于http://靶机/img
下面。我彻底无语。看来对于我这种Web安全的小白来说,一把好的剑十分重要 – -。
第二题 你就是提交不了(200分?)
题目描述
管理员的技能非常强悍,你如果乱说话,就让你提交不了(答案为flag{}形式,提交{}中内容即可)
解法
太简单了,前台js禁用了编辑和提交,改前台js就好了。入门级入侵。200分到手。
第三题 你就是长不了(200分?)
题目描述
其实很多时候,你即使可以输入了,你也输入不长。但是,我们不服!怎么办呢?(答案为flag{}形式,提交{}中内容即可)
解法
同第二题,200分到手。
第四题 白云新闻搜索(300分)
题目描述
中国又出现了一个搜索巨头!据报道,中国网络大亨小明近日编写了一个搜索引擎,叫白云新闻搜索,具体链接在下方,该搜索链接功能欠打,界面乏力,小明出一包辣条悬赏漏洞,豪言入侵高手都去试试,你服不服?不服就去试试呗~(答案为flag{}形式,提交{}中内容即可)
解法
前台js过滤字符,后台有SQL注入。屏蔽掉前台的js过滤脚本,然后网上百度一下SQL注入,照做就行。300分到手。
第五题 贪食蛇(250分?)
题目描述
贪吃蛇是经典手机游戏,既简单又耐玩!大家一定可以通关的!
贪食蛇代码中加密过的代码:
゚ω゚ノ = /`m´)ノ ~┻━┻ //*´∇`*/['_']; o = (゚ー゚) = _ = 3; c = (゚Θ゚) = (゚ー゚) - (゚ー゚); (゚Д゚) = (゚Θ゚) = (o ^ _ ^ o) / (o ^ _ ^ o); (゚Д゚) = { ゚Θ゚: '_', ゚ω゚ノ: ((゚ω゚ノ == 3) + '_')[゚Θ゚], ゚ー゚ノ: (゚ω゚ノ + '_')[o ^ _ ^ o - (゚Θ゚)], ゚Д゚ノ: ((゚ー゚ == 3) + '_')[゚ー゚] }; (゚Д゚)[゚Θ゚] = ((゚ω゚ノ == 3) + '_')[c ^ _ ^ o]; (゚Д゚)['c'] = ((゚Д゚) + '_')[(゚ー゚) + (゚ー゚) - (゚Θ゚)]; (゚Д゚)['o'] = ((゚Д゚) + '_')[゚Θ゚]; (゚o゚) = (゚Д゚)['c'] + (゚Д゚)['o'] + (゚ω゚ノ + '_')[゚Θ゚] + ((゚ω゚ノ == 3) + '_')[゚ー゚] + ((゚Д゚) + '_')[(゚ー゚) + (゚ー゚)] + ((゚ー゚ == 3) + '_')[゚Θ゚] + ((゚ー゚ == 3) + '_')[(゚ー゚) - (゚Θ゚)] + (゚Д゚)['c'] + ((゚Д゚) + '_')[(゚ー゚) + (゚ー゚)] + (゚Д゚)['o'] + ((゚ー゚ == 3) + '_')[゚Θ゚]; (゚Д゚)['_'] = (o ^ _ ^ o)[゚o゚][゚o゚]; (゚ε゚) = ((゚ー゚ == 3) + '_')[゚Θ゚] + (゚Д゚).゚Д゚ノ + ((゚Д゚) + '_')[(゚ー゚) + (゚ー゚)] + ((゚ー゚ == 3) + '_')[o ^ _ ^ o - ゚Θ゚] + ((゚ー゚ == 3) + '_')[゚Θ゚] + (゚ω゚ノ + '_')[゚Θ゚]; (゚ー゚) += (゚Θ゚); (゚Д゚)[゚ε゚] = '\\'; (゚Д゚).゚Θ゚ノ = (゚Д゚ + ゚ー゚)[o ^ _ ^ o - (゚Θ゚)]; (o゚ー゚o) = (゚ω゚ノ + '_')[c ^ _ ^ o]; (゚Д゚)[゚o゚] = '\"'; (゚Д゚)['_']((゚Д゚)['_'](゚ε゚ + (゚Д゚)[゚o゚] + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (o ^ _ ^ o) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚ー゚) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚ー゚) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (o ^ _ ^ o) + ((゚ー゚) + (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚ー゚) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (o ^ _ ^ o)) + ((゚ー゚) + (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚ー゚) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚ー゚) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (c ^ _ ^ o) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (o ^ _ ^ o)) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚ー゚) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (o ^ _ ^ o)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚ー゚) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚ー゚) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (o ^ _ ^ o)) + (゚Θ゚) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((゚ー゚) + (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚ー゚) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (o ^ _ ^ o)) + (゚Θ゚) + (゚Д゚)[゚ε゚] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (o ^ _ ^ o)) + ((゚ー゚) + (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚ー゚) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (o ^ _ ^ o)) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((゚ー゚) + (゚Θ゚)) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (゚Θ゚)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (゚Θ゚)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚ー゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (c ^ _ ^ o) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (゚ー゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (o ^ _ ^ o)) + (o ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚ー゚) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚ー゚) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (゚Θ゚)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚Θ゚) + (゚ー゚) + ((゚ー゚) + (o ^ _ ^ o)) + (゚Д゚)[゚ε゚] + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚ー゚) + (゚Θ゚) + (゚Д゚)[゚ε゚] + (゚ー゚) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (o ^ _ ^ o)) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (゚Θ゚)) + (c ^ _ ^ o) + (゚Д゚)[゚ε゚] + (゚Θ゚) + ((゚ー゚) + (o ^ _ ^ o)) + ((゚ー゚) + (゚Θ゚)) + (゚Д゚)[゚ε゚] + (゚ー゚) + ((o ^ _ ^ o) - (゚Θ゚)) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (゚Θ゚)) + (゚Θ゚) + (゚Д゚)[゚ε゚] + ((゚ー゚) + (o ^ _ ^ o)) + (o ^ _ ^ o) + (゚Д゚)[゚o゚])(゚Θ゚))('_');
解法
flag就藏在前台js中。先分析贪吃蛇的代码,发现成功时会执行一句奇特的加密代码,我们运行它,得到:
Flag{ hahahah wrong!! :(}
好吧,如果是网上大神,他们已经得到正确答案了:大神用firebug,一眼就看到flag藏到了window这个全局变量里去了。
好吧,我这种老实的小白都不认识这种工具 – -,只好默默的解密那一串代码:
将代码美化一下,然后一句一句运行,就知道最后一句其实是这样的:Function(Function(…));
用括号高亮工具将参数分隔出来,运行前面几句,然后将分隔的参数单独拷出来运行,得到:
"return"\167\151\156\144\157\167\133\47\146\154\141\147\47\135\40\75\40\47\106\154\141\147\173\66\142\64\70\60\67\62\67\63\141\146\144\146\146\143\64\64\62\66\142\67\71\60\144\145\142\143\144\62\142\71\66\175\47\73\12\143\157\156\163\157\154\145\56\154\157\147\50\42\106\154\141\147\173\40\150\141\150\141\150\141\150\40\167\162\157\156\147\41\41\40\72\50\175\42\51\73""
这是8进制字符串,单独运行一下8进制字符串,就得到肉眼看得懂的字符串:
"window['flag'] = 'Flag{6b4807273afdffc4426b790debcd2b96}'; console.log("Flag{ hahahah wrong!! :(}");"
好吧,原来如此。怪不得别人解得那么快 – – 还是我的剑不够锋利啊。
点评
首先赞一下,这串代码好萌啊!
然后,我再赞一下这题比较贴近现实。现实生活中我们常常会遇到需要解密js的情况。虽说这种加密方式,额,有点儿奇葩。不过多学点js在分析网页的时候还是很有用的。
第六题 Easy Login(200分?)
题目描述
Easy Login…So Easy…
解法
好吧,它说So Easy。看起来好像也是真的So Easy。可对我来说真难~
网站默认提供一个没有权限的用户,用户名是demo,密码是demo。登录进去提示没有权限。目测只要获取管理员权限即可通关。
登录进去之后观察一下,就知道网页有cookie审查漏洞。网站的cookie是一串base64加密的邮箱,原文是demo@dbappsecurity.com.cn。首页有作者提示。我在这里测试了很多种方法 ~~ ~~ 例如,作者@dbappsecurity.com.cn、admin@dbappsecurity.com.cn、root@dbappsecurity.com.cn、什么什么的@dbappsecurity.com.cn都不行~~只好放弃了。
后来问解出来的大神才知道,去社工库查一下作者的邮箱,就好了。好吧。又一次深深地打击了我这种小白T_T。我懂得的剑术太少了T_T。
第七题 ? Be Allowed? (200分?)
题目描述
小黑终于闯进了内网,找到了目标Web主机,但是却被做了限制!
进入主页之后提示一串英文,大意是:登录成功,但是你什么都做不了。
解法
未知
第八题 运维失误 (300分?)
题目描述
公司的运维人员小王因为运维不当导致资料泄露,但粗心的他不知道问题出在哪里,你能帮小王找到问题的所在吗?
解法
这题我完全没有头绪啊!问了解出来的大神才知道,给所有网页加个.bak后缀,然后flag就会出现在某个文件之中。好吧,还有这种解法,我知道的太少了 – -。
第九题 admin123456(200分?)
题目描述
入门级入侵,你以为就这样你就能得分了?太小看admin 了。(答案为flag{}形式,提交{}中内容即可)
解法
进去之后发现前端做了过滤,把它屏蔽掉。然后用’or”=’就ok了。
第十题 刀塔(300分?)
题目描述
无论你喜欢打Dota还是LOL,都进网站里学习一下吧!
解法
浏览一下网站,就猜得出网站有目录穿越漏洞。
flag位于http://靶机/flag.php
,直接运行不会显示flag。
news页有目录穿越漏洞,它的地址大概是这样的:http://靶机/index.php?action=news&nid=1
其中1代表http://靶机/news/1
,是一个文本文件,可以改成任意文件实现文件内容的访问。
不过可以穿越的地方做了限制,首先是不允许英文字符,接着是长度最长只能是5位。然后,我就一直卡在这里 – -。
问了解出来的大神才知道,可以用*显示目录下的所有文件。我们只要输入这样的地址:
http://靶机/index.php?action=news&nid=../*
就能够把flag.php的源码显示出来,读到flag了。
点评
好吧,这又是让我无语的一题。我怎么都想不到,做网站的人要实现怎样的功能才会留下这样的漏洞。看来我写的网站太少了T_T(PS:其实压根没写过~_~)。
溢出类
第一题 高水平溢出(500分)
题目描述
小张由于电脑被入侵,下场很惨,于是专心学习溢出,只是没想到从网上经过别人指点找到这个东东,完全不知道是什么。当时小张就瞬间蒙逼了。给位大神挽救一下崩溃的小张。(flag文件在/home/ctf/flag.txt文件中,答案为flag{}形式,提交{}内内容即可) nc ipaddr 8888
解法
未知。有缓冲区溢出漏洞,但是有漏洞的函数不返回,没法直接利用。也许可以利用系统自带的错误处理程序,但是对Linux不熟悉,就没能解出来。
点评
在这里吐槽一下,在解后面的题目的时候,我发现主办方有一些安全措施,例如只要发现程序运行fflush(stdin)
,就会被kill掉。
而这个程序的主要代码是这样的:
void __noreturn process()
{
while(true)
{
//这里是代码第一行,第一行,真的第一行!
scanf("%s", buff);
fflush(stdin);
printf(...); // 打印欢迎语
...
}
}
这让我彻底无语,连上去之后,不管发送什么过去,都会瞬间被kill,然后disconnect。连后面有printf的代码都没能运行。
这还溢出个毛啊!
第二题 小张爱审计(100分)
题目描述
小张服务器被溢出攻击了,小张很苦恼,女朋友也说他无能。然而这个可恶的黑客却告诉小张他的服务器ip和一个小文件,并说他等着小张报复哈哈哈,小张很愤怒,大家一起进攻坏蛋吧(flag文件在/home/ctf/flag.txt文件中,答案为flag{}形式,提交{}内内容即可) nc ipaddr 8888
解法
这题特别简单,简直幼儿园级别的,代码里判断一下你传过来的数据格式对不对,对了就运行你的数据 – – 稍微会点的人都能解了。
不过这题出题方做的太烂~导致其他人都没能解出来~我猜他们在自己机器上溢出肯定是成功了,但是换到靶机上就失败。好吧,我告诉你们原因吧:首先是。flag文件不在/home/ctf/flag.txt
文件中,而是在/home/ctf/flag
文件中。其次是不知道出题方使用了什么技术,只要进程使用fork、exec、execv啊之类的函数,程序就会被kill掉。额,还有,程序只要fflush(stdin)
,也会被kill。
既然如此,那我们如果真想溢出成功,就没法使用网上的20kb的shellcode咯。只能自己写一串,直接读/home/ctf/flag就好。具体shellcode怎么写,就不属于这篇文章的范畴了,自己百度一下吧,听说挺难学的。我学习shellcode编写的过程有点儿神奇,就不做评论了。
设计一下传输的包的格式,加上shellcode就能得到flag。
点评
如果大家是按顺序做题,我觉得上一题是所有题目中最难的,不过因为它500分,大家估计都会放弃的。而拥有亮瞎大家眼睛的100分的分值,背后却一大堆坑的这题大猪,估计吃了很多只老虎 – -。
我能说这是我有史以来第一次溢出成功吗,我能说这是我第一次写shellcode吗,我能说我开心得要死吗?第一次溢出实战就弄了这么多关卡给我,也是好艰辛。
第三题 宝葫芦肚(500分)
题目描述
小明有一个坑爹的宝葫芦,经常吞噬别人的辣条,储存在肚子里。如果我们能从他肚子拿到辣条我们就发财了。下面就是肚子唯一的破绽。(答案为flag{}形式,提交{}内内容即可) nc ipaddr 8888
解法
所有环境同第二题,flag也是在/home/ctf/flag
下面,就连漏洞形式也是如出一辙:判断一下格式,对了就运行你传过来的代码。解了第二题就没难度,改一下格式继续用原来的代码就能得到flag。
第四题 宝葫芦身(300分)
题目描述
小明有一个宝贝葫芦成精了,有一天它被一包辣条呛住了,你能从下面的端口中把辣条勾引出来么?(答案为flag{}形式,提交{}内内容即可) nc ipaddr 8888
解法
这题分值虽然比上一题低,但是难度其实要高那么一点点。
程序的有缓冲区溢出漏洞。起初我还在死命找jmp esp,后来发现一段代码,大概是这样的:
unsigned char str[] = "dbapp";
*(unsigned char *)str = 0xFF;
*(unsigned char *)(str+1) = 0xE4;
让我彻底无语~
覆盖返回地址到”dbapp”字符串上面就好,然后我们的shellcode就能运行了。
写shellcode的时候注意一下就是它会对传过来的数据进行xor,/html/ctf/flag
在xor之后肯定会变成"%s"
中会截断字符串的一些字符。我们需要把/html/ctf/flag
加密一下才行。我只是简单地再xor一次,就过去了。
然后构造一下数据包,发过去就得到flag。
点评
这题是很经典的缓冲区溢出题目。虽然很简单,但是考察了shellcode的加密、jmp esp的用法。还是不错的。
不过这个jmp esp
位置的设置,实在让我无语。如果不是我顺手乱点开其他函数,还真找不到它。
发现这个jmp esp
我就有回到了高中感觉:只要你多做题,你就知道,出题人把答案藏在这儿而不是在那儿。这样设置有何意义,脑洞也太大了,实际设计程序有谁会这样写的?让我们多多分析程序吗,还不如多出一道逆向题来得实在。
逆向破解
第一题 刮开有奖(100分?)
题目描述
这是一个赌博程序,快去赚钱吧!!!!!!!!!!!!!!!!!!!!!!!!!!!(在编辑框中的输入值,即为flag,提交即可)
解法
这是一个GUI程序。程序打开之后显示”刮开有奖“。
一眼就能看出这是个Win32GUI程序。用窗口隐藏大师把”刮开有奖“关了,暴露出后面的编辑框和”^^“按钮。启用它们。我以为这样就能通关了,然后狂点”^^“,没反应…..
然后再看题目:在编辑框中的输入值,即为flag,提交即可。
好吧,我们还做类似分析注册算法的东西~_~
随便用一个逆向工具打开,定位到RegisterClass,得到WinProc的位置,观察代码得到点击^_^的处理程序。
分析一下代码,很容易知道”密码“(就是编辑框内的内容)为8位,其中前2位是直接比较值的,马上就可以确定。
后面的3,4,5位还有6,7,8位都分别拿来进行一轮计算,算出的值为”ak1w”以及”V1Ax”就对了。
我瞄了一眼算法,发现算法层次逻辑好乱,就懒得分析了,直接写个注入代码,在程序创建线程然后用它自己的代码进行爆破,很快就得出结果,拿到flag。(别来问我结果,我忘记是多少了T_T)。
点评
经典的反注册类题目,算法不难,要写出注册机的话挺考验逆向水平的。我这题就偷懒了,反正不需要写注册机,我就偷工减料了。
第二题 crackMe(500分)
题目描述
小张从网上下载到一个黑客软件,然而开发者并不打算共享,所以小张注册了一个用户名叫welcomebeijing,但是密码需要进行逆向计算,请求出密码,进行MD5的32位小写哈希,进行提交。
解法
首先是分析代码,它会依据你的用户名创建一个xor表,然后用这个表和密码经过一轮恶心而复杂的计算,得到一个长度为8的checksum(unsigned char checksum[8]
),最后检查checksum是否满足一些条件。满足则通过注册,不满足不通过。
这题的代码相比上一题就写得好得多了,层次和逻辑都非常明显。让我们的分析也简单很多。不过这题的验证算法却是要复杂得多。
我的办法是先找出符合规则的checksum。好吧,符合规则的checksum多了去了。而且当你调试和不调试的时候,checksum的值不一样。当然,程序一般应该是不被调试的,那就有5种checksum是符合规则的,其中有很多种取值。其中有一种checksum比较特殊,那种checksum只有一种取值可能,其值为”dbappsec”~_~好吧,这家伙又在打广告。
经过对checksum生成算法的简单分析,就能够了解到当密码是16位的时候,checksum中的每一个字节对应密码中的2个字节。这样我们就可以暴力破解。
破解时注意,程序还对打开它自身的方式进行检查,如果是双击打开,checksum会是一种结果。用其他自带窗口的程序打开,checksum又会是另一种结果。
于是我们使用两个checksum就能分别得到两个密码串:
39D09FFA4CFCC4CC
4EB5F3992391A1AE
按要求提交第二个密码就好。
点评
这题要只说算法设计的话,挺赞的。设计到逆向以及一些简单的密码学。如果生成checksum的算法能复杂一点,例如让checksum和密码不是简单地对应的,而是像MD5那样牵一发而动全身的,就更好玩了。
这题其实逆向难度不高,就简单的分析算法,一会的事。它就是脑洞特别的大。如果是需要一个密码给你自己注册,那么你能算出好多好多个密码,有16位的,还有14位的,数量是个天文数字~_~。任何一个密码都能注册成功。在实际生活中,这些密码就完全够用了—-反正都能成功注册,效果都一样。而主办方的系统就要求你只能提交一个正确的密码。真抠!你得分析出主办方到底想让你生成什么样的密码,才行。做出来之后,我又有一种”你做题做得多吗?做得多你就懂我想让你干什么了!“的感觉。我只想说:这TMD有毛用,纯属浪费时间。
第三题 firmware(100分?)
题目描述
网管小张审计日志时发现疑似黑客使用Bash漏洞对公司的路由器进行了攻击,小张通过技术手段获取到了路由器固件dump文件,但是小张不懂逆向分析,请帮助小张分析出后门程序所使用的远程服务器和端口.(flag文件在/home/ctf/flag.txt文件中,Flag形式为 md5(网址:端口)},注意网址不包含http比如:md5(www.baidu.com:80)=5411a465b86d593986b8b9f9b1c1788c)
解法
网上搜索一下firmware crack,然后按照教程走一趟,解出固件内的backdoor文件。简单分析,就能够得到服务器为echo.byethost51.com:36667了。不过这题提交系统有问题,我老早就解出来了,可是提交了它说答案错误,直到系统修复之后出个公告说什么答案不能提交的问题已经修复,我才提交成功。真气人,弄得我还花了很多时间去分析其他的代码。
点评
这个逆向挺不错,这个backdoor可不像前面那两题哦,它可是一个真正的后门哦!不过好玩的就是,路由器其他程序用的指令集是arm指令集,这个backdoor用的是x86指令集,能不能再搞笑一点儿?
第四题 内涵的软件(200分?)
题目描述
图片有内涵,exe也可以有内涵,也许你等不到答案,赶快行动起来吧!!!(答案为flag{}形式,提交{}内内容即可)
解法
任意hex编辑器打开,抓取正则:/{\w+}/,得到flag:
dbapp{49d3c93df25caad81232130f3d2ebfad}
用任意exe分析器打开,然后分析字符串也可以~
第五题 helloword(100分)
题目描述
有难的题目,也就有简单的题目,就像程序员一辈子编写的第一个程序,极有可能是helloword,它很普通,但是也很让人怀念。你猜这题flag在哪里?让我们怀念第一次编写的easy程序吧!(答案为flag{}形式,提交{}内内容即可)
解法
这是个Android APP。有简单的解法和正常的解法:
正常的解法:
反编译APP,然后分析,得到flag。
简单的解法:
16进制编辑器打开classes.dex,抓取正则:/flag{\w+}/,得到flag:
flag{7631a988259a00816deda84afb29430a}