bugku之江湖魔头

  • 第一次在csdn发表博客
  • 在网上寻找解题办法:
  • 正式开始讲解
  • 解压后的js文件
  • 获取和解码cookie
  • cookie修改后的再编码
  • 修改cookie
  • 总结

第一次在csdn发表博客

最近开始接触web安全,顺便在bugku找了点题做,所以遇到了一道这么有趣的题目:江湖魔头
刚开始我很天真,以为直接用brupsuit抓请求包和响应包,然后修改响应包内html的数据,将金钱还有属性改成很多很多。结果现实很打脸,网页中属性的数据确实是改过来了,但是要购买的时候发现还是显示金钱不足。


**

在网上寻找解题办法:

**

做为刚接触web安全的小白,这个时候我也不知道该怎么办了,所以只能在网上寻找答案,很幸运的
看到了大佬的文章,也因此拿到了flag;这是大佬的文章链接。这位大哥思路很好,我完全是按照他的思路来的。不过其中有一些细节大佬没有讲到,对像我这样的小白不够友好,所以我想着写这篇博客,希望能帮到像我一样有疑惑的同学,顺便记录下自己的学习。大佬可以绕道了。哈哈

正式开始讲解

前面废话有点多,这里正式开始本题的讲解。
首先打开网页的源码,发现很简洁,感觉可用的信息很少,(有人是删除了wulin.php后的参数,但我感觉用处不大,可能我这种小白不太懂那种思路),但是仔细一看,有三个js文件,这些js文件就是我们的突破点了。
首先打开第一个文件:js/script.js。一看,我的天,这什么东西,看都看不懂。
看来得格式化一下,当然,一开始我是直接格式化的,发现还是看不懂,这里得反压缩反混淆才行,https://tool.lu/js/ 我是在这个网站弄的,大家可以参考着用,或者直接百度,网上很多在线的工具,记得要找反压缩的。

解压后的js文件

unction 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中user的值,然后进行多次的解码,其中包括url的解码,以及base64的解码(这里的这些编码我也不是很了解,需要补补课,不过大概能看懂就好),然后解码得到的数值应该就是我们网页上显示的那些属性的数据。另外两个js文件就是提供一些编码还有解码的函数,这里不再细讲。
讲到这里,相信我们也就有思路了,获取和解码cookie,然后修改money的数值,接着再将cookie编码,然后修改cookie,以达到修改金钱的目的。
下面我们按照这个思路一步步来。

获取和解码cookie

首先,我们按F12调出开发者选项,这里我用的是谷歌浏览器,不同浏览器可能会有不同,不过大同小异吧。
在console即控制台中输入:var test=getCookie(‘user’); 获取cookie的值,注意这里以及后面的许多函数,都是js文件里面的函数,可以拿出来用。得到cookie的值后,接着在控制台依次输入:test=decodeURIComponent(test) 和test=decode_create(test)。得到解码后的数值后,我们会惊奇的发现,我们看得懂这些值,一眼可以看到money的值为0;

接着我们就理所当然的要修改money的数值为自己想要的数值啦。然后进行再编码。

cookie修改后的再编码

再编码其实就是解码的逆过程,按照js文件的解码顺序反过来。首先是应该是encode_create(),
当然,js文件里面没有这样的函数,所以我们要自己来写。按照decode_create()的模式来进行编码。

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
}

这个是解码的代码,我们按照这个代码反着来

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

这里注意顺序要反过来,解码是先异或,编码则是后面异或,而且-变成+。这里注意:a^b=c
c^b=a. 可以自己验证。
接着我们就应该base.encode(),但是这里有个坑,观察js/base64.js 文件的encode函数和decode函数,我们发现,decode函数注释了output = _utf8_decode(output); 但是encode 却有 input = _utf8_encode(input); 这里要是没注意到,直接用他的encode 函数,就会出错。所以这里我们自己写代码,将input = _utf8_encode(input)删掉 (这里我忘记删掉这一句了,幸好我没有用到input这个变量,而是用result3,所以相当于删掉了这一句代码)

var base = new Base64();
var output = "";var chr1, chr2, chr3, enc1, enc2, enc3, enc4;var i = 0;input = _utf8_encode(result3);while (i <result3.length) {chr1 = result3.charCodeAt(i++);chr2 =result3.charCodeAt(i++);chr3 = result3.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);}


最好我们再 用encodeURIComponent()函数就可以得到重新编码后的cookie啦

修改cookie

有人通过documen.cookie=’’ 来修改cookie ,但是我修改后不知道怎么生效,所以这里我用brupsuit来修改。通过brupsuit抓请求包,然后修改cookie的值再发送请求。



这里我是在点击商店后,才抓取请求包,然后修改cookie 才可以买东西还有。如果点属性的时候修改,然后点商店购买发现不行。

总结

到这里为止,这个大魔君就被我们打败啦。这道题的思路不是我自己想出来的,是参考大佬的文章然后自己慢慢试出来的。(文中有链接)
我发现网上对这道题的解法的讲解不多,所以斗胆写个文章来记录下自己的解法,希望多新手有帮助,有疑惑的同学可以在下面留言一起探讨哦。因为是第一次写博客,而且也是刚接触安全这方面的知识,希望有什么不好的地方,大佬们可以提出来,小弟也可以慢慢改进。

