光棍节程序员闯关秀过关攻略
第1关
查看源代码,发现a标签的颜色和背景色一样,导致了我们看不到a过关地址,方法很简单,直接复制源代码中的key即可,或者ctrl+a然后单击进入下一关即可
http://1111.segmentfault.com/?k=91f546c97235a8f199b50731ded6d4e2
或者将color的属性改为#fff,让其显示为白色。
第2关
查看源代码,发现key:1a434a0eacab73b208320061809d46c9,填入表单,然后回车即可过关。
这个是将key写在代码注释里面。
http://1111.segmentfault.com/?k=1a434a0eacab73b208320061809d46c9
第3关
使用live header等工具抓包,即可在http请求头中发现The-Key-Is: a87ff679a2f3e71d9181a67b7542122c
或者用Chrome审查调试工具,查看Network下面的请求头文件,发现如上代码。
http://1111.segmentfault.com/?k=a87ff679a2f3e71d9181a67b7542122c
第4关
提示"观察你密码的规律",看一下第4关的地址k=a87ff679a2f3e71d9181a67b7542122c,应该是md5加密,去cmd5解密得到4,那么下一关应该是5,再用cmd5加密“5”得到:e4da3b7fbbce2345d7772b0674a318d5
http://1111.segmentfault.com/?k=e4da3b7fbbce2345d7772b0674a318d5
第5关
看上去是一个二维码图片,但是对于安全人员来说肯定要下载回来看看图片里面内容了,果然密码在图片中隐藏着。将图片下载下来,并改为TXT文本文件,打开发现如下内容:
http://1111.segmentfault.com/?k=bdbf46a337ac08e6b4677c2826519542
第6关
过关tips:f4de502e58723e6252e8856d4dc8fc3b,百度搜索之,即可发现制作者发了个微博,里面就有key:1573402aa6086d9ce42cfd5991027022
http://1111.segmentfault.com/?k=1573402aa6086d9ce42cfd5991027022
第7关
搜索了一下,没有结果,把f8442620d3516e05066e7c792dcc41fe放入url中,秒过。。。。不要相信制作者的鬼话。
http://1111.segmentfault.com/?k=f8442620d3516e05066e7c792dcc41fe
第8关
其实已经给出了答案,复制key却发现走不通。这里有个input框,但是没有提交按钮,这个可以很好绕过,直接回车提交,不成功,也许是提交方法问题,果断改GET为POST提交,或者改type属性为submit,再点击按钮。
http://1111.segmentfault.com/?k=f8442620d3516e05066e7c792dcc41fe
第9关
这一关是最难的,我也是花了好长时间才过的,看到0110____,大家肯定知道是要补全0或者1才可以的,到底要怎么补呢,既然是双11,肯定全补1,最后证明,是对的。。
解密思路:
替换所有的____为1111,然后再把2进制转换为10进制,然后把10进制转换为char编码,会得到一段Base64密文,再把此密文解密为一个tar.gz的文件即可。
那么问题来了,怎么实现这个思路。下面带来两种解密方法:
一、基于PHP的解密:
直接上代码,保存为PHP文件再运行。这里需要将网页的所有0101的代码复制到一个文本文件,并命名为1.txt,和PHP文件放在同一个目录下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<!DOCTYPE html> <html> <body> <?php $file = '1.txt'; //文件地址 $content = file_get_contents($file); //读取文件内容 //echo $content; $content=str_replace("_","1",$content); //把_替换成关棍节的1 $content=str_replace("\r\n"," ",$content); //把换行替换成空格,因为下面以空格取字符串 $array = explode(" ", $content); //以空格为间隔变成数组存储字符串 //print_r($array); for($i=0; $i<count($array); $i++) { //echo $array[$i]."<br>"; $con10=bindec($array[$i]); //把二进制转为十进制 //echo $con10."<br>"; $baseii.=chr($con10); //把十进制转为ascii,由于chr函数不支持二进制 } //echo chr(52); //echo $baseii; $base64=base64_decode($baseii); //解码base64函数 $file2='2.txt'; if($k=fopen($file2,"w")) //打开文件 echo "open file success"."<br>"; fwrite($k,$base64); fclose($k); if(rename($file2,"targe.tar.gz")) //修改后缀为tar.gz echo "rename success"."<br>"; ?> </body> </html> |
二、基于Python的解密
这里需要预处理一下网页中的0101,需要将_这个字符全部换为1.放在bin后面的引号中。
1 2 3 4 5 6 7 |
import base64 bin = '''这里填写那一大段0101代码''' binTochar = [chr(int(x, 2)) for x in bin.strip().split()] print ''.join(binTochar) keyFile = open('key.tar.gz', 'wb') keyFile.write(base64.b64decode(''.join(binTochar))) keyFile.close() |
打开最终生成的压缩文件,发现里面有个图。 这个图上面的代码,就是最终的key啦。
http://1111.segmentfault.com/?k=e4a4a96a69a1b2b530b3bec6734cdf52
制作者还不忘打一波广告。
最后这只是我ctf生涯的第一步,以后有什么好玩的还会写出自己的见解。
CTF——Capture The Flag.