DASCTF X CBCTF 2022 九月挑战赛 dino3d

本文最后更新于:2024年10月26日 晚上

DASCTF X CBCTF 2022 九月挑战赛 dino3d

题目链接:https://buuoj.cn/match/matches/151/challenges

启动环境之后,玩一会,进行抓包:

1

得到 score 分数和 checkcode,因为要玩到 1000000 分,所以直接修改分数 score 为目标分数发出看看:

2

看来行不通,可能还要伪造 checkcode 和 tm 时间戳

f12 查看 js 代码,ctrl+f 搜索 checkcode,找到定义:

3

1
var checkCode = 'DASxCBCTF' + salt;

这里这个 salt 并不知道是什么,还需要查看代码分析。

知道定义之后,再查看另外两个搜索结果:

4

5

判断关键信息:

1
body: 'score=' + parseInt(e).toString() + '&checkCode=' + md5(parseInt(e).toString() + t) + '&tm=' + ( + new Date).toString().substring(0, 10)

根据抓包结果,我们知道数据格式是:

1
score=xxx&checkCode=xxx&tm=xxx

所以可以判定这里的 e 是分数,那么这个 md5 () 函数里面的 t 又是什么?

到这里就进展不下去了,只能再去找找这个 salt,因为根据定义(或者说赋值语句)中的 checkcode = "xxx"+salt 来看,这个 salt 可能就是 t

image-20221104204811600-1667566092580-11

搜索 salt 发现赋值语句:

1
var salt = '_wElc03e';

此外并未搜索到其他新的跟 salt 有关的语句了。

那么我们就要验证一下这个 t 是不是就是 salt 了。验证的方法也很简单,直接 md5 (分数 + salt) 然后跟我们抓包的结果进行比对即可。

抓包结果:

1
2
score=150
checkCode=c652f21617f6592c3918c8aa7aa85502

md5 加密结果:

1
2
3
150DASxCBCTF_wElc03e

md5_after:c652f21617f6592c3918c8aa7aa85502

拼接加密结果和抓包结果的 checkcode 相同。这样就能伪造 checkcode 了

1
checkcode=md5(score+DASxCBCTF+_wElc03e)

由于我们要达到目标分才能拿到 flag,那么先直接将目标 checkcode 写出

1
flag_checkcode: 4639d0ab43e9030749f450eb6e9fbb97

score

1
flag_score: 1000000

时间戳的话,直接通过在线网站查询然后写一个未来时间的值,等到了那个值同一时间将包发出即可。(考虑网络延迟,可能要稍微快一点点将包发出)

时间戳转换网址:https://shijianchuo.net/

13

返回查看就能得到 flag 了


DASCTF X CBCTF 2022 九月挑战赛 dino3d
https://4rozen.github.io/archives/WP/29897.html
作者
4rozeN
发布于
2023年9月25日
许可协议