浅析CTF与CTF之我见

By---无始道长

前言

Bzi76A.png
最近,在V2EX上,一名用户发表了一个自己制作的网站,吸引了大量网友的注意。其实,我也是其中的一个,马上,该网站迅速在解密/探险以及爱好计算机的网友群和空间、朋友圈传播开来。涌现了许许多多向终点奋发冲刺的杰出人物,我第一眼看这个网站,也是有些一脸不屑,但是当我深入其中的时候,却觉得另有深度、深入其中。
随着这个网站关卡的深入,可以发现,作者运用的技术和底蕴也越来越强,不仅仅只有技术,还要懂得各种各样的学科知识和梗,才能走到最后闯关成功,可谓是难上加难!再者,吐槽一下,作者有时候的脑洞,是真的大呀!
所以,综上所述,这个网站到最后能通过的人,真的是百里挑一。
等等,先别说我吹牛逼,看看网站的数据就知道了!
该网站在挑战前会让用户输入自己的昵称,记录在后台数据库中,我们来看看数据:总共有一万多人参与,结果成功通过的人数只有一百人左右,不可谓“百里挑一”吗?!
Bzijk8.png
CTF小技巧The Riddle
刚进去的时候,是这么一个简洁页面
直接阐述了规则,有意思!
BzFn1J.png
简单的填写了自己的用户名后,就可以开始了接下来的挑战闯关了。
其实我刚开始想法很简单,也很偷懒,想想所有的关卡页面都在cipher这个文件夹里面,不如直接用Python爬虫把目录下面所有文件全都爬出来,不就可以直接通关了?!
可是作者也不是吃素的,我的Python爬虫没有起到丝毫作用,看来是作者在这个网站上加入了反爬措施。
有意思,我喜欢。好,既然不想让我们走捷径,那我就一关一关闯过去吧!
大家也可以自己试一下,真的不会了,再来看我的攻略,谢谢各位的捧场!
下一步就直接开始闯关了!

第一关

BzFN1H.png
第一关是真没什么好说的...
诸君看看这过关率...
BzF4H0.png

第二关

BzFjD1.png

法一

BzkYV0.png

法二

简单的代码审计
BzkhxH.png

第三关

BzV0xg.png
让我们看看提示
BzVhzF.png
上面?是哪里呢?
我们自然而然地想到了其网址本身
BzVOJK.png
第三:third
那么第四自然就是fourth啦!
给你给你
BzZCdI.png

第四关

BzZAW8.png
简单的代码审计
BzZ0Fx.png
于是我们顺利地来到了第五关

第五关

BzZhkt.png
什么意思呢?
不如看看标题?
BzZL0s.png
Google is your friend
Bzek7R.png
BzeEA1.png
于是我们来到了第六关
知道你们想要什么

第六关

Bze8AI.png
百度识图不用我多说吧,你们都懂的。
水上由岐
Bzet9f.png
此处起不再提供关卡网址

第七关

Bze2gU.png
这就是第七关...是的,啥也没有...
让我们康康源代码
Bzefu4.png
是的,有图
BzeLvD.png
莫慌!莫慌!
现在要提到CTF中的一个低端小技巧——文件隐写
不知道文件隐写是啥?GLYF...
BzejDH.png

第八关

Bzmn5q.png
再来看看提示 Bzm3MF.png
Bzm6Zd.png
那么思考思考,图片有了,那文字呢?
我们很容易想到,下载图片,转成TXT格式,用记事本打开
在一堆乱码的最下方,我们能看到...
Bzm5QS.png

第九关

BznkJx.png
什么错误呢
代码审计...
BzzVjP.png
诸位发现了吗
指向的value="0"
意味着我们提交的答案将送往第0关
正确代码value="9"

第10关

答案匿于彩蛋里
3vZHC8.png

第10.5关(这该死的彩蛋)

BzzmB8.png
怎么办?
BzzMNQ.png

第11关

Bzz19s.png
是不是觉得有种莫名的熟悉感?
不知道MD5是啥?GLYF...
想要口算MD5?想当大黑阔? 洗洗睡吧
懒得口算,在线解码
BzztBT.png

