看雪.纽盾 KCTF 2019 Q3 | 第五题点评及解题思路
2019-09-29 18:58:00 Author: mp.weixin.qq.com(查看原文) 阅读量:52 收藏

太阳升起又落下。若有若无的淡香飘散在战场,身影像舞蹈般风中摇曳,绽放出鲜血之花。舞姬貂蝉,迎着四散的逃兵寻找熟悉的身影。
战神吕布,果然是不可战胜的吗?你在哪里?貂蝉焦急的寻觅着。却不知道,他们正离得越来越远。
我在光明中起舞,你是我的烛之影。你在黑暗中厮杀,我是你的月之影。清风拂过山丘,扛着龙枪的男人回首战场。遍地死尸,血腥弥漫,这熟悉的味道,就像我们初遇的地方。

题目简介

本题共有1128人围观,最终只有17支团队攻破成功。在比赛过程中各个战队争分夺秒,对题目发起强力进攻,每分每秒都会产生巨大的变化。
攻破此题的战队排名一览:
这道题也十分有趣,接下来我们一起来看一下这道题的点评和详细解析吧。
看雪评委crownless点评
题目采用了梅森翻转算法、xxtea加密算法,设置了四个“迷宫”,最后还有3DES加密。总的来说,这道题考查的范围比较广泛,需要破解者有较多的经验。


出题团队简介
本题出题战队 只会签到题的蒻鶸:
只会签到题的蒻鶸团队成员只有签个到跑路了一个人,但实力依然不容小觑,下面是相关简介:

练习一年半的广州某技校本科生,除了签到题什么都不会的逆向蔡鸡,求大佬带。



设计思路

>>>>

加密过程

输入一个字符串,第一个check,check长度是否小于等于48,第二个check使用了梅森翻转算法、xxtea加密算法,check字符串的第一个字节,以第一个字节作为随机数种子,由梅森翻转算法得到三个32bits整数,将第一个、第三个整数通过xxtea加密,密钥直接给出,为{0X67452301, 0XEFCDAB89, 0X98BADCFE, 0X10325476}。
得到的结果相加得到v,由梅森翻转算法得到的第二个整数减去v得到res,检查是否等于2768546039,梅森翻转算法得到的随机数可预测,xxtea可逆,但是sn限定字符集为[33,126],直接正向爆破秒解。
第三个check,check输入的字符串与"Welcome/to/this/very/simple/challenge"相加之后的md5是否等于44e4403b63620a2075d3fb2e0a6207d2,此处不可逆,主要是check长度,直接跳过上面的check逆下面的算法就可以得到sn,所以直到此处所有的check几乎都是无用的,纯属误导。
 
以下是真正的check且可逆,首先程序将输入的字符串取前36个字节base64decode,得到decode后的字节,应为26bytes,(此处暴露了sn长度应该为36个字节),之后对这26个字节进行分割,分割为v1,v2,v3,c,分别为6、6、6、8个字节,对输入的36个字节的前二十四个进行分割,分割为key1,key2,key3,均为8字节,之后进行3DES解密,密钥为key1key2key3,密文为c,即des_decrypt(key3,c),des_encrypt(key2,c),des_crypt(key3,c)。
最终得到的c为8字节明文,这里视为v4,之后是md5校验(此处如上所说并没有用),最终的校验是4个迷宫check,将上述得到的v1,v2,v3,v4分别送入迷宫check,正确的话预设值+1,最终检验预设值是否为4,即四个迷宫都要走完,迷宫均为13*13矩阵,起点为'@',终点为‘#’,除第一个显示给出外,其余三个均为在第一个迷宫的基础上动态生成。

>>>>

解题思路


去混淆,整理出四个迷宫,依据迷宫规则推导出v1,v2,v3,v4,其中v1、v2、v3为6bytes,v4为8bytes,前三个迷宫有且只有一条长度为18的路径,第四个迷宫有且只有一条长度为24的路径,至于v1、v2、v3、v4的长度由程序可以直接得到,根据迷宫规则目测即可非常快速的得到路径,也可写脚本得到。
之后对v1、v2、v3分别进行base64encode得到key1,key2,key3,对v4进行3des加密,密钥为key1,key2,key3,最后对得到的结果c进行base64encode得到一个12bytes的字符串,将key1,key2,key3和c拼接就可得到长度为36bytes的sn。
四个迷宫分别为:
maze1:
*************
*@***********
*-***********
*--**----****
*-***-**-****
*-***#**-****
*--*****-****
**-*****-****
**-------****
**-*-----****
**---**-*****
**-****--****
*************
 
