Bugku Web CTF-江湖魔头2
(接1)
然而在最初的尝试中却发现,当我填入修改好的cookie
时,刷新页面属性值都为空(是为空而不是显示0),于是考虑是否因为逆运算哪里出现了问题。
仔细查看代码,发现:
var base = new Base64();
var result = base.decode(temp);
我想当然的以为这就是普通的base64解码而已,所以逆运算也是直接base64 encode了,但是最初引入的js文件其实是有三个,其中就包含base64.js
:
function Base64() {
// private property
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// public method for encoding
this.encode = function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = _utf8_encode(input);
...
}
return output;
}
// public method for decoding
this.decode = function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
...
}
}
//output = _utf8_decode(output);
return output;
}
......
查看encode
和decode
的具体实现,发现encode
中是执行了这一句:
input = _utf8_encode(input);
而在decode
中,对应的被注释掉了:
//output = _utf8_decode(output);
所以要想真正的反向还原,在encode
中就不能执行这一句,所以在控制台中运行的时候直接删掉这一句即可。
在控制台中执行以下语句,生成cookie
:
result3 = "O:5:\"human\":10:{s:8:\"xueliang\";i:11884;s:5:\"neili\";i:1817;s:5:\"lidao\";i:1887;s:6:\"dingli\";i:1875;s:7:\"waigong\";i:1800;s:7:\"neigong\";i:1800;s:7:\"jingyan\";i:10000;s:6:\"yelian\";i:10000;s:5:\"money\";i:10000000;s:4:\"flag\";s:1:\"0\";}";
result = ""
for(i = 0; i < result3.length; i++){
num = result3[i].charCodeAt();
num = num+((i % 10) + 2);
num = num ^ i;
result += String.fromCharCode(num)
}
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// public method for encoding
function encode(input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
//input = _utf8_encode(input);
while (i < input.length) {
...
}
return output;
}
var temp = encode(result);
temp = encodeURIComponent(temp);
result3
对应的是主角的属性,把金钱调高(需要注意的是,前面的基础属性不能过高,当时直接各项数值拉上天,就会出现检测到作弊行为,已将您的账号封禁10个月
= =。)
将输出的temp
值填入cookie
中的user
字段,重新刷新页面就会发现主角的金钱被成功修改为10000000。
这么多钱直接把商店所有秘籍买下,最后挑战魔头,拿到flag:
你使用如来神掌打败了蒙老魔,但不知道是真身还是假身,提交试一下吧!flag{a13d82fe0daf4730eac8f8e0d4c17e72}
(所以说我为什么要把好好的文章拆成两半发,还不是因为这博客太睿智了= =。)