日拱一卒--bugku之江湖魔头

参考链接:https://blog.csdn.net/qq_2589...
题目链接:http://123.206.31.85:1616/
日拱一卒--bugku之江湖魔头_第1张图片
但是代码看不懂,网上查攻略说是被压缩混淆了,找到一个在线解密的网站:https://tool.lu/js/
解密后的代码如下:

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i].trim();
        if (c.indexOf(name) == 0) return c.substring(name.length, c.length)
    }
    return ""
}
function decode_create(temp) {
    var base = new Base64();
    var result = base.decode(temp);
    var result3 = "";
    for (i = 0; i < result.length; i++) {
        var num = result[i].charCodeAt();
        num = num ^ i;
        num = num - ((i % 10) + 2);
        result3 += String.fromCharCode(num)
    }
    return result3
}
function ertqwe() {
    var temp_name = "user";
    var temp = getCookie(temp_name);
    temp = decodeURIComponent(temp);
    var mingwen = decode_create(temp);
    var ca = mingwen.split(';');
    var key = "";
    for (i = 0; i < ca.length; i++) {
        if (-1 < ca[i].indexOf("flag")) {
            key = ca[i + 1].split(":")[2]
        }
    }
    key = key.replace('"', "").replace('"', "");
    document.write('');
    setTimeout(function() {
        document.getElementById("attack-1").src = "image/1-2.jpg"
    }, 1000);
    setTimeout(function() {
        document.getElementById("attack-1").src = "image/1-3.jpg"
    }, 2000);
    setTimeout(function() {
        document.getElementById("attack-1").src = "image/1-4.jpg"
    }, 3000);
    setTimeout(function() {
        document.getElementById("attack-1").src = "image/6.png"
    }, 4000);
    setTimeout(function() {
        alert("你使用如来神掌打败了蒙老魔,但不知道是真身还是假身,提交试一下吧!flag{" + md5(key) + "}")
    }, 5000)
}

好看多了,看到有两个函数用来解密cookie里的值,先decodeURIComponent一下,再decode_create一下,就出来了,先看一下cookie解密后是啥:
图片.png
这下思路就清晰很多了,就是把银子数修改掉再加密回去,替换掉原有的cookie值,骗过后台,学会如来神掌,干掉魔头,拿到flag。
先进行第一重加密,根据decode_create的代码写出加密代码如下:

var result3 = "";
    for (i = 0; i < a.length; i++) {
        var num =a[i].charCodeAt();
        num = num + ((i % 10) + 2);
        num = num ^ i;
        result3 += String.fromCharCode(num)
    }

解密是先异或再减,加密就是先加再异或,之后变成这样:
图片.png

你可能感兴趣的:(ctf,安全)