【问题标题】:Is an XSS attack possible under these constraints?在这些限制下是否可能发生 XSS 攻击?
【发布时间】:2021-04-07 17:34:55
【问题描述】:

输出是:

<img src="http://example.com/[input]"
     oncontextmenu="openUrl('http://example.com/[input]')">

其中 [input] 是用户输入,通过此函数进行清理:

a => {
  a = String(a);
  a = this.replaceAll(a, "&", "&amp;");
  a = this.replaceAll(a, '"', "&quot;");
  a = this.replaceAll(a, "'", "&#39;");
  a = this.replaceAll(a, "<", "&lt;");
  return a = this.replaceAll(a, ">", "&gt;")
}

换句话说,我们似乎无法突破或使用任何形式的引号?

在这些限制下是否可能发生 XSS 攻击?或者是否可以将用户重定向到除 example.com 之外的任何域?或者实际上,从 evil.com 加载图像(或向其发出请求)?谢谢!

【问题讨论】:

  • 我不这么认为。但顺便说一句,你的整个 replaceAll() 代码本身不能替换为 a = a.encodeHTML(); 吗?
  • 取决于重用值的位置,但使用的 sanitizer 不会删除像 \u00 这样的编码字符。使用 DevTools 用新内容覆盖内联侦听器的整个参数也很容易。
  • @ScottMarcus JS 中没有.encodeHTML() 方法?

标签: javascript html security browser xss


【解决方案1】:

是的,这是一个 XSS 漏洞。

虽然您确实可以很好地转义 HTML 属性语法(这样就没有任何东西可以突破 srconcontextmenu 值),但它确实缺少

  • example.com 路径的验证。 src attribute values can be malicious on their own,如果有人让访问者加载 http://example.com/logouthttp://example.com/user-content?from=eve&amp;file=bad-iconhttp://example.com/redirect.php?target=evil.com/,他们可能会赢。是的,这取决于谁控制 example.com 以及其中可能存在的漏洞,但让受害者加载某些 URL 是许多攻击的一部分。
  • 转义JS字符串内容!假设input'.replace(/.*/,'evil.com')+',你最终会得到oncontextmenu="openUrl('http://example.com/'.replace(/.*/,'evil.com')+'')"。 HTML 实体对您没有帮助 - 属性中的 &amp;apos; 在脚本中变为 '

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-29
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2015-12-31
    • 1970-01-01
    相关资源
    最近更新 更多