2018全国大学生信息安全竞赛创新能力实践赛线上初赛Writeup

 Qiqi's Blog     2018-04-29   3128 words    & views

2018全国大学生信息安全竞赛创新能力实践赛线上初赛部分wp

在写wp之前,先让我好好吐槽一下本次国赛吧

通过这次比赛让我深深的感受到了这世界已经没有web狗的出路了

让我们来感受一下赛题分配情况

一次比赛,就三道web,一道脑洞,一道pwn,还有一道web

整场比赛web就一道,web2完全不知道干嘛(可能是我太菜了,不过这题从昨天早上放出来以后一直到今天下午比赛结束都没有一个队做出来,等官方wp吧),让我说什么好呢

说是和国际接轨,国外的小型CTF比赛,难道没有web吗,题型分配总体来说也还很平均

我感受到了出题人对我们web的深深恶意,我也十分怀疑web题是pwn手出的

一直到今天上午web都只放出来两题,第三题好不容易放出来,服务器又崩了,你放题又不让人进,还不如不放,真是能把人气死

然后就是选择题了,比赛前有人怀疑说服务器挺得住吗,主办方:没问题,妥妥的

结果,小虽然想到很卡,但没想到竟然卡成那样,提交答案提交不了,下一题下不去,不是502就是504,下一题终于进去了,发现早就不是下一题了,下好几道题了,呵呵~

做题期间也是十分有趣了,这或许是整个比赛最有意思的了,比赛讨论群疯狂刷屏,各种表情包,瞬间上了知乎,当然,相信本次比赛收获最大的就是华为云了,分分钟宕机

好在主办方重新放题,让大家能安静的做完选择题

好了,吐槽就到这里,吐槽就是让大家娱乐一下,也好让自己发泄一下

下面才是重点

验证码###

签到题,还以为真的是验证码破解,手输一个直接得flag

flag_in_your_hand###

这题首先是检查你输入token是否正确,正确ictrue,不正确为false

然后他会拿着你输入的这个token去进行一系列的解密,加密数据是他自己里面有的,所以第二行返回给我们的东西就是我们解密出来的东西,如果token不对,解出来的自然也是不对的

所以我们只要去看检查token是否正确的那个函数就好了,也就是那个ck()函数

代码如下:

function ck(s) {
    try {
        ic
    } catch (e) {
        return;
    }
    var a = [118, 104, 102, 120, 117, 108, 119, 124, 48, 123, 124, 105];
    if (s.length == a.length) {
        for (i = 0; i < s.length; i++) {
            if (a[i] - s.charCodeAt(i) != 3)
                return ic = false;
        }
        return ic = true;
    }
    return ic = false;
}

这个算法就很容易了,我们只要把a中的每个元素的值减去3,然后转乘字符就好了,解出来是security-xyf

提交得到

返回的即为flag

web1

这题的意义是什么,一开始以为是sql,但发现被过滤的死死的,控制也很严格

后来发现了token,以为点在token上,base64解码看到了jwt,于是看了几个小时的jwt,想方设法构造无果

结果是弱口令爆破,密码为空~,好吧我认输

这种题也能叫web?如果作为脑洞题,我给你满分。。。

这里附上jwt的文章吧,也算是这道web1让我唯一收获的东西吧

JWT token破解绕过

JSON Web Tokens

什么是 JWT – JSON WEB TOKEN

picture###

这道题也是要有点脑洞

首先尝试了各种办法,无果

binwalk -e分解一下zlib压缩包

得到一个文本文件,里面是一段base64编码的字符串

S1ADBBQAAQAAAIMwl0wE2cZAWgAAAE4AAAAEAAAAY29kZUbjTtlCCTZXV28psKcFHwPCCBQeOmdVbGsB6KQ75NRMEN2qxlS39qaqepbd8drVGxtOx4Qj6pPXEg0m6JL6OiO62JMiqNC6f+OuLiY3q70/Govzdnwgv2bFjlBLAQI/ABQAAQAAAIMwl0wE2cZAWgAAAE4AAAAEACQAAAAAAAAAIAAAAAAAAABjb2RlCgAgAAAAAAABABgAAE/T1IXa0wEgMvush9rTASAy+6yH2tMBUEsFBgAAAAABAAEAVgAAAHwAAADcAFtQeXRob24gMi43XQ0KPj4+IKh9qH2ofQ0KDQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6DQogIEZpbGUgIjxweXNoZWxsIzA+IiwgbGluZSAxLCBpbiA8bW9kdWxlPg0KICAgIKh9qH2ofQ0KWmVyb0RpdmlzaW9uRXJyb3I6IKh9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofSA8LSBwYXNzd29yZCA7KQ0KPj4+IAA=

解码一下得到

&��:#�ؓ"�к�.&7��?��v| �fŎPK?�0�L��@ZN$ codeT��z�����DŽ#��
 O�ԅ�� 2��� 2���PKV|�[Python 2.7]
>>> �}�}�}

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    �}�}�}
ZeroDivisionError: �}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�} <- password ;)
>>>

在最后我们看到了password字样,还有个箭头指向ZeroDivisionError后面那一串乱码,联想到题目提示:密码在图片里,于是猜想那一串乱码就是我们想要的密码

google了一下ZeroDivisionError,说是除0错,又是Python 2.7

我们自己去交互行下试一下

密码应该就是interger division or modulo by zero

自己一开始以为这就是flag了,然后一通乱试,提交flag,发现都是错的

然后队里师傅说,还有个zip压缩包,我这才想起来解码出来的东西里面还有PK这个东西(还是太菜了)

于是将解码出来的字符串16进制编码,并用16进制形式保存

打开,发现文件头损坏,将4B500304修改为504B0304,保存为zip格式

打开压缩包需要密码,将我们刚刚获得的密码输入进去,成功解压得到code 2文件,16进制编辑器查看,获得flagCISCN{93C65C807C3800B15F3600D449C64692}

别的同学说打开没有flag,得到的是这样一个东西

begin 644 key.txt
G0TE30TY[.3-#-C5#.#`W0S,X,#!",35&,S8P,$0T-#E#-C0V.3)]
`
end

这是经过了uu编码,还要再进行一次解码

G0TE30TY[.3-#-C5#.#`W0S,X,#!",35&,S8P,$0T-#E#-C0V.3)]

将这串解码一下就行了,同样获得flag

总的来说,第一次参加国赛,可以说是体验感极差了