首届“神盾杯”上海市网络安全竞赛,去年的比赛。

0x00 babyJS

操作内容:

查看源码 找不到被调用的CheckLogin函数

/img/19shendun/image1.png

看到script中有用到unespaceescape等函数 用于编码字符串

eval传参改为alert 显示为弹窗

/img/19shendun/image2.png

发现check函数 并将flag与用户输入做比较 得到flag

/img/19shendun/image3.png

FLAG值:

flag{a5a5f402f6dc62acd3e848900a17513f}

0x01 crypto_easy_1

操作内容:

下载文件

/img/19shendun/image4.png

发现3行类似的数据 并且长度一致。

:左边的长度为42 右边的长度为56 ,猜测右边被base64编码过 进行解码 比较长度

/img/19shendun/image5.png

长度一致 为42

异或运算一下 可以得到Key随后将key代入 与base64解码后的密文异或比较 得到flag

解密脚本如下:

import base64
x = 'v6"wo5UIP9c4IdCk1o6qZhhB5DKZhVBwBzONl1JRIz:TwB2RyZYBCEVbjBjID17UkUeeDAwPBh1dg86AyAgcSQ4QygYGnAuJQYw'
y = 'zjS0ubQE2hw29FL2qs61ZNOVyFaf6IAjUZ7X8ijuVg:Q1wHADwPAC13PyRlUB90CwUCeHAwGj9hOg0QP34/cjkvY1AOTigOAhkt'
z = 'pJryZpVUNpSFi06WlKGkS0Uka6zw1sNCX"h2urQoyg:SXwmSRMdBz0LJwARAGkObhg6CSo5ZCVcIn0LLnkFfRAiGw9kAzM1GDYt'
a, b = x.split(':')
c, d = y.split(':')
e, f = z.split(':')
b = base64.b64decode(b)
d = base64.b64decode(d)
f = base64.b64decode(f)
g = base64.b64decode('X1o1VzIPaVgjbmNvCnQAC0ZHY3BbMUkaeylDYWVOCzZDXwJjR3hTFiw3')
flag = ''
for  i in range(42):
    t = ord(a[i]) ^ ord(b[i])
    flag += chr(ord(g[i]) ^ t)
print(flag)

FLAG值: