江湖魔头-BugkuCTF平台

江湖魔头-BugkuCTF平台(详细)

网上的教程感觉都只教一半,来个详细的。
尝试了很多不知道怎么做,Burp抓到的Cookie的内容Base64也解不出,只知道要购买如来神掌去讨伐老魔,但银两来的太慢了。后来百度才有了解题思路。

脑洞,网址删掉后面的?action内容,只保留wulin.php,查看源代码得到几个js文件。

昶

script.js的部分内容如下。需要先js解密。

推荐网址 https://tool.lu/js/ 进行解密。
昶
先按照上图红框代码内容执行一下
昶

Cookie里的内容按照所给解密方式解密得到一串明文。这里就可以修改money属性要很多的钱。
原内容:O:5:"human":10:{s:8:"xueliang";i:863;s:5:"neili";i:875;s:5:"lidao";i:67;s:6:"dingli";i:86;s:7:"waigong";i:0;s:7:"neigong";i:0;s:7:"jingyan";i:0;s:6:"yelian";i:0;s:5:"money";i:0;s:4:"flag";s:1:"0";}
修改后:O:5:"human":10:{s:8:"xueliang";i:863;s:5:"neili";i:875;s:5:"lidao";i:67;s:6:"dingli";i:86;s:7:"waigong";i:0;s:7:"neigong";i:0;s:7:"jingyan";i:0;s:6:"yelian";i:0;s:5:"money";i:999999;s:4:"flag";s:1:"0";}

之后要逆着加密内容然后传回给Cookie即可完成修改金币。
特别要注意并不是简单的逆回去就好了,base64.js里有坑。
base64.js里是一个Base64函数,里面有两个公有方法encode()和decode(),两个私有方法_utf8_encode()和_utf8_decode()恶心的是encode()里使用了_utf8_encode(),而decode()里没有使用_utf8_decode()

昶

开始逆运算。
仔细看script.js里的decode_create()方法。如下蓝框所示,我们相当于现在知道了result3,要求出result。
求出result后需要对其使用base64.js里的encode()方法,但是不能调用_utf8_encode()这个私有方法。
因为之前解密的时候使用base64.js里的decode()方法里将_utf8_decode()注释掉了。

昶

逆运算蓝框所示内容,代码如下:
result3= "O:5:"human":10:{s:8:"xueliang";i:863;s:5:"neili";i:875;s:5:"lidao";i:67;s:6:"dingli";i:86;s:7:"waigong";i:0;s:7:"neigong";i:0;s:7:"jingyan";i:0;s:6:"yelian";i:0;s:5:"money";i:999999;s:4:"flag";s:1:"0";}"
result = ""
for (i = 0; i < result3.length; i++) {
    var num = result3[i].charCodeAt();
    num = num + ((i % 10) + 2);
    num = num ^ i;
    result += String.fromCharCode(num)
}

昶

之后就需要按照base64.js里的encode()内容来加密,但是不能调用_utf8_encode()这个私有方法。

var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = result;
while (i < input.length) {
    chr1 = input.charCodeAt(i++);
    chr2 = input.charCodeAt(i++);
    chr3 = input.charCodeAt(i++);
    enc1 = chr1 >> 2;
    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
    enc4 = chr3 & 63;
    if (isNaN(chr2)) {
        enc3 = enc4 = 64;
    } else if (isNaN(chr3)) {
        enc4 = 64;
    }
    output = output +
    _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
    _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
}
return output;

昶
昶

接着看script.js里的decode_create()方法。我们现在只需要进行encodeURIComponent()方法,然后再传入Cookie中即可。

昶
昶
昶

之后就是花钱到商店里买完所有的技能学会如来神掌,再到讨伐页面讨伐老魔就能得到flag。

昶

转载请注明出处。
本文网址:https://blog.csdn.net/hiahiachang/article/details/105060229

发布了16 篇原创文章 · 获赞 2 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/hiahiachang/article/details/105060229