从简单的JS小游戏中看JS代码审计的一般流程

2024-03-29 05:32

本文主要是介绍从简单的JS小游戏中看JS代码审计的一般流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  首先是最近的一次比赛[VNCTF 2021]Ez_game。
  题目目标很明确,通关即可获取flag。页面游戏都是由JS文件写的,这就涉及JS审计的问题。
  一般第一步就是打开调试器查看当前的JS文件来审计,比如ctrl+F在文件中搜索关键字。
  常见关键字有:alert(一般通关是以弹窗框显示)、flag(比赛常见的头)、比赛常见的flag头(比如V&Nctf中的VN)、{、}、win(通关的标志、同类的比如pass、end、level)、player、play(游戏者的一些数据)

  首先选择查看alret,发现并没有显示,所以应该不是以弹窗显示。搜索VN也没有(一般来说flag信息都是会被某种加密方式加密)。
在这里插入图片描述

  接下来选择win搜索,发现一个参数。
在这里插入图片描述

  看上去是一个正常的的参数,但是一个很值得思考的问题是。字面意思:胜利的时间。翻译出来其实应该有所发现,胜利还有时间?如果设一个值,达到那个值之后就能获胜了吗?也许这是一个突破点,可以看一下Timer类的参数。
在这里插入图片描述

  在gameEngline.js中查找Timer类,发现一个参数——endTime!我们尝试在控制台一下修改值!
在这里插入图片描述

  成功了!
  接下来可以尝试一下新的姿势!
  可以从这里发现flag是直接在页面中显示的,我们其实可以尝试找一下页面信息(比如paused、Game Over等)是从哪个函数显示的。这里可以尝试调试一下进程。
在这里插入图片描述在这里插入图片描述

  可以看出来信息的打印是在PostRender函数执行过后显示的!搜索一下该函数并查看。
在这里插入图片描述

  在观察完该函数代码之后观察到一个非常长的、很可疑的字符串。尝试在控制台执行一下:
在这里插入图片描述

  好家伙,直接出现flag信息,也可以看到一些之前会出现的paused之类的提示信息。
  注意,需要执行的话需要去掉执行括号。
  当然,还有外挂般的存在,直接修改参数。
在这里插入图片描述

  显然这是游戏的参数类,只要看一下哪个参数实例化了这个类就可以通过控制台来修改游戏参数啦!
在这里插入图片描述

  魔改参数成功,那接下来可以好好体验一下开挂的感受了嘿嘿。还有其他的外挂姿势就不一一演示了。
在这里插入图片描述

  与其说是JS审计,更不如说是找参数,与代码审计一般找函数有一定的区别(因为一般这种JS审计都是签到题)
  说到JS审计,杭电HgameCTF的web-week1的题目中也有一道类似的题目。
  因为环境已经关闭了,只能通过wp上的信息来讲解。总的思路还是找参数。
在这里插入图片描述

  先放上官方wp
  其实这道题的思路和之前说的第二种解题方式类似,都是找游戏结束或者一些状态时的提示信息。
  既然说2000分通过,所以这道题也可以通过搜索2000,或者相近的1999,如上图所示,也可以找到提示。或者说直接先搜索alert或者是gameover,也可以发现提示。
找到之后显然是一个base64编码,解码即可。
  还有一道比较简单的JS题目。攻防世界web新手题的simple_js。
  看到题目名字,打开直接查看调试器。一看就发现了可疑的长串字符。
在这里插入图片描述

  直接转码

\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31

  提示是charcode,尝试转换为十进制,并转换为ASCII码相对应的字符.转换的字符就是flag。
  总的来说,JS审计最关键的就是找参数和可疑的长串字符编码。
  总结一下一般方法:
  1.找参数或者说是关键字
  2.找通关条件并定位所在函数
  3.找可疑的字符串(编码后的)

  通过JS审计可以窥探代码审计的模式-找危险函数
  因为一般来说代码量是比较可观的,而且会和其他的漏洞比如sql注入、文件上传、文件包含等等相结合,所以还是存在一定的难度。
  下面分享其他大牛对于代码审计的思路
  代码审计思路讨论
  关于PHP代码审计和漏洞挖掘的一点思考
  但这些都是比较简单的小游戏题目,难的题目也蛮丧心病狂的,谨慎食用!
  希望让大家对于审计有更好的思路!

这篇关于从简单的JS小游戏中看JS代码审计的一般流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857727

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直