第十二关

BzzD3R.png
MD5乱码?
很容易想到,将文本转为HTML格式打开
效果如下
Bzz6u6.png
致敬ENIAC!

第十三关

Bzzf4H.png
提示:
BzzIgI.png
a?a对应b!
BzzLVS.png
我们将a换成b,此时图片仍能加载
DSSSvq.png
是不是觉得一模一样?其实不是的
我们将两幅图来回切换,再进行抽帧
DSSVPJ.png

第十四关

DSSGPH.png
于是我们陷入了新一轮懵逼
来看看提示
DSSYRA.png
DSSasP.png
公司?
于是我查了SNSW3IS
此产品出自于西门子,是一种电阻
电阻?欧姆定律?A了A了

第十五关

DSSBdS.png
还真就和图片杠上了!
再看看提示
DSSDIg.png
于是我将其下载,用c32asm以及UltraEdit打开
PNG的文件头是89 50 4E 47
我们可以发现,此gif图用的是png的文件头
不得不说作者丧心病狂
于是我们将文件头换成正常gif的文件头,再进行抽帧
DSS2Mq.png

第十六关

DSSWLV.png
日常懵逼
看看提示
DSSqQ1.png
三维?立体图?裸眼3D?逆向展开?
好奇之下,我选择了裸眼3D
3O1oeH.png
咳咳咳...
可能我是个瞎子...
3O1Twd.png
我摆个角度
3O1qYt.png
还看不清?
3O1XSf.jpg
或者是
3xRpUe.png
还看不清那就算了吧

第十七关

3O3SmQ.png
提示
3O39Ts.png
3O3Ff0.png
世界上有十种人,哪十种人呢?
3O3ElT.jpg
一种是懂二进制的,一种是不懂二进制的
get线索——二进制
我们试着把该十六进制数列转化为十进制
因为提示:七七四十九...说明还要开个方
再将所得数转化为二进制,以七个为一组
1100110
1100110
1100110
0111100
0111100
0100100
0000000
把一提出来建个模...
3O3lfx.jpg
或许可以模糊识别试试百度识图
3O33p6.jpg
像不像!
苦力怕creeper!
天知道我经历了什么...
3O381K.jpg

第十八关

3vVlFK.png
没有输入框,怎么办?

法一

源代码中加入输入

<form action="check.php" method="POST">
<input type="input" name="password" size=20 maxlength=20>
<input type="hidden" name="stage" value="12">
<input type="submit" value="输入"></form>

法二

前往之前的关卡将value改为相应关卡数
详参第九关...

第十九关

3vZSpD.png
已知高7 宽40,static char test bits指的是静态字符测试位,容易想到X BitMap
将16进制转2进制的数据手动格式化后的图像中一的位置提取出来
3veYVI.jpg
然后通过xmb文件格式导出
然后转MPEG图片就得到了
但是图是反转的,怎么办呢
8iYfv8.png
怎么反转了?
应该是bit存放大小端的问题,去改了一下代码,将二进制的数字倒转一下
或者将其填充至8位然后倒转
3vedG8.png
3veDMQ.png

第二十关

3veWGT.png
简单的一个正则表达式
3vehzF.png

第二十一关

3vmCdI.png
仔细看...PHP?不觉得奇怪吗?为什么不是HTML呢?
以下为科普
PHP是服务器,处理脚本,就是从服务器处理数据,转换成HTML展现给你,所以它可以发送动态数据,而非静态html数据
所以我们自然而然地想到了抓包
3vmvt0.png
网址就在抓包里~

第二十二关

3vnt9f.png
是不是在想着复制粘贴?
3vnrEn.gif
当然不可能了
那么怎么办呢?暴力?穷举?
只要将初始化改一下就行啦!
既然它输入框里初始没有密码,那我就给它补上!
3vnT4x.png

第二十三关

