我一直在学习网络应用安全渗透测试。该场景是,在为练习而开发的测试环境演示 Web 应用程序中存在跨站点脚本漏洞。我有一个基于 javascript 表达式的 xss 负载:
<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 节点上的样式属性执行 javascript (JScript !== javascript)。
此功能不存在(或已弃用)的原因是它会造成相当大的安全漏洞。如果你想拥有动态的 html 元素,你可以用 css 来解决这个问题,特别是通过 media queries .但如果你想沿着这条路走下去,请尝试查看 expression()
文档。
在 javascript(以及 JScript)中,()
调用一个函数。因此,在调用表达式名称之前,在表达式名称之后抛出 '
或 "
是无效语法。除了“single_quote”之外,您可能还可以放置其他不会破坏代码的内容, 但您不会将它放在 ()
之前。尝试查找 JScript 语法。这里有一个 last resource 可能会有所帮助。
关于javascript - 定义内联 javascript 表达式的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27647901/