玩转JSON Web令牌:从漏洞利用到账户劫持

本文详细介绍了如何通过篡改JSON Web令牌(JWT)的结构,绕过服务器验证,实现未授权邮箱确认、密码重置甚至账户接管,揭示了JWT在实现中的常见安全陷阱。

玩转JSON Web令牌:从漏洞利用到账户劫持

作者:Muhammad Qasim Munir

大家好,希望各位都安好。今天我想分享一些关于JSON Web令牌(JWT)的内容。在这篇文章中,我将讲述如何在不使用确认令牌的情况下确认邮箱、重置密码以及接管公司邮箱。那么,让我们开始吧。

什么是JSON Web令牌?

JSON Web令牌(JWT)是一种开放标准(RFC 7519),定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为JSON对象。这些信息可以被验证和信任,因为它是数字签名的。JWT可以使用密钥(通过HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。

JSON Web令牌的结构是什么?

在其紧凑形式中,JSON Web令牌由三个部分组成,用点(.)分隔,分别是:

  • 头部(Header)
  • 有效载荷(Payload)
  • 签名(Signature)

因此,一个JWT通常看起来像这样:xxxxx.yyyyy.zzzzz

现在让我们回到文章内容。

无确认令牌确认邮箱

在这里,我通过滥用邀请功能和更改JWT令牌,能够在没有确认令牌的情况下确认邮箱。

假设[email protected]是我的邮箱,我邀请自己加入用户,并在收件箱中收到了确认令牌。

在Burp中的响应类似于:

令牌类似于:

解码JWT令牌:

现在我邀请了[email protected],在Burp中的响应是:

我在这里所做的是更改我在收件箱中收到的JSON Web令牌。我将邮箱从[email protected]更改为[email protected],将攻击者ID更改为管理员ID,并将时间戳更改为签发时间戳,正如你在响应中看到的“created date”:“xxxxxxxx”。(有时服务器会验证签发时间戳以验证令牌。)我能够确认用户并设置[email protected]的密码。

我们可以使用这些凭据登录公司的不同单点登录(SSO)集成,如支持面板等。

重置其他用户的密码

这种方法有点棘手。然而,我能够重置我组织用户的密码,因为我能够通过用户标签和浏览器历史记录的物理访问看到他们的ID。

现在我使用我的邮箱[email protected]请求了一个密码重置链接,重置链接是:

通过将我的ID更改为目标用户ID,我能够更改密码。

该Web应用程序没有验证计算出的签名,因此我能够重新编码JWT。

为了更好地理解,你可以查看: https://jwt.io/introduction/ https://hackerone.com/reports/638635

就这样了,各位!感谢阅读,别忘了分享你的想法。

另外,看看https://blog.securitybreached.org/2020/03/17/getting-started-in-android-apps-pentesting/

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计