3vnqgO.png
你觉得这是个送分题...
3vnLvD.png
提示来了
cookie?仅仅是饼干?
cookie=访问的站点存储在您计算机上的一段信息
那么怎么加入管理员权限?
因为是PHP,于是我们继续尝试抓包
3vui28.png
看到了吗?is admin
既然在此处is admin的value值为0
那我们就将其改为真值
怎么改呢?在哪儿改呢?
当然是console控制台中的creat live expression啦
3vugII.jpg
3vKSL4.png

第二十四关

3vKmOe.png
非常明显的一个进制转化关系
左边看到最大为f很容易想到16进制
右边出现o至少是25进制
写个程序试试?
很容易得出:当右边为30进制时等式成立

第二十五关

3vKcXF.png
容易想到aaencode(颜文字)解密处理
3vMEAs.png
3vMZhq.png
再进行十六进制转字符串
3v10DU.png
进入浏览器控制台,去掉最后一行末尾的('_'),复制加密后的颜文字代码;
在console控制台粘贴你第二步复制的颜文字代码,然后运行

第二十六关

3vl4ts.png
再看看提示
3vlopq.png
我当时直接就懵了
3vlHXT.gif
盲猜base64,得到23734381713242923281
接着我又试了转换,16进制查看,反转,rot13,希尔密码,四方密码,同音密码,A1z26 密码,关键字密码,培根密码,滚动密钥密码,维吉尼亚密码,简单换位密码,栅栏密码,Porta 密码,波利比奥斯方阵密码,普莱菲尔密码,列移位密码,凯撒密码,双密码,博福特密码,埃特巴什码,自动密钥密码,仿射密码,ADFGVX 密码,ADFGX 密码
结果均与9键字母盘无较大关系
于是我将base64所得两两拆分,得到23 73 43 81 71 32 42 92 32 81
很容易发现前一位数字范围是19,后一位数字范围是13
结合9键能发现,前一位数字是键数,后一位数字是字母序数
由此可得CRITPEHXET
但是这显然不是一个单词,根据我的英语功底,TEXT应该放在一起
经过百度可得
3vMm90.png
真是太不容易了QAQ!

第二十七关

3vQoLD.png
经过下载可得
3vQ7ee.png
这时候就要考验我看...咳咳咳
技术处理百度识图可得
3vQOJI.jpg
但是确定没用,怎么办?详参十八关

第二十八关

3vlSOS.png
于是我们百度可得
3vlPoj.png
进一步搜索
3vlVS0.jpg
gotit走你!
日常输入框问题,将size以及maxlength调为5再进行输入,或详参十八关

第二十九关

3v1vqS.png
感谢DWIG小可爱的友情参与~
送分题
镜像翻转

第三十关

3v3nIJ.png
没啥好说的,复制粘贴谷歌一丢~
北约音标字母(英语: NATO phonetic alphabet )
中间只少一个YOU-NEE-FORM
3v30zt.png

第三十一关

3v3rsf.png
将NTVIEO ELESWW XELNTN摆成三行
3v3sL8.png

第三十二关

3v3cdg.png
404 Not Found?果真如此?不如试试百度翻译?
不过这个找不到对象倒是挺真实的...
3v36eS.png
一片空白,看看提示
3v3WJs.png
Are you kidding me???
再来看看另一条提示
3v3fWn.png
识图,全知之眼,怪诞小镇,与之结合的解密是猪圏密码
再将之前的超长base64编码转化为图片,逆向工程
将base64转换成图片 只需要在img 标签中引入即可,注意要加上标明前缀(data:image/png;base64),否则并不知道,这串代码是干啥的
将图片转换成base64 通过canvas.toDataURL将图片转换成base64,需要注意的是,在转换成 dataURL 前必须先确保图片成功加载到,于是.toDataURL()方法应该写在的onload异步事件中
当img的地址存在跨域时,而且服务器不允许跨域,这样是转换不了的,当服务器允许跨域时,前端的图片也要设置跨域image.crossOrigin = 'anonymous'
3v35Q0.jpg
二者相结合,用猪圈密码解析改图
3v3oLT.png
但是具体用那哪一副呢?
经过我的枚举思考
上一组密码对应日志作者符号加密法破译
下一组密码对应比尔符号加密法破译
3v3OY9.gif
不得不说作者脑洞感人至深!

