篡改JWT是怎样实现账户劫持,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
专注于为中小企业提供成都网站设计、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业淄川免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
JSON Web Token (JWT) 是基于RFC 7519标准定义的,以JSON形式在网络应用间安全传递信息的一种紧凑而独立的方法,尤其适用于分布式站点的单点登录(SSO)场景。JWT携带的属性信息通过HMAC算法的电子签名方式被用来在客户端和服务端之间进行身份验证,其默认的签名算法为HMAC SHA256。
JWT的结构
JWT主要由三个部分组成,各部分之间为.分开,它们分别是:
Header(头部)
Payload(负载)
Signature(签名)
样式为:
xxxxx.yyyyy.zzzzz
我发现的漏洞是这样的。通过利用目标系统的邀请功能并修改其中携带的JWT token信息,无需点击确认链接,即可实现对用户邮件地址和身份的验证。假设我有一个邮箱地址是attacker@attacker.com,然后我在目标网站的邀请功能中发起对该邮箱地址的一个邀请操作,接下来,我登录该邮箱attacker@attacker.com后,会在收件箱中收到一个URL形式携带JWT的确认链接。该过程在Burp中的响应如下:
我在收件箱中收到的URL形式携带JWT的确认链接如下:
链接后即是一串JWT token,通过网站https://jwt.io/,解码该JWT token后的结果如下:
到此,我第一时间想到的就是尝试用上述邀请功能邀请目标网站管理员的对应邮箱admin@company.com,操作之后,Burp中的响应消息如下:
然后,在收件箱中同样也收到了一个携带JWT的URL链接,通过JWT编码解码操作,我尝试把其中我自己邀请人的attacker@attacker.com更改为admin@company.com,把其中的id也更改为admin的ID,并把其时间戳(timestamp)即“created date”:”xxxxxxxx”也做了相应修改,然后再次通过编码生成新的JWT。利用该JWT我就可以来确认用户身份,并重置与邮箱admin@company.com对应的公司管理员用户密码。
因此,后续可以利用该JWT的延伸凭据信息,去登录目标网站公司如业务支持等不同业务端的SSO接口。
该方法由于需要知道对方受害者用户的ID号信息,因此并不适用于任意用户,利用方式还是存在一定难度,但至少我可以通过注册两个用户的方式来验证漏洞。就比如用其它邮箱注册了一个测试用户(假设为Victim),从账户信息中可以看到其用户id为:jyAzV7KhT,然后我用之前我的attacker@attacker.com发起密码重置请求,然后从我的邮箱attacker@attacker.com中收到一个携带JWT的重置链接,如下:
把该JWT放到https://jwt.io/的JWT解码工具中解密,在右边Decode区域得出具体的JWT三部份内容,接着,把其中的id更改为Victim账户的id:jyAzV7KhT。这样就生成了Victim账户的密码重置JWT了,把它放入上述URL确认链接之后,就能更改Victim账户密码了!
目标网站在客户端进行JWT的生成,这样一来,就可导致JWT可被客户端篡改的风险,安全的方式是把JWT放到服务端生成。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。