侧边栏壁纸
  • 累计撰写 147 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

JWT 前四关【PortSwigger Web安全学院】

温馨提示:
如果图片&格式缺失,请多次【刷新】页面。

https://portswigger.net/web-security/all-labs#jwt

通过未验证的签名绕过 JWT 身份验证

任务:修改会话令牌访问管理面板/admin,然后删除用户carlos

登录帐户:wiener:peter

1、在burp的应用市场中下载【JWT Editor】

image-20250813150249774

2、登录系统后,在【http history】中发现有高亮部分,点击后发现高亮部分都是使用了JWT认证。

image-20250813150401006

3、点击【/my-account?id=wiener】路径的请求包,发送到repeater模块中,在【JSON Web Token】模块中自动解码了JWT的头部和Payload部分。

image-20250813150442203

4、将Payload部分的wiener换为administrator,路径修改为/admin

image-20250813150632208

请求成功

image-20250813150701070

5、在响应包的模块【render】中发现delete功能。

image-20250813150814377

6、找到删除用户的链接,/admin/delete?username=carlos

image-20250813150841671

7、删除成功

image-20250813151001788

image-20250813151008953

通过有缺陷的签名验证绕过 JWT 身份验证

任务:修改会话令牌以访问管理面板/admin,然后删除用户carlos

登录帐户:wiener:peter

1、使用账户登陆后,同样有高亮部分为JWT认证模式。

image-20250813151706327

2、修改原有名称,改为administrator,再访问/admin路径。

image-20250813151815035

image-20250813151902376

image-20250813151910636

报了401,缺乏目标资源要求的身份验证凭证。

3、原有的签名算法为RS256,现在修改none会怎么样呢?

如果服务端支持 "alg": "none" 且不做验证,攻击者就可以删除签名绕过验证。

image-20250813152447718

然后在JWT字符中删除掉签名部分,保留点.

image-20250813152549512

4、找到删除用户链接。

image-20250813152635403

image-20250813152657973

5、删除成功。

image-20250813152738100

image-20250813152751826

通过弱签名密钥绕过 JWT 身份验证

任务:暴力破解网站的密钥,获取密钥后,用它对修改后的会话令牌进行签名,访问管理面板的权限/admin,然后删除该用户carlos

登录帐户:wiener:peter

1、修改Payload中的sub为administrator,然后访问/admin路径

image-20250813153439077

image-20250813153519690

2、复制JWT的值,通过kali中的hashcat破解密钥。

eyJraWQiOiIwZmRmYjNiYy1mMDE2LTQ5NDItYTEyNy05YWFmOWFhZjYxNTMiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTc1NTA3NDAwOCwic3ViIjoiYWRtaW5pc3RyYXRvciJ9.X-jEPb4bwH7ybTwSCRWL4MoVm_6P1Eww2cOORLkZIvA

字典:https://github.com/wallarm/jwt-secrets/blob/master/jwt.secrets.list

密钥为:secret1

3、伪造签名密钥,在【JWT Editor】插件中,选择新创建一对密钥。

image-20250813153838498

4、点击生成。

image-20250813154103203

5、将密钥secret1进行Base64编码后,替换掉生成的K值。

image-20250813154301000

点击ok

6、返回响应包中的【JSON Web Token】选项卡,点击sign,选择生成的密钥。

image-20250813154441238

image-20250813154502613

7、再次选择发包,响应码为200,成功。

image-20250813154607896

8、成功删除。

image-20250813154646980

image-20250813154636255

image-20250813154717405

image-20250813154732256

通过 jwk 标头注入绕过 JWT 身份验证

任务:修改并签署一个 JWT,该 JWT 允许您访问 的管理面板/admin,然后删除用户carlos

登录帐户:wiener:peter

1、登录账户后,观察请求包,发现当前的JWT签名算法为【RS256】。

image-20250813155342706

2、同样在【JWT Editor】插件中新创建一个RSA的key。

image-20250813155521277

点击生成后,再点击完成

image-20250813155605132

image-20250813155623384

3、返回请求包中,将payload中的sub修改为administrator

image-20250813155749715

4、点击底部的【Attack】,选择Embedded JWK,出现提示时,选择新生成的 RSA 密钥,然后单击OK

image-20250813155843571

5、将路径修改为/admin,之后成功访问管理面板。

image-20250813155941939

6、删除成功。

image-20250813160006104

image-20250813160024215

image-20250813160037901

0
博主关闭了所有页面的评论