第三十三关

3xDtsg.png
提示
3xDReJ.png
我们先查查标题
用Unicode可知这是锲形文字符号,来自苏美尔语
3xykin.png
进一步搜索
3xySsS.png
读音ni ger,对应nargal
Nergal在古苏美尔语中本意是火星之神即战神,亦为火神,远射之神
有了新线索——火星,苏美尔语
由于苏美尔语以u开头,我们容易想到提示中黑框为u
用Unicode可得
3x6xHg.png
放大
3xgCZD.png
根据提示容易联想到火星,进一步结合提示想到经纬度坐标
于是我们在火星上查找该坐标
3xc25j.png
看这密集度我知道我已经找到了答案
3xg8Wn.png
具体如下
3xgaeU.png
第一个单词小写即为答案

第三十四关

3zzMVO.png
用十六进制乘法转换
196 * 227 = 44492 = 0xadcc = 0xc4 * 0xe3
186 * 195 = 36270 = 0x8dae = 0xba * 0xc3
202 * 192 = 38784 = 0x9780 = 0xca * 0xc0
200 * 203 = 40600 = 0x9e98 = 0xc8 * 0xcb
初步猜测应该是界,毕竟是hello world
我们将左侧先转十六进制,然后再转Unicode
得到
3zzwdS.png
看出来了什么吗?
GBK编码即是左侧十六进制位...
于是我们找到规律后,将c8cb转化为GBK编码
得到答案为"人"
再看看提示
3zzxFe.png
上一关我们用Unicode得到提示
于是我们将"人"转化为Unicode再转十进制得到答案
人=U--4eba(Unicode) = 20154(10)

第三十五关

8SSmWj.png
经过分析可得
以上字母皆为直线所得,并未弯曲
于是我试着百度证实我的猜想
8SSYY4.png

第三十六关

8SSqpj.png
分析可得
正整数n不能表示为a + b + c或a + bc的形式,其中a,b,c是不大于n(包括0 )的正整数
有趣的是这个数列为有限数列
15,55,87,95,143,255,303,447,551,735,1007,1295,2103,2407,3495,5447,5727
我们用求数列通项公式的网站查证
果然
8SpYHf.png

第三十七关

8SpyD0.png
再看看提示
8Sp2UU.png
仔细思考思考
发现密码是A1z26 密码和埃特巴什码的组合密码体
Hold = Slow
Glow = Told
上下为一组
左边是a-1
右边是z-1
Fe N Mn Fe O K
26 7 25 26 8 19
这是对应编号
再将其二次转化
所得答案恰好是埃特巴什的英文
以下为程序描述
8SCKld.png

终极隐藏关卡——EX-1——终章

该关卡藏匿于第三十五关的源代码中
所以说平时要注重养成乱翻原代码的习惯
8SCBmq.png
以下为题干
8SPAjs.png
以下是源代码的惊鸿一瞥...
密集恐惧症请远离
8SPGuR.png
我开始以为是将base64转换成图片
但是此方法于三十二关中曾经出现
我尝试下载了音频
用GoldWave进行波段分析
所得波形如下
8Sigy9.jpg
分析分析
8Si2LR.png
某兄弟一波分析,盲猜成功,理由是字母的饱满程度...
8SioWD.jpg
于是我尝试用频段解析
所得如下
8Sibyd.jpg

结束了,真的结束了

8SiOeI.png
看着终点二字,我却还是下意识地查看源代码
恍惚间想起,游戏已经结束了
一切如同一场梦
5天时间通关,平日除去上课,做作业以及复习时间,都以此为业余消遣
此间也经历过心境的跌宕起伏,人生的大起大落,感情的挫折和对未来的迷茫
但只要静下心来,我就会投身于此

再见,harrynull!

你好,文化课!

2020年,期待在安全峰会&CTF上,与你们相遇

By——H.U.C 无始道长

posted @ 2021-06-08 19:38  无始道长  阅读(637)  评论(0)    收藏  举报