【问题标题】:Alternative to define in-line javascript expressions定义内联 javascript 表达式的替代方法
【发布时间】:2014-12-25 14:07:50
【问题描述】:

我一直在学习网络应用安全渗透测试。场景是,为练习而开发的测试环境演示 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。

【问题讨论】:

  • 注入的输入是否有任何转义?如果没有,您可以关闭样式属性并使用"&gt; 标记并在那里注入&lt;script&gt; 标记。
  • 是的,有转义。

标签: javascript css expression xss


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的资源和非常好的信息。样式属性是我必须注入的全部内容。如果其他人可以提供帮助,我会再等一段时间,否则会将您的答案标记为正确并 +100。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 2013-06-13
  • 2018-01-10
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多