打开后是一个类似于游戏的界面,通关需要打败一个魔头,界面大概功能是这样:
打败魔头需要学会如来神掌
如来神掌要所有属性都满后才能画100000两学会
练功可以提升一点属性,需要页面延迟5秒
赚钱每次100两,需要页面延迟5秒
可各花费10000两来加满每个属性(内功、外功等)
因此我们肯定是要想办法修改自己的金钱数目了,一开始没有头绪,想写个js脚本来自动赚钱。。
但看一下如果弄完也要两个小时左右,而且每次赚钱后的js弹窗无法处理,那么正解肯定不是这样
我们查看页面源代码发现引用的有js的脚本,看一下script.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是被加密的
var temp_name = "user";
var temp = getCookie(temp_name);
temp = decodeURIComponent(temp);
var mingwen = decode_create(temp);
那么我们可以到浏览器控制台中执行
decode_create(decodeURIComponent(getCookie("user")));
得到明文:
O:5:”human”:10:{s:8:”xueliang”;i:576;s:5:”neili”;i:652;s:5:”lidao”;i:77;s:6:”dingli”;i:66;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”;}
我们看到cookie中是包含各种属性值和money的值的,因此我们可以把修改过money的cookie再加密回去,然后提交就可以了
我一开始写的脚本是这样的,但是提交过去始终不成功
import base64
import urllib.parse
data = 'O:5:"human":10:{s:8:"xueliang";i:576;s:5:"neili";i:652;s:5:"lidao";i:77;s:6:"dingli";i:66;s:7:"waigong";i:0;s:7:"neigong";i:0;s:7:"jingyan";i:0;s:6:"yelian";i:0;s:5:"money";i:2000000;s:4:"flag";s:1:"0";}'
su = ""
for i in range(0, len(data)):
num = ord(data[i])
num = num + ((i % 10) + 2)
num = num ^ i
su = su + chr(num)
a = base64.b64encode(bytes(su, encoding = 'utf-8'))
b = urllib.parse.quote(a)
print(b)
到网上看了一位师傅(瑞雪丰年)的wp,按他的说法如果加密为str的话会出错,我也搞不明白为什么。。
照这位师傅的方法,把num写入到二进制文件中再读取出来
import base64
import urllib.parse
data = 'O:5:"human":10:{s:8:"xueliang";i:576;s:5:"neili";i:652;s:5:"lidao";i:77;s:6:"dingli";i:66;s:7:"waigong";i:0;s:7:"neigong";i:0;s:7:"jingyan";i:0;s:6:"yelian";i:0;s:5:"money";i:2000000;s:4:"flag";s:1:"0";}'
with open('C:\\Users\\pc\\Desktop\\a.bin', 'wb') as f:
for i in range(0, len(data)):
num = ord(data[i])
num = num + ((i % 10) + 2)
num = num ^ i
f.write(bytes([num]))
d = open('C:\\Users\\pc\\Desktop\\a.bin', 'rb').read()[:]
a = base64.b64encode(d)
b = urllib.parse.quote(a)
print(b)
跑出cookie值,用burp抓包修改cookie,加满属性学会如来神掌后打败魔头,拿到flag
flag{a13d82fe0daf4730eac8f8e0d4c17e72}
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
原文: https://loong716.github.io/2019/05/07/Bugku.html#insert-into%E6%B3%A8%E5%85%A5
网友评论