本帖最后由 gclome 于 2020-6-1 20:30 编辑
原文链接:篡改JWT实现账户劫持
今天分享的这篇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进行邮件地址验证
我在收件箱中收到的URL形式携带JWT的确认链接如下:
因此,后续可以利用该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放到服务端生成。
技术参考https://jwt.io/introduction/ https://hackerone.com/reports/638635
*参考来源:securitybreached,clouds 编译整理,转载请注明来自 FreeBuf.COM
|