[HFCTF2020]EasyLogin
一道关于jwt认证的题目 之前有做过相同的题目
申请一个账号登录 然后就是一个获取flag的输入框 但是我们普通身份肯定是获取不到的
这里我试了试申请admin账号发现不行 做到这里估计是后面大概率是要伪造身份为admin然后getflag
查看源码发现是用koa框架
然后看了一下别人的wp这个框架是用jwt鉴权的
关于鉴权可以看这篇文章https://juejin.cn/post/7003147063542153224
登录抓包
将其放入https://jwt.io/ 自动帮我们生成相关信息
JWT(json web token)的三个部分依次如下:(参考:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html)
- Header(头部)
- Payload(负载)
- Signature(签名)
比如:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWNyZXRpZCI6MSwidXNlcm5hbWUiOiIxMjMiLCJwYXNzd29yZCI6IjEyMyIsImlhdCI6MTY4MTk1OTg3N30.jJv8tD-ULxBStlglQIsVQgnR-nC7hbxsPJqOQiF_qJg
三部分之间用.
间隔
这里这里绕过需要将alg(算法)改为none 将secretid改为[]
因为这个网站无法成none后的jwt编码 所以只能手动生成 也就是每部分base64编码 然后再用.
连接
因为算法已经是none了所以不需要第三段签名了
1 | {"alg": "none","typ": "JWT"} |
eyJhbGciOiAibm9uZSIsInR5cCI6ICJKV1QifQ.eyJzZWNyZXRpZCI6IFtdLCJ1c2VybmFtZSI6ICJhZG1pbiIsInBhc3N3b3JkIjogIjEyMyIsImlhdCI6IDE2ODE5NTk4Nzd9.
注意这里虽然签名部分被省略了 但是最后一个.
要加上 并且签名中base64编码中用来补位==
要删除
成功以admin身份登入
获取flag即可
其实这道题还是前期信息检索去明白他框架是jwt鉴权