替代定义内联javascript表达式

时间:2014-12-25 14:07:50

标签: javascript css expression xss

我一直在学习Web应用程序安全渗透测试。该场景是,测试环境演示Web应用程序中存在一个跨站点脚本漏洞,该漏洞是为练习而开发的。我有一个基于javascript表达式的xss有效负载:

<div style="width: expression(alert(/XSS/))"></div>

我知道自IE 8以来表达式已被弃用。它在IE7中运行良好。因此,当我输入上述有效负载时,Web应用程序返回

<div></div>

它会破坏所有其他属性和值。但当我改变有效载荷时

<div style="width: expression'(alert(/XSS/))'">

它不是有效的有效载荷意味着它不会执行。所以,我想弄清楚是否有任何替代方法可以在内联样式属性中定义表达式,就好像我们可以放置除了不会破坏代码的single_quote之外的其他东西。或者,如果有任何其他方式通过style属性执行javascript。

1 个答案:

答案 0 :(得分:3)

expression()是动态指定html节点属性的唯一方法。它将任何有效的JScript表达式作为参数。所以从技术上讲,没有办法在html节点上通过style属性执行javascript(JScript!== javascript)。

此功能不存在(或已被弃用)的原因是因为它会产生相当大的安全漏洞。如果你想拥有动态html元素,你可以用css解决这个问题,特别是通过media queries。但是,如果您想沿着这条路走下去,请尝试查看expression()文档。

在javascript(JScript中)中,()调用一个函数。因此,在调用表达式名称之前抛出'"是无效的语法。除了“single_quote”之外,你可以放置其他东西,它不会破坏代码,但你不会把它放在()之前。尝试查找JScript语法。这可能是一个last resource