参考链接:https://blog.csdn.net/qq_2589...
题目链接:http://123.206.31.85:1616/
点进去界面如下:
根据题目提示应该是想办法学如来神掌,然后讨伐魔头拿到flag。如来神掌要银子买,银子可以点击【赚钱】赚。
点击【赚钱】,5秒钟才赚一百两,万恶的资本家,此路不通。
抓个包看看后端返回:
没啥有用的东西,set了一下cookie,有3个js文件,一个alert()。出于严谨改了一下alert()里的数字,结果只是爽给自己看,一百两还是一百两,一文都没有多。又重放了几下报文,发现钱也没有涨,多试了几次觉得问题应该出在cookie上。
看一下那三个js文件,发现script.js里有点东西。
但是代码看不懂,网上查攻略说是被压缩混淆了,找到一个在线解密的网站: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('<img id="attack-1" src="image/1-1.jpg">');
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解密后是啥:
这下思路就清晰很多了,就是把银子数修改掉再加密回去,替换掉原有的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)
}
解密是先异或再减,加密就是先加再异或,之后变成这样:
还需要进行一次加密,这个代码在base64.js中有,但是有一个坑点,如下图:
解密的代码如下图:
可以看到解密的一行decode代码被注释掉了,因此加密的那一行也不能用,把代码粘出来去掉那一行运行得到:
之后再encodeURIComponent一下就得到了cookie值,替换之后就可以购买秘密打boss了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。