我只能访问我可以修改的css文件。我有很多修改要做,我想知道是否有办法从CSS文件中执行javascript代码。
我确实发现了最新浏览器不再支持的旧漏洞。 http://dougrathbone.com/blog/2013/10/30/executing-javascript-inside-css-another-reason-to-whitelist-and-encode-user-input
正如您所看到的那样,通过调用来自其他网址的任意代码来利用此漏洞
body {
behavior:url(/user/uploadedfiles/evil-uploaded-component.htc);
}
现在,我想知道是否有其他替代方法可以做到这一点?
答案 0 :(得分:3)
IE和Firefox都包含从CSS执行JavaScript的方法。正如Paolo所提到的那样,IE中的一种方式是表达技术,但是HTC的行为也更加晦涩难懂,其中通过CSS加载了包含脚本的单独XML。存在使用XBL的Firefox类似技术。这些技术不能直接从CSS执行JavaScript,但是效果是一样的。
使用IE的HTC
使用如下CSS规则:
body {
behavior:url(script.htc);
}
并在该script.htc文件中具有以下内容:
<PUBLIC:COMPONENT TAGNAME="xss">
<PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="main()" LITERALCONTENT="false"/>
</PUBLIC:COMPONENT>
<SCRIPT>
function main()
{
alert("HTC script executed.");
}
</SCRIPT>
HTC文件在事件main()
上执行ondocumentready
功能(指HTC文档的准备情况。)
使用Firefox的XBL
Firefox使用XBL支持类似的XML脚本执行黑客。
使用如下CSS规则:
body {
-moz-binding: url(script.xml#mycode);
}
并在您的script.xml中:
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl" xmlns:html="http://www.w3.org/1999/xhtml">
<binding id="mycode">
<implementation>
<constructor>
alert("XBL script executed.");
</constructor>
</implementation>
</binding>
</bindings>
构造器标签中的所有代码都将执行(将代码包装在CDATA部分中的好主意。)
在这两种技术中,除非CSS选择器与文档中的元素匹配,否则代码不会执行。通过使用类似body
的东西,它将在页面加载时立即执行。