定义内联 JavaScript 表达式的替代方法

Alternative to define in-line javascript expressions

本文关键字:方法 表达式 JavaScript 定义      更新时间:2023-09-26

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

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

我知道这些表达式自IE 8以来已弃用。它在IE7中工作正常。 所以,当我输入上面的有效负载时,Web应用程序返回

<div></div>

它撕掉所有其他属性和值。但是当我像

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

不是有效的有效负载意味着它不会执行。因此,我试图弄清楚是否有任何替代方法可以在内联样式属性中定义表达式,例如我们是否可以放置除single_quote之外的其他东西,这不会破坏代码。或者,如果还有其他方法可以通过样式属性执行javascript。

expression()

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

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

在javascript(JScript)中,()调用一个函数。因此,在调用表达式名称之前,在表达式名称后抛出'"是无效的语法。除了"single_quote"之外,您可能还可以放置其他不会破坏代码的东西,但您不会将其放在()之前。尝试查找 JScript 语法。这是最后一个可能有帮助的资源。