JWT安全及webgoat解题
- Java安全
- 2023-09-20
- 622热度
- 0评论
首先了解JDBC预编译:https://blog.csdn.net/Lirx_Tech/article/details/51148853
然后了解SQL之CASE WHEN用法详解:SQL之CASE WHEN用法详解_涛声依旧叭的博客-CSDN博客
其实CASE WHEN类似JAVA中的IF ELSE语句
JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
JWT由三部分组成:
header.payload.signature
HEADER
头部包含两个部分ALGORITHM & TOKEN TYPE
alg 说明这个JWT的签名使用的算法的参数,常见值用HS256(默认),HS512等,也可以为None。HS256 表示 HMAC SHA256。
typ 说明这个 token 的类型,此例中为 JWT
payload
载荷就是存放有效信息的地方。这些有效信息包含三个部分
- 标准中注册的声明
- 公共的声明
- 私有的声明
标准中注册的声明 (建议但不强制使用) :
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
signature
签证信息由三部分组成:
header (base64UrlEncode后)
payload (base64UrlEncode后)
secret
Base64URL编码
在HTTP传输过程中,Base64编码中的"=","+","/"等特殊符号通过URL解码通常容易产生歧义,因此产生了与URL兼容的Base64URL编码在Base64URL编码中,"+"会变成"-","/"会变成"_","="会被去掉,以此达到url safe的目的。
Refresh token
JWT使用refresh token去刷新access token而无需再次身份验证。 refresh token的存活时间较长而access token的存活时间较短。
开始webgoat题目
未验证签名越权

意思很明确通过JWT成为管理员
先以Tom身份抓包看看,点垃圾桶抓

发现

复制到网站https://jwt.io/

没有密匙,就改alg值改为none,admin改为true,得到字符串

或者可以直接base64编码,但是要去除=这个符号,上面有介绍

最后拼接得,最后signature不用写,因为alg值为none

换了bp的值

