CTF学习你必须将他停下&game1

295 阅读3分钟

你必须让他停下

image.png 打开以后我们发现这个页面一直在动,点击F12后也不能显示其完整的源代码,于是我们想到了使用burpsuite抓包。在本机上使用bp相对较为麻烦,于是我打开我的kali虚拟机来抓包。

image.png 打开kali的bp以后打开目标网址进行抓包,点击send to repeater,然后在repeater界面点击HTTP history,我们可以发现有很多的数据包,并且有规律可循,于是我们可以猜测这些数据包就是页面不断跳转造成的如此多的数据包。我们一个一个往下找每个数据包的response,我在找第三个数据包的时候就发现了flag~

game1

image.png

  • 打开目标链接以后发现是个小游戏的界面,打开F12玩一次,发现无法通关。
  • 由于是WEB线上游戏,不存在存档文件
  • 于是我们采用burpsuite抓包,查看到在游戏死亡时会提交一个GET请求,而且还返回“失败了” image.png
  • GET请求的参数是写在明文上的,根据经验,把score改成999999(尝试尽量大)
  • PS:客户终端机先将GET/POST请求发送至浏览器上配置的代理服务器上,再由代理服务器将请求上网至服务器,而burpsuite可以将交互请求逐条拦截,即可修改请求内容
  • 但是发送后发现还是失败 image.png 关键点: GET传参除了score分数还有参数sign
  • sign=zMNzU===知道是Base64编码过,经过解码发现不是一个整型分数
  • 这是需要考虑多重加密或者在加密后字符串左右两边加上固定字符
  • 方法一再玩一次得到不同的分数在查看sign,发现密文格式都是zM***==
  • 所以密文= ”zM + Base64(score) + ==“, 所以我们需要去得到Base64(score=999999)即可 image.png 方法二: 去控制台中查看这个sign是怎么将score加密的,因为在GET请求里就已经生成密文了,所以加密方式一定是写在了前端js里 image.png 发现确实在

然后我们就可以在console中编写执行JavaScript脚本,我们可以手动更改score得到Base64.encode(score.toString())的输出值 image.png 接着我们将加密过的sign字符串放入burpsuite抓到的包中点击send即可发现我们的flag了! image.png 总结:

  1. 当目标网址一直在跳转时,可以使用抓包,flag很有可能就在抓到的包里
  2. 遇到小游戏题目,一般都是要通关的,若是c/s考虑修改存档文件直接通关,b/s用burpsuite抓包修改提交到服务器的分数(c/s指用户需要安装客户端软件才能加入并访问服务器,b/s指用户侧直接用浏览器就能访问服务器)
  3. 广泛思考是否有其他需要修改的参数(score + sign)
  4. 浏览器自带控制台可以自行编写js,并在当前页面下执行
  5. 想要查看响应内容,a.可以在浏览器Network查看请求与响应 b.可以在burpsuite中用repeater查看响应