JWT渗透相关 #
介绍 #
JSON Web Token(JWT)。它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身份。基于token的身份验证可以替代传统的cookie+session身份验证方法。这使得JWT成为高度分布式网站的热门选择,在这些网站中,用户需要与多个后端服务器无缝交互。
分为三个部分组成
Header-payload-Signature(签名)
工作流程:post提交表单后,后端验证完成生成一个jwt,接下来返回该jwt至客户端,随后请求中带上该jwt,即可工作。
5、作为请求头可以跨域工作
对比cookie-session
1、JWT数据量小,传输速度快
2、由于是json,JWT是跨语言的,应用广
3、更适用于移动端,因为它们不支持cookie
4、避免csrf,因为不依赖cookie
头:
{
"alg": "HS256", #签名算法 HMAC SHA256
"typ": "JWT" #统一为JWT
}
payload
{
"sub": "1234567890",
"name": "Helen",
"admin": true
}
Signature(验证)
实验1-不验证签名 #
Lab: JWT authentication bypass via unverified signature 不会验证签名 #
https://portswigger.net/web-security/jwt/lab-jwt-authentication-bypass-via-unverified-signature
实现修改用户为admin
在你登录上去后产生JWT里面对应了你的用户名信息
放入到工具扫描可以得到
为了我们修改可以使用JWTTOOL -T 修改 或者使用BP插件修改
看看生成的用户修改没
我们访问/admin重新发包
eyJraWQiOiJkOTE3NDA3My1lMTcwLTQ4NDctOTAwMC04ZTcxMzY1Yjg1YmUiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTc1NTA1NjQzMSwic3ViIjoiYWRtaW5pc3RyYXRvciJ9.pQxVLaYatgGTpT24U6fh5Le3WacEkOP5_x2KW-Rg6_sVClGmUfgq1CXxHfUjQyjSGnJBIuiSoAdBS7u0m9MMdgcEz-NNPtc6CPUOcDZ2_coG9IlMFRd1sC6QOvgBTglRC4vzVMySrixSEWGDyr9cXGFGR3WhFb38dtCRHKxSTPDTC33QeqvfCtYWDqkPoYzEJ4766II_3tEYB3sMHWlveWKPuiBq7P9jg-N2y3aaToNsM_rSg8733ev8BJtkoJzoPmXlE6dhoNvdwKALYZ0Gpa1r-TbjAY0cdREhjoSuhZWjp_RXok9ddex4DDZDZwjRoh-JebOvzIng_tIgIAbDbA
成功进入管理员界面删除用户即可通过 删除也要覆盖JWT进行绕过因为他并没有验证签名
实验2 对方验证不要签名的JWT #
JWT authentication bypass via flawed signature verification #
目的也是删除用户登录admin网页
这个设置缺陷是对方接收未签名的JWT就是alg为none
这里-H 可以看到可以输入 -X a 直接让JWT签名为空不用手动输入了
我们来发包验证
可以看到成功进入
eyJraWQiOiJmZWIyMjFkOS00MWI0LTQwNGEtOGUyZi1lNjU4Mzk5YjM0MDAiLCJhbGciOiJub25lIn0.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTc1NTA1NzgxNCwic3ViIjoiYWRtaW5pc3RyYXRvciJ9.
实验3 签名弱口令 #
JWT authentication bypass via weak signing key #
https://portswigger.net/web-security/jwt/lab-jwt-authentication-bypass-via-weak-signing-key
签名也是可以爆破的,如果你爆破出签名就可以随意利用前提是他的加密算法符合
使用DudeSuite 工具爆破也可以使用john hashcat
注意爆破要输入完整的JWT
输入整个 JWT 可以确保爆破过程的完整性和准确性。有些情况下,JWT 的负载中可能包含一些与验证逻辑相关的信息(比如过期时间、用户角色等),虽然这些信息不是直接参与签名计算,但在某些场景下,它们会影响到签名验证的最终结果。通过使用完整的 JWT,工具可以模拟整个签名验证的过程,更准确地判断找到的密钥是否是正确的签名密钥 。
拿到密钥是secret1
可以直接到官网输入密钥修改了 但是前面两个实验是不可以直接修改的必须使用工具
https://www.jwt.io/
发包验证成功删除即可通过