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

作者 : admin 本文共2541个字,预计阅读时间需要7分钟 发布时间: 2024-06-17 共1人阅读

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

Cookie

存储在客户端

缺点:容易被盗取

Session

存储在服务器

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

Token

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

  • 加密

JWT

概述

json web token

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

JWT 是 Token 的一种实现方式

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

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

结构

解析网站

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 的签发时间

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

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

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

访问 http://10.9.47.221:8888/WebGoat

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

注册,登录

WebGoat–JWT tokens–4 垂直越权

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

登录 Guest 外的用户

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

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

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

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

注意去掉分号和最后的 JESSIONID

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE3MDI4MDM3NzMsImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiU3lsdmVzdGVyIn0.hUJeIlFYuLSVpAJL8kCQ48bsHcyPTccWJTVHehGK5-gC_kMG3HxD2x0hytA32WJStgZR_mzT7QUOr5rZA0NJxg

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

打开解析网站

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

将头部中的加密方法 HS512 更改为 none

{
  "alg": "HS512"
}

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

ewogICJhbGciOiAibm9uZSIKfQ

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

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

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

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

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

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

复制此时的 JWT Header 和 Payload(注意最后的 .),普通用户再次清空投票,将 Token 换位此时的 JWT,即以 admin 身份执行

ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNzAyODAzNzczLAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJTeWx2ZXN0ZXIiCn0.

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

成功清空票数

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

WebGoat–JWT tokens–5 密钥爆破

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

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

eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMjA0MzA2MCwiZXhwIjoxNzAyMDQzMTIwLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.5Y4vwpUyznrx6NE3QPOiBq2zEmtav5MarHHhMHJ0Zqg

准备 1.txt 密钥字典

victory
secret1
business
washington

kali 执行命令

hashcat -m 16500 jwt.txt -a 3 -w 2 1.txt --force

爆破出密钥 washington

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

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

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

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

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

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

提交 jwt,成功过关

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

WebGoat–JWT tokens–7 平行越权

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

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

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

点击 here 查看日志

复制 Token

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1MjYxMzE0MTEsImV4cCI6MTUyNjIxNzgxMSwiYWRtaW4iOiJmYWxzZSIsInVzZXIiOiJUb20ifQ.

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

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

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

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

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

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

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

将 Token 前两部分复制

ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNTI2MTMxNDExLAogICJleHAiOiAxNzAyMDgyODkwLAogICJhZG1pbiI6ICJmYWxzZSIsCiAgInVzZXIiOiAiVG9tIgp9.

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

点击付款,抓包

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

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

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

成功

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

本站无任何商业行为
个人在线分享-虚灵IT资料分享 » Token 绕过 / JWT漏洞 / 垂直越权 / WebGoat–JWT靶场 tokens–4、5、7 关
E-->