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

题目

image-20230119164512413

然后查看源代码发现了提示。

image-20230119164723959

1
2
这里说一下url/admin    和  url/admin/的区别
前者是访问admin这个文件 后者是访问amdin目录下的index.php or index.jsp index.aspx

payload

1
去访问/admin/然后就把cookie拿出来进行base64解码,然后把user修改成admin,在进行base64编码,然后重新提交cookie到/admin/,就可以拿到flag了。

web346

题目image-20230119165715347

image-20230119195246730

拿着cookie去jwt.io解密平台查看了一下,发现是存在HS256加密的,那么我们就得去想办法获得密钥了。

然后盲猜一下是123456,结果对了,然后访问/admin/就能拿到flag了。(还是得把user修改成admin)

web347

题目

image-20230119195558015

还是这个玩意

还是和web348一样,直接猜密码是123456.

然后就可以解出来了。

web348

题目

image-20230119200532621

利用jwt爆破攻击爆破
下载地址https://github.com/brendan-rius/c-jwt-cracker具体安装方法文档中有。
使用方法 ./jwtcrack jwt

image-20230119202324686

跑半天才给我跑出来

image-20230119202436473

然后就去修改cookie访问/admin/就可以拿到flag了。

web349

image-20230119203323957

这里拿到cookie去访问的话,得到这里是RS256加密

1
RS256算法则使用私钥对消息进行签名并使用公钥进行身份验证。

利用私钥生成jwt,利用公钥解密jwt,所以我们只要有私钥然后自己重新生成就可以了。
访问/private.key得到私钥 这里的考点就是私钥泄露

image-20230119205202772

这里给的是题目的源码。

解法

image-20230119205933972

先创建一个public目录

然后进入新建的route目录,修改一下源码,把题目给的源码复制进去。(注意把user改成admin)

image-20230119210233365

然后把题目上的private.key下载到public目录

image-20230119210443791

web349_哔哩哔哩_bilibili

看这个视频跟着做吧,我写不下去了,就是跟着这个视频做的,然后在遇到相同的题可以跟据这个模板来做,因为环境已经搭好了,只需要把题目给的源码给进行修改就行了。

web350

题目

image-20230119214505677

访问/public.key获得公钥
jwt攻击参考文章https://xz.aliyun.com/t/2338
这个题是利用的第三种
在这里插入图片描述

image-20230119215019473

这道题查看源码发现private.key是给放到route目录下了,那么我们就不可以去拿到private.key,然后进行生成新的cookie了,那么我们就得通过修改加密算法,用公钥来解题。

image-20230119215315985

修改一下route里的代码,然后npm start 启动3000端口,拿到cookie,就去题目修改cookie,post发包就可以了。