玩转JSON Web Tokens:从漏洞挖掘到账户劫持实战
作者:Muhammad Qasim Munir
大家好,希望各位一切安好。今天我想分享关于JSON Web Tokens(JWT)的相关内容。在这篇文章中,我将介绍如何在不使用确认令牌的情况下确认邮箱、重置密码以及接管公司邮箱。
什么是JSON Web Token?
JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。由于是数字签名的,因此可以验证和信任该信息。JWT可以使用密钥(通过HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
JSON Web Token的结构是什么?
在其紧凑形式中,JSON Web Tokens由三个部分组成,各部分之间用点(.)分隔,分别是:
- 头部(Header)
- 有效载荷(Payload)
- 签名(Signature)
因此,JWT通常如下所示:
xxxxx.yyyyy.zzzzz
现在回到正文。
无需确认令牌确认邮箱:
在这里,我通过滥用邀请功能和更改JWT令牌,实现了无需确认令牌即可确认邮箱。
假设攻击者邮箱attacker@attacker.com
属于我,我邀请自己加入用户,并在收件箱中收到了确认令牌。
Burp中的响应类似于:
令牌类似于:
解码JWT令牌:
现在我邀请了admin@company.com
,Burp中的响应是:
我在此处所做的是更改收件箱中收到的JSON Web令牌。我将邮箱从attacker@attacker.com
更改为admin@company.com
,将攻击者ID更改为管理员ID,并将时间戳更改为签发时间戳,如响应中“created date”:“xxxxxxxx”所示。(有时服务器会验证签发时间戳以验证令牌。)我成功确认了用户并设置了admin@company.com
的密码。
我们可以使用这些凭据登录公司的不同SSO集成,例如支持面板等。
重置其他用户的密码:
这种方法有点棘手。但是,由于我能够通过用户选项卡和浏览器历史记录的物理访问看到组织用户的ID,因此我能够重置他们的密码。
现在我使用我的邮箱attacker@attacker.com
请求密码重置链接,重置链接为:
将我的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/