JWT身份验证绕过导致管理面板接管
🍪从一个简单的cookie标准,到Accont被接管😈。这个漏洞,是一个“简单”的错误,我成功地访问了一个网站的管理面板。
1. 什么是 JWT?
对于那些不知道的人来说, JWT( JSON Web Token )是一种广泛用于身份验证的身份验证方法,以前是cookie(仍在使用),但通常JWT更常见,它们可以伴随(并且应该都)带有由服务器签名的签名,正是这个签名验证了 JWT 实际上是有效的
-
标头:定义令牌的类型和签名算法。
-
Payload :包含身份验证信息等有价值的信息
-
签名:使用服务器用来验证令牌的密钥对令牌进行签名。
通常 JWT 采用 base64 编码......
eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImVtYWlsIjogImpvaG5kb2VAZXhhbXBsZS5jb20iLCAiYWRtaW4iOiB0cnVlLCAiaWF0IjogMTYwOTQ1OTIwMH0
解码(来自上面的示例):
{
"sub": "1234567890",
"name": "John Doe",
"email": "[email protected]",
"admin": true,
"iat": 1609459200
}
你可能在想,如果有人修改它,我们能做些什么。但这就是它变得复杂的地方,因为服务器是通过订阅进行检查的。
让我们拭目以待!难以想象,像 JWT 这样基本的东西还有可能在2024年变得脆弱吗?
2. 利用过程
当你访问域名时,您通常会得到一个“默认”ID,例如访客或匿名,这是意料之中的……
获取 https://www.example.com/
请求中没有JWT参数,属于正常情况,我们没有登录或任何需要 JWT 的东西,但是,服务器会开始用一些东西来标记我们......
<script>var atlasCode = "eyJhIjo5NDk2LCJjIjo0NDQ3MzM2NCwibiI6MjEsInMiOjI0MSwiZSI6ODUzLCJwIjozfQ==";</script>
这不是为了身份验证,更多的是跟踪用户在哪里、在哪个页面,更像是一个跟踪器……
从这里开始
在我创建帐户后,会设置一个 cookie 来验证我就是我,因为我就是我。
Set-Cookie: MDH=%21eyJvX2dlbmRlciI6IkEiLCJpc0xvZ2dlZCI6Im4iLCJscGFnZWlkIjo3LCJra0lEIjo4OTg3NiwibGFuZyI6InVzIiwibGFuZCI6ImRlIiwiU0lEIjoiMCIsIkNPTiI6IjE0MTYwMTAwMCIsIkxPR0lOIjoiaiIsIk1ESF9VX0lEIjoiMTMwOTgyMDUxIiwibmljayI6ImhvaGt5dGVzdCIsImVtYWlsIjoiaG9oa3lAYnVnY3Jvd2RuaW5qYS5jb20iLCJnZW5kZXIiOiJNIiwiTE9HSU5USU1FIjoxNzI4OTA4MzY3fQ%3D%3D%24f46a10d0ab6db8eebcd4c7afac6a4d332be8b4bf;
这样就简单了。
使用Burp Suite中的工具,我可以更清楚地可视化 JWT 中的内容:
我不能只更改像“ u_id”这样的参数,因为这会更改 JWT 并且签名将无效。
如果我不改变它。签名会保持有效状态。
在右侧,我有一些可选项尝试,还有一个简单的更改,例如更改昵称和“ u_id“。
JWT 保持有效!!!
我做了一个管理操作,对服务器或用户没有真正的影响,只对我有影响,而且它有效......
3. 参考链接
-
【burp插件-JSON Web Tokens】:https://portswigger.net/bappstore/f923cbf91698420890354c1d8958fee6
原文始发于微信公众号(埋藏酱油瓶):JWT身份验证绕过带来的风险
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论