JWT越权访问漏洞

JWT越权访问漏洞

文章目录

    • JWT越权访问漏洞
      • 原文参考 :[xiu](http://www.xiusafe.com/2023/02/08/JWT/)
      • 1 靶场搭建:
      • 2 JWT的头部组成
        • 2.1 头部
          • 2.1.1 alg:
          • 2.1.2 type:
        • 2.2 payload
        • 2.3 签名
      • 3 漏洞复现
        • 3.1 攻击点token(第三关)
        • 3.2 对token值base64的加密码方式进行解析加密编码,只能看。
        • 3.3 修改解密后的json,在加密成base64
          • 3.3.1 base64加密方式解密网
          • 3.3.2 将获取修改后的base64,放入解读加密方式
          • 3.3.3 最后组成base64,后面的点一定有,后台是根据点分隔取值
        • 3.4 使用bp抓包,将加密后的base64替换token值,send发送
      • 4 第四关
      • 5 第五关
      • 6 第7关

原文参考 :xiu

1 靶场搭建:

webgoat-server-8.1.0.jar  使用这个靶场

启动靶场为:java -jar webgoat-server-8.1.0.jar --server.port=8888

访问页面:http://127.0.0.1:8888/WebGoat/ —>选择注册

JWT越权访问漏洞_第1张图片

填写用户密码,点击注册

JWT越权访问漏洞_第2张图片

选择 JWT

JWT越权访问漏洞_第3张图片

选择3,有流程说明
JWT越权访问漏洞_第4张图片

选这第四关进行投票

JWT越权访问漏洞_第5张图片

切换一个用户,进行投票,并删除票,提示只有admin用户可以,使用burp suite焯去删除发送的数据包

JWT越权访问漏洞_第6张图片

bp抓到包,提示只有admin可以进行重置票

JWT越权访问漏洞_第7张图片

用户的身份在token中,分析里面值进行修改token

Cookie: access_token=eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE2OTU0NzA1MzgsImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiVG9tIn0.19GkQq28-pNBY-8wYA3LnrEOZ5gF1h2HggUH73nTh994L2ZK8sJmkx1tphdGWpgjHTQoXBDcCCZdAoVWwl1GCw;

2 JWT的头部组成

JWT越权访问漏洞_第8张图片

JWT(JSON Web Token)由三部分组成:头部(Header)、载荷(Payload)、签名
(Signature)。
 头部(Header):头部通常由两部分组成,算法类型和令牌类型。
 算法类型:指定用于生成签名的算法,例如 HMAC、RSA 或者 ECDSA。
 令牌类型:指定令牌的类型,常见的是 JWT。
头部使用 Base64Url 编码表示,并作为整个 JWT 的第一部分。头部的一个示例:
{
 "alg": "HS256",none
 "typ": "JWT"
}
 载荷(Payload):载荷存储了有关用户或实体的声明和其他有关信息。
 声明:如用户 ID、角色、权限等信息。
 注册声明:包含一些标准的声明(比如发行人、过期时间等)和一些自定义的
声明。
载荷也使用 Base64Url 编码表示,并作为整个 JWT 的第二部分。载荷的一个示例:
{
 "sub": "1234567890",
 "name": "John Doe",
 "iat": 1516239022
}
 签名(Signature):签名是对头部和载荷进行签名的结果,用于验证 JWT 的完整
性和真实性。
 签名生成方式:将头部和载荷进行 Base64Url 编码后拼接在一起,然后使
用指定的加密算法(如 HMAC、RSA)进行签名,将生成的签名添加到 JWT 中。
2.1 头部
2.1.1 alg:

​ 说明这个 JWT 的签名使用的算法的参数,常见值用 HS256(默认),HS512 等,也可以为

​ None。HS256 表示 HMAC SHA256。

2.1.2 type:

​ 说明这个 token 的类型为 JWT

2.2 payload
载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分
	* 标准中注册的声明
	* 公共的声明
	* 私有的声明
	
标准中注册的声明(建议但不强制使用):
	* iss:jwt签发者
	* sub:jwt所面向的用户
	* aud:接收jwt的一方
	* exp:jwt的过期时间,这个过期时间必须要大于签发时间
	* nbf:定义在什么时间之前,该jwt都是不可用的.
	* iat:jwt的签发时间
	* jti:jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
2.3 签名
服务器有一个不会发送给客户端的密码(secret),用头部中指定的算法对头部和声明的内容用;

此密码进行加密,生成的字符串就是 JWT 的签名

3 漏洞复现

3.1 攻击点token(第三关)
头部的alg算法HS256进行设置none【没有】

改前:
{
 "alg": "HS256",
 "typ": "JWT"
}

改后:
{
 "alg": "none",none
 "typ": "JWT"
}

JWT越权访问漏洞_第9张图片

3.2 对token值base64的加密码方式进行解析加密编码,只能看。
https://jwt.io/

颜色标记对应的头、中、尾,依依对应

JWT越权访问漏洞_第10张图片

3.3 修改解密后的json,在加密成base64
3.3.1 base64加密方式解密网
https://www.bejson.com/enc/base64/   # base64加密网

https://jwt.io/   # base64加密方式查看

JWT越权访问漏洞_第11张图片

JWT越权访问漏洞_第12张图片

ewogICJpYXQiOiAxNjk1NDcwNTM4LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJhZG1pbiIKfQ

JWT越权访问漏洞_第13张图片

3.3.2 将获取修改后的base64,放入解读加密方式
https://jwt.io/   # base64加密方式查看

JWT越权访问漏洞_第14张图片

3.3.3 最后组成base64,后面的点一定有,后台是根据点分隔取值
ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNjk1NDcwNTM4LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJhZG1pbiIKfQ.
3.4 使用bp抓包,将加密后的base64替换token值,send发送

​ 提示:恭喜你,成功完成任务

JWT越权访问漏洞_第15张图片

4 第四关

​ 修改 payload 数据,admin 修改为 true,将加密方式修改为 none。

5 第五关

密码爆破

在这里插入图片描述

修改 exp 有效时间
爆破秘钥
hashcat -m 16500 jwt.txt -a 3 -w 3 1.txt
-m 16500 这里的 16500 对应的就是 jwt 的 token 爆破;
-a 3 代表蛮力破解
-w 3 可以理解为高速破解,就是会让桌面进程无响应的那种高速
jwt.txt 是我把题目要求破解的 token 保存到的文件
pass.txt 密码字典

6 第7关

JWT越权访问漏洞_第16张图片

JWT越权访问漏洞_第17张图片

JWT越权访问漏洞_第18张图片

在这里插入图片描述

JWT越权访问漏洞_第19张图片

JWT越权访问漏洞_第20张图片

JWT越权访问漏洞_第21张图片

你可能感兴趣的:(反序列化漏洞,网络,web安全,安全,网络安全)