BUGKU 江湖魔头1

BUGKU 江湖魔头

点击进入游戏,得到提示属性全满,习得如来神掌,才能打败魔头。然后融合技能要很多钱,每次也就赚个一百两,肯定不是傻傻赚钱。想想是不是注入
在这里插入图片描述
得到
在这里插入图片描述
看来不是注入,用御剑扫描后台,没有收获
打开F12查看源代码
在这里插入图片描述
有三个js文件,一一查看
在这里插入图片描述
第一个
在这里插入图片描述
应该是js代码,看到flag,感觉就是这个了,在js在线格式化中格式化js代码

eval(function(p, a, c, k, e, r) {
    e = function(c) {
        return (c < 62 ? '': e(parseInt(c / 62))) + ((c = c % 62) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
    };
    if ('0'.replace(0, e) == 0) {
        while (c--) r[e(c)] = k[c];
        k = [function(e) {
            return r[e] || e
        }];
        e = function() {
            return '[57-9abd-hj-zAB]'
        };
        c = 1
    };
    while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
    return p
} ('7 s(t){5 m=t+"=";5 8=9.cookie.n(\';\');o(5 i=0;i<8.d;i++){5 c=8[i].trim();u(c.v(m)==0)p c.substring(m.d,c.d)}p""}7 w(a){5 x=new Base64();5 q=x.decode(a);5 r="";o(i=0;i<q.d;i++){5 b=q[i].charCodeAt();b=b^i;b=b-((i%10)+2);r+=String.fromCharCode(b)}p r}7 ertqwe(){5 y="user";5 a=s(y);a=decodeURIComponent(a);5 z=w(a);5 8=z.n(\';\');5 e="";o(i=0;i<8.d;i++){u(-1<8[i].v("A")){e=8[i+1].n(":")[2]}}e=e.B(\'"\',"").B(\'"\',"");9.write(\'<img id="f-1" g="h/1-1.k">\');j(7(){9.l("f-1").g="h/1-2.k"},1000);j(7(){9.l("f-1").g="h/1-3.k"},2000);j(7(){9.l("f-1").g="h/1-4.k"},3000);j(7(){9.l("f-1").g="h/6.png"},4000);j(7(){alert("你使用如来神掌打败了蒙老魔,但不知道是真身还是假身,提交试一下吧!A{"+md5(e)+"}")},5000)}', [], 38, '|||||var||function|ca|document|temp|num||length|key|attack|src|image||setTimeout|jpg|getElementById|name|split|for|return|result|result3|getCookie|cname|if|indexOf|decode_create|base|temp_name|mingwen|flag|replace'.split('|'), 0, {}))

最后一串很长,不对劲,按照function的参数传递方式,p a c k e r分别对应('7~~~38,
于是

function x(p, a, c, k, e, r) {//x是标识符,可以换成其他
e = function(c) {
return (c < 62 ? '': e(parseInt(c / 62))) + ((c = c % 62) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
};
if ('0'.replace(0, e) == 0) {
while (c--) r[e(c)] = k[c];
k = [function(e) {
return r[e] || e
}];
e = function() {
return '[57-9abd-hj-zAB]'
};
c = 1
};
while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
return p
}
var p='7 s(t){5 m=t+"=";5 8=9.cookie.n(\';\');o(5 i=0;i<8.d;i++){5 c=8[i].trim();u(c.v(m)==0)p c.substring(m.d,c.d)}p""}7 w(a){5 x=new Base64();5 q=x.decode(a);5 r="";o(i=0;i<q.d;i++){5 b=q[i].charCodeAt();b=b^i;b=b-((i%10)+2);r+=String.fromCharCode(b)}p r}7 ertqwe(){5 y="user";5 a=s(y);a=decodeURIComponent(a);5 z=w(a);5 8=z.n(\';\');5 e="";o(i=0;i<8.d;i++){u(-1<8[i].v("A")){e=8[i+1].n(":")[2]}}e=e.B(\'"\',"").B(\'"\',"");9.write(\'<img id="f-1" g="h/1-1.k">\');j(7(){9.l("f-1").g="h/1-2.k"},1000);j(7(){9.l("f-1").g="h/1-3.k"},2000);j(7(){9.l("f-1").g="h/1-4.k"},3000);j(7(){9.l("f-1").g="h/6.png"},4000);j(7(){alert("你使用如来神掌打败了蒙老魔,但不知道是真身还是假身,提交试一下吧!A{"+md5(e)+"}")},5000)}';
var a=[];
var c=38;
var k='|||||var||function|ca|document|temp|num||length|key|attack|src|image||setTimeout|jpg|getElementById|name|split|for|return|result|result3|getCookie|cname|if|indexOf|decode_create|base|temp_name|mingwen|flag|replace'.split('|');
var e=0;
var r={};
x(p,a,c,k,e,r);

是js代码,可以扔进控制台跑,在题目页面打开F12的控制台,把上面这段代码扔进去跑
在这里插入图片描述
得到一段有关key和flag的代码

function getCookie(cname){//获得cookie
    var
    name = cname + "=";
    var
    ca = document . cookie . split(';');//以分号分割ca为数组
    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";//**## 1**关注temp_name等于user
    var
    temp = getCookie(temp_name);
    temp = decodeURIComponent(temp);
    var
    mingwen = decode_create(temp);
    var
    ca = mingwen . split(';');//用分号分割赋给ca
    var
    key = "";
    for (i = 0; i < ca . length; i++){
        if (-1 < ca[i] . indexOf("flag")) {//查找数组ca中flag的下标
            key = ca[i + 1] . split(":")[2]}//key仍是ca的一部分
    }
    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)}//key被加密

其实就是cookie的user字段值,经过decode_create,decodeURIComponent等方法得到cookie
所以
方法1

decode_create(decodeURIComponent(getCookie("user")))//写在一起

方法2

var a = getCookie('user')
a
a = decodeURIComponent(a)
a = decode_create(a)

最终1,2得到相同的
在这里插入图片描述
可以看到得到的cookie包含了属性和钱的值,所以现在要改动这些值达到满值

var b = ""
for (i = 0; i < a . length; i++){var num = a[i] . charCodeAt(); num = num + ((i % 10) + 2); num=num^i; b += String . fromCharCode(num)}
b = base.encode(b)

不知道为什么这里说我base未定义@@

b = decodeURIComponent(b)

然后就得到user了
接下来参考大佬的blog

发布了19 篇原创文章 · 获赞 0 · 访问量 264

猜你喜欢

转载自blog.csdn.net/weixin_45689999/article/details/104408663