谈谈wechall几道题
Wechall是国外一个著名的解题网站,不说它是CTF是因为Wechall社区更愿意把解题的过程看作一个充满乐趣的挑战,而不只是机械地获取一道flag。
Wechall社区给人的感觉是青春、自由和勇敢,正如其名字所代表的含义:We challenge it!
博主近来在Wechall上刷了一些题,本着技术分享和加深理解的想法,把其中一些认为有教育意义的题拿出来谈谈。
当然,博主现在还是个菜鸡,所以有不对之处请大佬批评指正。
一、math Pyramid
挑战链接:math Pyramid
为什么首先要拿这道题出来说呢?因为我在这里徘徊了很久,最后发现了问题所在:思维惯式。
我们看看这道题的要求:
给出以正方形为底、各边长为a的三角锥体积的计算公式,要求用少于10个字符表示。 题目给出了公式例子并提示了一些符号。
乍一看,这是一道挺简单的数学题啊,我们很容易得出其体积计算公式为
,换成题目要求的形式就是sqrt(2)*a^3/6。
此时真正的问题悄然而至:我们化出的公式有13个字符,而题目却要求用9个甚至更少的字符来表示,然而光一个"sqrt()"就花了6个字符,也就是说我们剩下只有三个字符可用了,然而这三个字符该如何完成公式中剩下的部分呢?你仔细想想。
想好了没有?Enough!Enough!这个问题你想破脑袋都想不出的,因为从一开始我们设想的方向就是错误的:题目中给的提示"sqrt()"是一个误导,这道题借用了思维惯式的力量来打击challenger。
话只能说到这里,剩下的你再想想,说不定会发生意想不到的作用。
二、LSB
题目链接:LSB
第一次做图片隐写,就当开山之作啦,从里面学会的知识有图像格式编码和相关工具的使用。
题目要求:
交代的很清楚,这就是一道Simple隐写术。
首先二话不说,先把它拖进隐写解密工具stegsolve看看,界面是下面这样的:
这个工具的功能集中在analyse,包含的功能有分析文件格式、提取通道数据、图像数据偏移、分帧和组合图像。我们一般用到的功能是提取通道数据,在这里可以根据需要对RGBA模式的四个通道进行数据提取并判断。然而对于这个题,我们使用软件作者提供的快速查找功能就足够了,即下方的翻页键。
我们翻到red plane 1得到flag:
然而我在这里也有点困惑,即red plane 1代表什么东西?是按顺序将红色通道上位1所有值组合在一起构成一张图片?希望以后的学习过程能把这个问题解决,我这里就暂且只知其然了。
三、Programming 1
题目链接:Programming 1
一直觉得编脚本很难,也一直没有入手这个技能,但通过这个问题的解决我意识到:编脚本就是普通的编程,不过是实战而已。
看看题目要求:
要求我们在进入页面受到message后1.337秒之内再次发起一个http请求,并附带我们收到的message。很明显,这道题靠手速是完不成的,而且既然题目名称也暗示了“编程”,那我们就编个小脚本吧。
废话不多说,直接上脚本(我写了注释的哦):
import urllib.request #python内置的urllib库,用于http通信
url1='https://www.wechall.net/challenge/training/programming1/index.php?action=request'#存放消息的第一个url
url2='https://www.wechall.net/challenge/training/programming1/index.php?answer='#我们要在1.337秒内发起请求的url
#第一次请求
request1=urllib.request.Request(url1)
request1.add_header('cookie','WC=12161905-47396-jrAE31POHPrfCHB8')#别忘了带上你的cookie
data1=urllib.request.urlopen(request1).read().decode('utf-8')#解码数据:通过测试验证,url1返回的数据只包含message,省事了
print("the message is %s"%data1)
#第二次请求
url2=url2+data1#拼凑到url2上
request2=urllib.request.Request(url2)
request2.add_header('cookie','WC=12161905-47396-jrAE31POHPrfCHB8')
data2=urllib.request.urlopen(request2).read().decode('utf-8')#一样的过程。
print("send the message %s again!"%data1)
print("the new data is a html file,show you below!")
print(data2)
然后咱看看效果: