ctfshow-JWT 刷题记录
JWT —->https://zhuanlan.zhihu.com/p/86937325
可以去看看这篇文章了解一下啥是JWT(如果觉得不好,可以自己去搜一下,网上挺多人讲的这个)
jwt解密网站https://jwt.io/
前置知识
JWT支持将算法设定为“None”。如果“alg”字段设为“ None”,那么签名会被置空,这样任何token都是有效的。
设定该功能的最初目的是为了方便调试。但是,若不在生产环境中关闭该功能,攻击者可以通过将alg字段设置为“None”来伪造他们想要的任何token,接着便可以使用伪造的token冒充任意用户登陆网站。
这篇文章介绍了jwt和其的几种攻击方法 —-> https://xz.aliyun.com/t/2338
这篇文章几乎概括了所有的jwt攻击的方法 —-> https://www.cnblogs.com/HelloCTF/p/15748380.html
web345
题目
然后查看源代码发现了提示。
1 | 这里说一下url/admin 和 url/admin/的区别 |
payload
1 | 去访问/admin/然后就把cookie拿出来进行base64解码,然后把user修改成admin,在进行base64编码,然后重新提交cookie到/admin/,就可以拿到flag了。 |
web346
题目
拿着cookie去jwt.io解密平台查看了一下,发现是存在HS256加密的,那么我们就得去想办法获得密钥了。
然后盲猜一下是123456,结果对了,然后访问/admin/就能拿到flag了。(还是得把user修改成admin)
web347
题目
还是这个玩意
还是和web348一样,直接猜密码是123456.
然后就可以解出来了。
web348
题目
利用jwt爆破攻击爆破
下载地址https://github.com/brendan-rius/c-jwt-cracker
具体安装方法文档中有。
使用方法 ./jwtcrack jwt
跑半天才给我跑出来
然后就去修改cookie访问/admin/就可以拿到flag了。
web349
这里拿到cookie去访问的话,得到这里是RS256加密
1 | RS256算法则使用私钥对消息进行签名并使用公钥进行身份验证。 |
利用私钥生成jwt,利用公钥解密jwt,所以我们只要有私钥然后自己重新生成就可以了。
访问/private.key得到私钥 这里的考点就是私钥泄露
这里给的是题目的源码。
解法
先创建一个public目录
然后进入新建的route目录,修改一下源码,把题目给的源码复制进去。(注意把user改成admin)
然后把题目上的private.key下载到public目录
看这个视频跟着做吧,我写不下去了,就是跟着这个视频做的,然后在遇到相同的题可以跟据这个模板来做,因为环境已经搭好了,只需要把题目给的源码给进行修改就行了。
web350
题目
访问/public.key获得公钥
jwt攻击参考文章https://xz.aliyun.com/t/2338
这个题是利用的第三种
这道题查看源码发现private.key是给放到route目录下了,那么我们就不可以去拿到private.key,然后进行生成新的cookie了,那么我们就得通过修改加密算法,用公钥来解题。
修改一下route里的代码,然后npm start 启动3000端口,拿到cookie,就去题目修改cookie,post发包就可以了。