maze2:
*************
*@***********
*-***********
*-***-**-****
*--**----****
*-***#**-****
*--*****-****
**-*****-****
**-*-----****
**---**-*****
**-------****
**-****--****
*************
 
maze3:
*************
*@***********
*-***********
*-***-**-****
*--*****-****
*-***#**-****
*--**----****
**-*****-****
**-****--****
**---**-*****
**-*-----****
**-------****
*************
 
maze4:
*************
**-------****
*--*****-****
*-***-**-****
*--*****-****
*-***#**-****
*-***-**-****
*-***-**-****
*--**----****
**---**-*****
*--*****-****
*@***********
*************
很容易得到四个迷宫的最短路径为:
ssss sdss dddd ddww wwwa aass
 
ssss sdss sddw dddd wwww aaas
 
ssss sdss sdds dddw wdww aaaw
 
wdww awww wwwd wddd ddds ssss ssaa awww

迷宫规则为00 w 01 s 10 a 11 d。
 
所以可以得到4个迷宫check的内容分别为:
v1 = b'\x55\x75\xff\xf0\x02\xa5'
 
v2 = b'\x55\x75\x7c\xff\x00\xa9'
 
v3 = b'\x55\x75\x7d\xfc\x30\xa8'
 
v4 = b'\x30\x80\x03\x3f\xfd\x55\x5a\x80'

接下来就是DES3加密了。

key为base64encode(v1+v2+v3),
m为v4 
sn = key + base64encode(v4)
import base64
from Crypto.Cipher import DES3
from hashlib import md5
 
v1 = b'\x55\x75\xff\xf0\x02\xa5'
v2 = b'\x55\x75\x7c\xff\x00\xa9'
v3 = b'\x55\x75\x7d\xfc\x30\xa8'
v4 = b'\x30\x80\x03\x3f\xfd\x55\x5a\x80'
key = base64.b64encode(v1+v2+v3)
print('key:',key)
print('m:',v4)
c = DES3.new(key, DES3.MODE_ECB)
cipher = base64.b64encode(c.encrypt(v4))
sn = key + cipher
assert(md5(sn+b'Welcome/to/this/very/simple/challenge').hexdigest() == '44e4403b63620a2075d3fb2e0a6207d2')
print('sn:', sn.decode())

get sn:VXX/8AKlVXV8/wCpVXV9/DCogeWKJMtrmeY=

杂杂碎:
其实原本的打算是将前面的一些算法也运用在check里面,但是如此将变成算法的堆叠,感觉没多大意思,还有一点就是本来是打算魔改下DES3的,但是由于时间的问题所以也未果了(其实还是太菜了),大佬们都tql,一下就被秒了!

解题思路
本题解题思路由看雪论坛 KevinsBobo 提供:
题目分析
1. 往输入后面追加一段字符串Welcome/to/this/very/simple/challenge,输入的字符串加上这段内容大小不能超过0x55。
2. 调用btea加密算法验证输入的正确性。
3. 将输入的内容做base64解码,若输入中有等号且等号位置小于等于35,则只解析等号及前面的数据,否则只解析前36位数据。
4. 将输入的base64字符串分成0-8、8-16、16-24,再分出base64解码后的18位之后的部分。

5. 有两个加解密函数,猜测是魔改des,因为搜其使用的数据表搜到了看雪很早前的一篇破解魔改des的文章,怀疑是作者留下的线索。在这里暂且称f_des_opt_01为加密函数,f_des_opt_02为解密函数。

6. 根据上图可以看出:

