Z1d10tのBlog

A note for myself,have fun!

[HFCTF2020]EasyLogin

一道关于jwt认证的题目 之前有做过相同的题目

申请一个账号登录 然后就是一个获取flag的输入框 但是我们普通身份肯定是获取不到的

这里我试了试申请admin账号发现不行 做到这里估计是后面大概率是要伪造身份为admin然后getflag

查看源码发现是用koa框架

img

然后看了一下别人的wp这个框架是用jwt鉴权的

关于鉴权可以看这篇文章https://juejin.cn/post/7003147063542153224

登录抓包

img

将其放入https://jwt.io/ 自动帮我们生成相关信息

img

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
2
3
4
{"alg": "none","typ": "JWT"}
eyJhbGciOiAibm9uZSIsInR5cCI6ICJKV1QifQ==
{"secretid": [],"username": "admin","password": "123","iat": 1681959877}
eyJzZWNyZXRpZCI6IFtdLCJ1c2VybmFtZSI6ICJhZG1pbiIsInBhc3N3b3JkIjogIjEyMyIsImlhdCI6IDE2ODE5NTk4Nzd9

eyJhbGciOiAibm9uZSIsInR5cCI6ICJKV1QifQ.eyJzZWNyZXRpZCI6IFtdLCJ1c2VybmFtZSI6ICJhZG1pbiIsInBhc3N3b3JkIjogIjEyMyIsImlhdCI6IDE2ODE5NTk4Nzd9.注意这里虽然签名部分被省略了 但是最后一个.要加上 并且签名中base64编码中用来补位==要删除

img

成功以admin身份登入

img

获取flag即可

img

其实这道题还是前期信息检索去明白他框架是jwt鉴权

本文最后更新于 天前,文中所描述的信息可能已发生改变