Bugku Web CTF-江湖魔头2

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;
	}
	......

查看encodedecode的具体实现,发现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}

(所以说我为什么要把好好的文章拆成两半发,还不是因为这博客太睿智了= =。)

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