CISCN-信安国赛2018-部分Write up

CISCN-信安国…

内容纲要

Web

Web1-easyweb

进入网站是一个注册登录系统,随便注册试一下,会发现有提示。
Hello winterwind only admin can get the flag.

显然,要登入admin账户。

首先,试了一下弱密码,跑了国内外top1000,未果。

burp抓包后发现TWF token机制,构造了很久,未果。

最后,仔细审查源代码,发现关键句:

<input type="text" class="text" name="username" value="USERNAME" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'USERNAME';}" >
<input type="password" name="password" value="PASSWORD" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Password';}">

哦,不输入直接登,会有默认情况。不符合常理,一定有猫腻。
然而根究之后,并没有试出什么东西。
很久很久之后,偶然想到与自动填充相对的空密码,试了一下。。。。出flag了。。。。

总结,这题脑洞有些过分了。

Crypto

flag_in_your_hand

给了一个HTML和一个js,首先打开HTML测试,发现需要输入什么东西,应该是需要有什么输入规则,不然一直会是wrong。定位HTML中关键逻辑:

t.innerText = !!ic ? "You got the flag below!!" : "Wrong!";
t.className = !!ic ? "rightflag" : "wrongflag";

显然,ic又是其核心函数。定位js中ic部分。发现关键函数:

function ck(s) {
    try {
        ic
    } catch (e) {
        return;
    }
    var a = [118, 104, 102, 120, 117, 108, 119, 124, 48, 102, 108, 118];
    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;
}

逻辑为,输入字段的每个字符都是函数给定ascii值减3.

即115, 101, 99, 117, 114, 105, 116, 121, 45, 99, 105, 115 ------> security-cis

MISC

验证码(签到)

根据题面进行验证,即得flag。

PICTURE

打开题目文件,是一个图片,首先自然是用Stegsolve尝试读取LSB隐写等。结果并没有。
而后使用binwalk分析之,得到两个文件,一个名为97E4,一个名为97E4.zlib。
97E4文件内为一串base64

S1ADBBQAAQAAAGUwl0wtPcPgWgAAAE4AAAAEAAAAY29kZS98KMIGU7Jmpd5kBX83kKJYlZ34RSBrrBV+1lA1/oH0aPK88qlc1y9zeAtbjg2CoGWI99yuY6DFpZNCimACVTsP/vxhc+zn7n+ywHDBqrYve5TWlaMCZAF2aVBLAQI/ABQAAQAAAGUwl0wtPcPgWgAAAE4AAAAEACQAAAAAAAAAIAAAAAAAAABjb2RlCgAgAAAAAAABABgAAGNys4Xa0wF6lP2sh9rTAXqU/ayH2tMBUEsFBgAAAAABAAEAVgAAAHwAAADcAFtQeXRob24gMi43XQ0KPj4+IKh9qH2ofQ0KDQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6DQogIEZpbGUgIjxweXNoZWxsIzA+IiwgbGluZSAxLCBpbiA8bW9kdWxlPg0KICAgIKh9qH2ofQ0KWmVyb0RpdmlzaW9uRXJyb3I6IKh9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofah9qH2ofSA8LSBwYXNzd29yZCA7KQ0KPj4+IAA=

解码之,发现前半部分乱码,后半部分为python报错。

解码为16进制,发现有些怪异,最开始的两位是4b 50
zip文件头应当为50 4b,修改之,16进制save,得一压缩包。

压缩包有注释:

[Python 2.7]
>>> ▆▆▆

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

显然,password指向的即密码,搜索ZeroDivisionError,得错误具体解释:
integer division or modulo by zero
用之以压缩包密码,解出文本如下:

begin 644 key.txt
G0TE30TY[1$%!.31!03`V-C$R.40W,S)"13!!-#=#131!-3E$.3)]
`
end

检索此密文格式,得uuencode/xxencode,uuencode解密即得flag。

harmoc
2 COMMENTS
  • cpr
    回复

    为什么picture这道题一定没法打开解压包呢?

    1. harmoc
      回复

      表哥能打开?
      可能题目有多解,赛后和人交流,有人用python的zlib模块也可以导出压缩包。
      个人也不太清楚base64解码后的16进制表示4b 50究竟是题设还是什么。

回复 harmoc 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注