Bugku-江湖魔头(web)
打开是一个游戏,大体意思是说要用足够的钱来买武功秘籍,首先想到的是用脚本来快速赚钱,但是赚钱需要五秒,每次只有100两,时间太长不现实。
看别人的题解,这题的思路是JS审计+逆向解密
在wulin.php中发现这个
首先审计script.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,{}))
去掉eavl()函数后在控制台执行代码
得到代码后格式化
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="data: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中保存的
分别调用函数
getCookie(“user”)
c=decodeURIcomponent(cookie)
decode_create(c )
得到序列化的游戏属性
O:5:"human":10:{s:8:"xueliang";i:911;s:5:"neili";i:947;s:5:"lidao";i:62;s:6:"dingli";i:86;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";}
修改money的值(直接修改属性是不行的,会被直接封号)
将修改后的序列加密
这里需要逆向一下加密函数
function encode_create(temp) {var result3 = "";for (i = 0; i < temp.length; i++) {// 将字符转为Unicode编码var num = temp.charCodeAt(i);num = num + ((i % 10) + 2);num = num ^ i;result3 += String.fromCharCode(num);}var base = new Base64();var result1 = base.encode(result3);return result1;
}
注:这里用了别人博客的代码
直接将代码在控制台运行就可以使用函数
k=encode_create(“修改后的字符串”)
cookie=encodeURIcomponent(k)
将cookie改为生成后的值
还没有结束
你会发现修改后页面返回后的cookie并没有改变
原因在base64.js代码里
function Base64() {// private property_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";// public method for encodingthis.encode = function (input) {var output = "";var chr1, chr2, chr3, enc1, enc2, enc3, enc4;var i = 0;input = _utf8_encode(input);while (i < input.length) {chr1 = input.charCodeAt(i++);chr2 = input.charCodeAt(i++);chr3 = input.charCodeAt(i++);enc1 = chr1 >> 2;enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);enc4 = chr3 & 63;if (isNaN(chr2)) {enc3 = enc4 = 64;} else if (isNaN(chr3)) {enc4 = 64;}output = output +_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +_keyStr.charAt(enc3) + _keyStr.charAt(enc4);}return output;}
代码中有一个input=_utf8_encode(input)
而在
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) {enc1 = _keyStr.indexOf(input.charAt(i++));enc2 = _keyStr.indexOf(input.charAt(i++));enc3 = _keyStr.indexOf(input.charAt(i++));enc4 = _keyStr.indexOf(input.charAt(i++));chr1 = (enc1 << 2) | (enc2 >> 4);chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);chr3 = ((enc3 & 3) << 6) | enc4;output = output + String.fromCharCode(chr1);if (enc3 != 64) {output = output + String.fromCharCode(chr2);}if (enc4 != 64) {output = output + String.fromCharCode(chr3);}}//output = _utf8_decode(output);return output;}
这个函数中 output=_utf8_decode(output) 被注释掉了
base64输入和输出的编码不一样,因此我们可以去掉前一个代码或者增加被注释掉的代码
具体的操作为:将要修改的代码复制出来,修改后在控制台执行,这样就会覆盖掉原来的函数
再次执行刚才的加密操作,得到有用的cookie
修改cookie后金钱增加,购买秘籍,得到flag
Bugku-江湖魔头(web)相关推荐
- BugKu CTF Web
BugKu CTF Web 滑稽 计算器 GET POST Simple_SSTI_1 矛盾 eval 变量1 Simple_SSTI_2 alert 你必须让他停下 方法一 方法二 方法三 网站被黑 ...
- Bugku:web 江湖魔头
这道题就看题目就非常有意思了,我们的目标就是打败江湖魔头. 提示也是令人想入非非,看来打败魔王之后就能得到flag了吧. 进入之后点击进入江湖,这时候的源代码还没有什么提示. 进入之后, 这时候就有 ...
- bugku练习Web 1(web2--成绩单)
参考:https://www.cnblogs.com/RenoStudio/p/10355180.html https://www.cnblogs.com/cnnnnnn/p/11064062.htm ...
- Bugku:web矛盾
继续web学习,打开网址链接. 最开心的事情莫过于直接看到PHP代码因为不用去抓? 可以看到意思是num不是numeric并且num需要等于1的时候才会展示出flag,这就是题目矛盾的来源. 所以要怎 ...
- Bugku,Web:各种绕过哟
uname 不等于 passwd,sha1 值不能一样,id 就是 margin php_sha1 碰撞,其中 php_sha1() 函数不能处理数组,可以用数组绕过 得到 flag
- Bugku / CTF / WEB 输入密码查看flag
根据URL提示可知本题用爆破 本题要求的密码是5位数 修改google的代理服务器,再用burpsuite抓包,步骤如下: 1.将burpsuite打开后 点proxy >> interc ...
- Bugku CTF web 你必须让他停下来 解题思路
启动场景发现网页一直在刷新,按F12查看源代码可以在某一次网页刷新时看到flag但是复制不了 这时你可以禁用浏览器JavaScript页面特效,再次启动场景并进行手动刷新,按F12,在某一次刷新时就可 ...
- Bugku CTF web source
打开题目 打开链接,查看源码其中的flag是错误的但是看到了tig,于是联想到git泄露 Tig 是一个 git 资源库浏览器 也可以进行目录扫描,我使用的是dirsearch可以扫描成功 dirse ...
- Bugku,Web:程序员本地网站
让服务器获取请求端的本地 IP 地址,添加 XFF 头部 获取 flag
- 【bugku】web game1 来盖楼啊
ps萌新第一次写wp如有不足请大佬指点 打开网址 是一个盖楼游戏 老规矩先玩几把 Fn+F12 查看源码 发现相关信息 xmlhttp.open 括号里面提交的值等于正确 那么打开score.php ...
最新文章
- 工程大小优化之图片资源
- Codeforces Beta Round #2 B. The least round way
- c语言规定 程序中用到的变量一定要,C语言为什么要规定对所用到的变量要“先定义,后使用”...
- boost——windows下VS2013update5编译boost库
- 怎样查看JVM的默认收集器
- 用MVC来实现javaScript的时间效果
- php textarea换行
- 传感器的定义、构成、分类
- .NetCore源码阅读笔记系列之Security (四) Authentication AddJwtBearer
- jdbc心得-2-数据库与java相结合
- smith圆图重要性_smith圆图的理解
- 问题:import org.springframework.security.authentication.encoding.Md5PasswordEncoder;spring5.已移除
- 来自网页的消息服务器不能创建对象,电脑IE浏览器提示“Automation服务器不能创建对象”怎么办...
- java开发基础(面试必备)
- 基于强化学习工具箱的自适应巡航控制系统
- Q/GDW376.1主站与采集终端通信协议测试方法
- 面试官问:浏览器输入 URL 回车之后发生了什么?
- Try to increase the 20000ms adb execution timeout represented by 'uiautomator2ServerInstallTimeout'
- Mac开发必备工具(一)—— Homebrew
- 2021年中式烹调师(初级)考试题及中式烹调师(初级)作业模拟考试