一、题目
2、方法
- 访问服务器,是一个游戏。
- F12,发现里面有个js文件。这段代码是一个经过混淆的 JavaScript 脚本,核心功能是:实现 Base64 的编码(encode)和解码(decode),并对中文/Unicode 字符做 UTF-8 处理。
eval(function(p, a, c, k, e, d) { e = function(c) { return (c < a ? "" : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) } ; if (!''.replace(/^/, String)) { while (c--) d[e(c)] = k[c] || e(c); k = [function(e) { return d[e] } ]; e = function() { return '\\w+' } ; c = 1; } ;while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b','g'), k[c]); return p; }('5 z={b:"R+/=",L:y(e){5 t="";5 n,r,i,s,o,u,a;5 f=0;e=z.D(e);C(f<e.q){n=e.h(f++);r=e.h(f++);i=e.h(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&B)<<2|i>>6;a=i&k;d(H(r)){u=a=w}l d(H(i)){a=w}t=t+j.b.c(s)+j.b.c(o)+j.b.c(u)+j.b.c(a)}x"O"+t+"=="},M:y(e){5 t="";5 n,r,i;5 s,o,u,a;5 f=0;e=e.E(/[^A-N-P-9+/=]/g,"");C(f<e.q){s=j.b.v(e.c(f++));o=j.b.v(e.c(f++));u=j.b.v(e.c(f++));a=j.b.v(e.c(f++));n=s<<2|o>>4;r=(o&B)<<4|u>>2;i=(u&3)<<6|a;t=t+7.8(n);d(u!=w){t=t+7.8(r)}d(a!=w){t=t+7.8(i)}}t=z.J(t);x t},D:y(e){e=e.E(/K/g,"n");5 t="";Q(5 n=0;n<e.q;n++){5 r=e.h(n);d(r<m){t+=7.8(r)}l d(r>V&&r<X){t+=7.8(r>>6|U);t+=7.8(r&k|m)}l{t+=7.8(r>>F|I);t+=7.8(r>>6&k|m);t+=7.8(r&k|m)}}x t},J:y(e){5 t="";5 n=0;5 r=S=p=0;C(n<e.q){r=e.h(n);d(r<m){t+=7.8(r);n++}l d(r>T&&r<I){p=e.h(n+1);t+=7.8((r&W)<<6|p&k);n+=2}l{p=e.h(n+1);G=e.h(n+2);t+=7.8((r&B)<<F|(p&k)<<6|G&k);n+=3}}x t}}', 60, 60, '|||||var||String|fromCharCode|||_0|charAt|if||||charCodeAt||this|63|else|128|||c2|length|||||indexOf|64|return|function|Base64||15|while|_2|replace|12|c3|isNaN|224|_1|rn|encode|decode|Za|zM|z0|for|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|c1|191|192|127|31|2048'.split('|'), 0, {}))- 先用bp抓包看看,刷新页面,第一个包先放掉,抓游戏结束时候的包。
- 看到包里面有分数和这个分数对应的base64编码(自定义编码)。
- 猜想把分数加大,能不能获得flag。
- 给分数和base64编码打上标签。
- 把分数改成100000,先获取一下100000分数的编码。
- F12,控制台输入Base64.encode('100000'),执行js代码,得到编码。
- 有效负载集选2,因为要同时改两个变量,类型选简单清单,加入下面两个字符串。
- 右上角,开始攻击,得到特意。
- 点开查看响应,获得flag。
- flag{ce3087d10286ddcfe1ed89a7c813414e}