正文
目标:target.com
在子域sub1.target.com
上,我发现了一个XSS漏洞。由于针对该子域的漏洞悬赏较低,我希望通过此漏洞将攻击升级至app.target.com
,因为该子域的悬赏更高。
分析认证机制后,我发现:
sub1.target.com
:使用基于Cookie的 JWT(JSON Web Token)进行认证。app.target.com
:使用基于Authorization头的 JWT 进行认证。
虽然两个子域的JWT值不同,但sub1.target.com
的 JWT 可以在 app.target.com
上进行认证。
因此,我的思路是:通过已知的 XSS 漏洞窃取 sub1.target.com 的 JWT 令牌,从而接管用户在 app.target.com 的账户。
然而,由于 sub1.target.com
的 JWT 令牌受 HttpOnly 标志保护,这使得我的想法无法实现。
通过进一步渗透测试,我发现该子域auth.target.com
的OAuth响应中包含 JWT 令牌:
从请求包中可以看到,存在一个GET参数response_mode
,当我将其值从post
更改为get
时,响应包仍然会返回 JWT 令牌:
因此,我的计划是:利用在 sub1.target.com
的 XSS 漏洞,将 auth.target.com
的 OAuth 端点加载到 iframe 中。当受害者在 iframe 中完成认证后,我便可以提取token
并发送到我的服务器。
然而,浏览器通常会限制不同源(不同域名、协议或端口)之间的交互,这被称为同源策略(SOP),而两个子域名被视为不同的源,因此这个想法也行不通。
在过去,可以通过在两个子域名的 JavaScript 中显式设置 document.domain
来实现跨域访问,即在 sub1.target.com
和 auth.target.com
中都设置 document.domain = 'target.com';
。这样,它们就共享了同一个源,浏览器将允许 JavaScript 之间的交互(例如相互访问变量、调用函数等)。
然而,为了增强安全性,现代浏览器(如 Chrome)已不再支持通过 document.domain
解除同源限制的方法。
经过一番探索,当我访问以下链接时:
我被重定向到:
https://sub1.target.com#token=xxx,
那么,我们就能够访问 location.href
窗口的属性并从 URL 中提取令牌。
主要的XSS Payload如下:
var auth = document.createElement('iframe');
xe.setAttribute('src',' https://auth.target.com/oauth?client_id=redacted&redirect_uri=https://auth.target.com/endpoint.jsp&response_mode=get&response_type=code&scope=redacted&state=redacted&nonce=redacted');
auth.setAttribute('id','linglongsec')
token = new URLSearchParams(document.getElementById("linglongsec").contentWindow.location.hash.split('#')[1]).get('token');
通过 XSS 漏洞,我在 sub1.target.com
创建了一个 iframe,指向该端点:
该端点会重定向至:
https://sub1.target.com#token=xxx
简单来说,sub1.target.com
界面上新开了一个 iframe,指向
https://sub1.target.com#token=xxx
由于这两个 URL 属于同一个域,sub1.target.com
上的 XSS的 JS 脚本可以访问 https://sub1.target.com#token=xxx
的 URL 部分,而不会受到同源策略的限制。
以下语句将获取 token 值:
URLSearchParams(document.getElementById("linglongsec").contentWindow.location.hash.split('#')[1]).get('token');
最后 JavaScript 代码将token值发送到我的服务器上,实现账户接管。
这里巧妙的是Payload中response_mode的值为get而不是post
完整的攻击过程图示:
原文出处:
https://7odamoo.medium.com/xss-oauth-misconfigs-token-theft-and-ato-d0837c44cd31
原文始发于微信公众号(玲珑安全):利用XSS、OAuth配置错误实现token窃取及账户接管 (ATO)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论