从简单的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

相关文章

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho