有没有办法从css文件中执行javascript?

时间:2018-01-10 08:27:36

标签: javascript jquery html css security

我只能访问我可以修改的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);
    }

现在,我想知道是否有其他替代方法可以做到这一点?

1 个答案:

答案 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的东西,它将在页面加载时立即执行。