先将base64解码的数据18位以后的数据用base64字符串的16-24位的数据作为key加密;
18位以后的数据用8-16位的数据作为key解密;
18位以后的数据用0-8位的数据作为key加密;
7. 有了以上的推断,当需要反推数据时,直接调试,替换加解密函数的参数就可以反向操作了。
8. 然后就是走迷宫的操作了,识别迷宫是通过找到迷宫字符串数据后,结合使用时采用map[][13]二维数组的方式,推测出是迷宫地图。

9. 使用MD5校验放多解
找出迷宫

1. 在main函数前利用全局变量注册了一个初始化函数,里面给第一个迷宫赋值,并且也给防多解用的md5字符串赋值。


2. 迷宫走法

3. 通过调试抓出几次变换后的迷宫,一共四组,结合上面的代码可以看出,@代表移动的对象,#代表终点。

1
*************
*@***********
*-***********
*--**----****
*-***-**-****
*-***#**-****
*--*****-****
**-*****-****
**-------****
**-*-----****
**---**-*****
**-****--****
*************
2
*************
*@***********
*-***********
*-***-**-****
*--**----****
*-***#**-****
*--*****-****
**-*****-****
**-*-----****
**---**-*****
**-------****
**-****--****
*************
3
*************
*@***********
*-***********
*-***-**-****
*--*****-****
*-***#**-****
*--**----****
**-*****-****
**-****--****
**---**-*****
**-*-----****
**-------****
*************
4
*************
**-------****
*--*****-****
*-***-**-****
*--*****-****
*-***#**-****
*-***-**-****
*-***-**-****
*--**----****
**---**-*****
*--*****-****
*@***********
*************

4. 找出四组迷宫的走法。

0 上
1 下
2 左
3 右
第1次
1111
1311
3333
3300
0002
2211

第2次
1111
1311
1330
3333
0000
2221

第3次
1111
1311
1331
3330
0300
2220

第4次
0300
2000
0003
0333
3331
1111
1122
2000

反推答案
1. 由前面的拆分和加解密可得知,输入的base64字符串的前24位是不变的,需要变化的是24位之后的数据。
2. 将第四组迷宫的走法数据和每次对应的分解出的key数据整理出来,调试时按照相反操作放入到魔改des的加解密操作函数中,执行的结果就是反推出的数据;具体操作就不截图了,反推结果如下。
key data
VXX/8AKl 30 80 03 3F FD 55 5A 80  解密
VXV8/wCp 3F 33 22 50 73 E7 DE 50  加密
VXV9/DCo A7 E9 5A 25 48 CA 28 96  解密
==>
81 E5 8A 24 CB 6B 99 E6

3. base64_encode(第一组迷宫的走法数据 + 第二组迷宫的走法数据 + 第三组迷宫的走法数据 + 解密后的数据) = key。
55 75 FF F0 02 A5 55 75 7C FF 00 A9 55 75 7D FC 30 A8 81 E5 8A 24 CB 6B 99 E6
VXX/8AKlVXV8/wCpVXV9/DCogeWKJMtrmeY=

- End -

往期赛题

* 看雪.纽盾 KCTF 2019 Q3 | 第一题点评及解题思路

看雪.纽盾 KCTF 2019 Q3 | 第二题点评及解题思路

看雪.纽盾 KCTF 2019 Q3 | 第三题点评及解题思路

看雪.纽盾 KCTF 2019 Q3 | 第四题点评及解题思路

合作伙伴


上海纽盾科技股份有限公司(www.newdon.net)成立于2009年,是一家以“网络安全”为主轴,以“科技源自生活,纽盾服务社会”为核心经营理念,以网络安全产品的研发、生产、销售、售后服务与相关安全服务为一体的专业安全公司,致力于为数字化时代背景下的用户提供安全产品、安全服务以及等级保护等安全解决方案。

进阶安全圈,不得不读的一本书

公众号ID:ikanxue
官方微博:看雪安全
商务合作:[email protected]
“阅读原文”一起来充电吧!

文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458299304&idx=1&sn=f723aede5a316d9c4920834357bedbf8&chksm=b1819b2286f6123452c1f43bd103a9576d0b6812ddda1996b0dbb714542db48f9ff1979b2a8d#rd
如有侵权请联系:admin#unsafe.sh