我只能访问一个我可以修改的css文件。我有很多修改要做,我想知道是否有办法从CSS文件中执行javascript代码。
我确实发现了一个在最新浏览器中不支持的旧漏洞。http://dougrathbone.com/blog/2013/10/30/executing-javascript-inside-css-another-reason-to-whitelist-and-encode-user-input
如您所见,该漏洞是通过从另一个url调用任意代码来利用的,如下所示
body {
behavior:url(/user/uploadedfiles/evil-uploaded-component.htc);
}现在,我想知道是否有其他方法可以做到?
发布于 2018-09-30 18:25:22
IE和Firefox都包含从CSS执行JavaScript的方法。正如Paolo所提到的,IE中的一种方式是表达式技术,但也有更为模糊的HTC行为,其中包含脚本的单独XML是通过CSS加载的。使用XBL的Firefox也有类似的技术。这些技术并不直接从CSS执行JavaScript,但是效果是一样的。
HTC与IE
使用如下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文档的就绪状态)。
带有火狐的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的内容,它将在页面加载时立即执行。
https://stackoverflow.com/questions/48183134
复制相似问题