bugku之江湖魔头相关推荐

  1. Bugku:web 江湖魔头

    ​这道题就看题目就非常有意思了,我们的目标就是打败江湖魔头. 提示也是令人想入非非,看来打败魔王之后就能得到flag了吧. 进入之后点击进入江湖,这时候的源代码还没有什么提示. 进入之后, 这时候就有 ...

  2. bugku 江湖魔头

    http://123.206.31.85:1616/ 学会如来神掌应该就能打败他了吧 本题要点:读js代码的能力! 赚钱太慢-然后在URL里去掉wulin.php后面的试试,得到 试试打开js的代码, ...

  3. bugku web篇

    web2 f12查看源代码在注释语句里面 计算器 直接求给的题目 但是对input的最大输入个数做了限制可以直接f12改限制字数也可以bp抓包修改 web基础$_GET $what=$_GET['wh ...

  4. php 伪协议 lfi,php://伪协议(I/O)总能给你惊喜——Bugku CTF-welcome to bugkuctf

    今天一大早BugkuCTF 的welcome to bugkuctf 就给了我一发暴击:完全不会啊...光看源码就发现不知道怎么处理了,于是转向writeup求助.结果发现这是一道非常有营养的题目,赶 ...

  5. BUGKU 密码题:这不是摩斯密码

    BUGKU 密码题:这不是摩斯密码 这不是摩斯密码 打开文件,发现如下符号: 可以发现,符号都是由> < + - . , [ ]来组成.那么显然,这个是Brainfuck加密.这里推荐一个 ...

  6. Bugku——Web——矛盾

    题目链接:http://ctf.bugku.com/challenges#矛盾:http://123.206.87.240:8002/get/index1.php 解题步骤: 1.is_numeric ...

  7. 输入密码查看flag(详解)——Bugku

    刚刚做了bugku的题目,现在整理一下 写出解题思路,希望能够帮助到那些需要帮助的人 所有的wp都是以一题一篇的形式写出 主要是为了能够让读者更好的阅读以及查找, 希望你们不要责怪!!共勉!!! Ch ...

  8. 点击一百万次(详解)——bugku

    刚刚做了bugku的题目,现在整理一下 写出解题思路,希望能够帮助到那些需要帮助的人 所有的wp都是以一题一篇的形式写出 主要是为了能够让读者更好的阅读以及查找, 希望你们不要责怪!!共勉!!! Ch ...

  9. bugku——web 做题记录

    Table of Contents 2,秋名山车神: 3,速度要快 4 welcome to the bugkuctf 1,login1(sql约束攻击) sql约束攻击: 2,过狗一句话 3,细心 ...

  10. bugku ——加密 做题记录

    目录 1,滴答-滴 2,聪明的小羊 3,ok 4这不是摩斯密码 5,easy_crypto 6,简单加密 7,散乱的密文 8 凯撒部长的奖励 9,一段base64 10,.!? 11,+[]-(Bra ...

最新文章

  1. Azure 中国四年扩容 12 倍还不够,微软放话:全球每年新建 50-100 数据中心!
  2. 大话中文文本分类之前数据处理
  3. poj 3580 splay
  4. 【大会】看案例,选方案
  5. C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针
  6. Numpy的切片操作
  7. 沣东新城镐京遗址规划_沣东新城房价为啥这么高?
  8. CSS animation 与 transition 有何区别?
  9. 小话设计模式五:模板方法模式
  10. Atitit  代理与分销系统(1)  子代理 充值总额功能设计概览 sum() groubpy subagt
  11. WindRiver WorkBench创建、编译vxWorks APP工程
  12. moxie php,PHP仿微信多图片预览上传功能
  13. win7系统安装卡在启动服务器,安装win7卡在启动界面不动进不了BIOS的解决方法 - 系统家园...
  14. POJ 2242 The Circumference of the Circle G++ 海伦公式 三角形外接圆半径公式 背
  15. 14款开源或免费的GIS软件
  16. Elasticsearch 实现类似SQL语句中like %关键字% 的单纯模糊查询(不进行分词)
  17. hadoop详细笔记(十一) mapreduce数据分析案例之线段重叠案例
  18. 自适应模糊PID控制算法
  19. 南京邮电大学操作系统实验五:Windows平台多进程共享内存通信
  20. 【ROS】移动机器人导航仿真(2)——SLAM(gmapping)

热门文章

  1. 基于snowflake的Id序列号生成器
  2. tetp服务器怎么上传文件,tftp服务器ip是什么 TFTP服务器怎么设置
  3. 黑客X档案 2002~2007 NPM、PYPI、DockerHub 备份
  4. 怎么在小芭比Puppy Linux中文版中集成软件
  5. 浙江大学黄杨思博计算机学院,浙江大学2010-2011学年大学生学科竞赛获奖名单
  6. 【视频】CCNA——小凡模拟器的简单介绍和使用
  7. 3年以上经验Java开发面试题
  8. 一个都不能少:全面认识IE插件
  9. 使用lightbox插件实现图片预览功能
  10. Ubuntu16 e1000e驱动安装