我们无法刷新此账户的凭据_篡改JWT实现账户劫持

57aedd24b841c57be6c46e564b54bf93.png

今天分享的这篇Writeup是关于JSON Web Tokens (JWT)的,其利用点是可以绕过用户邮件验证码确认,实现密码重置从而达到账户劫持目的。

JSON Web Token,JWT

JSON Web Token (JWT) 是基于RFC 7519标准定义的,以JSON形式在网络应用间安全传递信息的一种紧凑而独立的方法,尤其适用于分布式站点的单点登录(SSO)场景。JWT携带的属性信息通过HMAC算法的电子签名方式被用来在客户端和服务端之间进行身份验证,其默认的签名算法为HMAC SHA256。

JWT的结构

JWT主要由三个部分组成,各部分之间为.分开,它们分别是:

Header(头部)

Payload(负载)

Signature(签名)

样式为:

xxxxx.yyyyy.zzzzz

无需token进行邮件地址验证

我发现的漏洞是这样的。通过利用目标系统的邀请功能并修改其中携带的JWT token信息,无需点击确认链接,即可实现对用户邮件地址和身份的验证。假设我有一个邮箱地址是attacker@attacker.com,然后我在目标网站的邀请功能中发起对该邮箱地址的一个邀请操作,接下来,我登录该邮箱attacker@attacker.com后,会在收件箱中收到一个URL形式携带JWT的确认链接。该过程在Burp中的响应如下:

fcb74c14f01cb3a26ff969f8c8790254.png

我在收件箱中收到的URL形式携带JWT的确认链接如下:

3c4ea799a3ce08390a76072cb5b08e45.png

链接后即是一串JWT token,通过网站https://jwt.io/,解码该JWT token后的结果如下:

f308f8b7230b9e0e0ee136b6e03c3707.png

到此,我第一时间想到的就是尝试用上述邀请功能邀请目标网站管理员的对应邮箱admin@company.com,操作之后,Burp中的响应消息如下:

b9563c017ce8be64044bb8afda0da493.png

然后,在收件箱中同样也收到了一个携带JWT的URL链接,通过JWT编码解码操作,我尝试把其中我自己邀请人的attacker@attacker.com更改为admin@company.com,把其中的id也更改为admin的ID,并把其时间戳(timestamp)即“created date”:”xxxxxxxx”也做了相应修改,然后再次通过编码生成新的JWT。利用该JWT我就可以来确认用户身份,并重置与邮箱admin@company.com对应的公司管理员用户密码。

abca78f889596490457fe817baa3beff.png

因此,后续可以利用该JWT的延伸凭据信息,去登录目标网站公司如业务支持等不同业务端的SSO接口。

重置其他用户密码

该方法由于需要知道对方受害者用户的ID号信息,因此并不适用于任意用户,利用方式还是存在一定难度,但至少我可以通过注册两个用户的方式来验证漏洞。就比如用其它邮箱注册了一个测试用户(假设为Victim),从账户信息中可以看到其用户id为:jyAzV7KhT,然后我用之前我的attacker@attacker.com发起密码重置请求,然后从我的邮箱attacker@attacker.com中收到一个携带JWT的重置链接,如下:

547bff985794b40a1acb6c7b60949de8.png

把该JWT放到https://jwt.io/的JWT解码工具中解密,在右边Decode区域得出具体的JWT三部分内容,接着,把其中的id更改为Victim账户的id:jyAzV7KhT。这样就生成了Victim账户的密码重置JWT了,把它放入上述URL确认链接之后,就能更改Victim账户密码了!

58ede0e555b1aa34c4ea52c565ad7316.png

漏洞原因

目标网站在客户端进行JWT的生成,这样一来,就可导致JWT可被客户端篡改的风险,安全的方式是把JWT放到服务端生成。

技术参考

https://jwt.io/introduction/

https://hackerone.com/reports/638635

*参考来源:securitybreached,clouds 编译整理,转载请注明来自 FreeBuf.COM

4b27490e3173b87e9d16ec449ac1bdb0.gif

精彩推荐

6a02881db6db0513594739e3a5133d5b.png

c8bdab975efc573a4631b0f2ed0350e1.png

4b68e384565e4a95f4a06b43c32b02a5.png

e094eff2254adcb6ec49b8589819438a.png

459e601860f5682ebd53f47696da1133.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值