ASIS-CTF-Quals-2014-Undistorted-History/Hidden-flag-Writeup

Trivia 1 Undistorted History

说明

Description
What is the name of this place?
No need to calculate md5 or appending ASIS_

之前没想那么多,根据history和name这两个关键字,再联想到这个比赛是伊朗的,我第一时间想到的是耶路撒冷、波斯、伊朗等关键词,感觉前两个有历史感,后一个很直接。但都不对。
后来发现题目还以地图的形式给出了一遍,这才恍然大悟,这个题目的位置在波斯湾上(研读了一会地图发现的)

01.jpg

于是填波斯湾的英文名字就对了。

Web 75 Hidden flag

说明

(空)

卧槽这题没有说明?逗我吗,什么都没有怎么做?但题目是hidden flag,隐藏的flag,在做其他题的过程中,我们就发现所有题目的数据包都会返回一个X-Flag头:

02.jpg

值是一个flag,但其中有4个字符是问号。之前不知道这个x-flag是啥意思,就没管,现在这题放出来以后,大概就能猜到,这个x-flag可能就是这题的解。
但那4个字符怎么解?
在之前做题的过程中我也观察过这个网站提交flag的方法:现在本地用javascript验证一遍,然后通过ajax发送给服务端验证。
所以我就可以想到,我们可以通过javascript暴力穷举一下这个flag缺失的4个字符。
借用这个网站自己写的javascript代码,我再修改一下,就弄出了一个穷举的脚本:

<script src="sha256.js"></script>
<script>
    var str = "0123456789abcdef";
    var md5 = ["ASIS_b6b", "244608c2", "c2e869cb56", "67b64", "b1"];
    for(var a = 0; a < 16 ; a++){
        for (var b = 0; b < 16; b++) {
            for (var c = 0; c < 16; c++) {
                for (var d = 0; d < 16; d++) {
                    var en = md5[0] + str[a] + md5[1] + str[b] + md5[2] + str[c] + md5[3] + str[d] + md5[4];
                    var shaObj = new jsSHA(en, "TEXT");
                    var hash = shaObj.getHash("SHA-256", "HEX");
                    var shaObj2 = new jsSHA(hash, "TEXT");
                    var hash2 = shaObj2.getHash("SHA-256", "HEX");
                    if (hash2 == "2b127c77074e44b6e74074b1eb8d32dfe27fe78e6a05e302baed68e2cc643ca1") {
                        document.write(en);
                    };
                };
            };
        };
    };
</script>

其中“2b127c77074e44b6e74074b1eb8d32dfe27fe78e6a05e302baed68e2cc643ca1”是原文经过两次sha256计算以后的结果,在html中可以找到。
我把x-flag按照?分成了5部分,装在一个数组中:["ASIS_b6b", "244608c2", "c2e869cb56", "67b64", "b1"]
然后写了4层嵌套的循环,来穷举4个缺失的字符。一旦找到结果,就用document.write打印在屏幕上。
得到Flag:ASIS_b6be244608c27c2e869cb56167b649b1

@phiti0n le4f ::TEAM L::

tagged by none  

Comment Closed.

© 2014 ::L Team::