【问题标题】:Examples of XSS that I can use to test my page input?我可以用来测试我的页面输入的 XSS 示例?
【发布时间】:2011-08-29 15:42:32
【问题描述】:

我遇到了 XSS 问题。具体来说,我有一个单独的注入 JS 警报,表明我的输入存在漏洞。我对 XSS 进行了研究并找到了示例,但由于某种原因我无法让它们工作。

我能否获得 XSS 示例,我可以将其放入我的输入中,当我将其输出给用户时,我会看到某种变化,例如警报,知道它是易受攻击的吗?

我正在使用 PHP,我将实现 htmlspecialchars(),但我首先尝试重现这些漏洞。

谢谢!

【问题讨论】:

  • XSS、SQL注入等代码注入漏洞,往往是由于使用不当或缺少数据转义造成的。在 PHP 中,您必须在您输出到不打算作为标记的页面的所有内容上使用htmlspecialchars()。为了节省一些输入,您可以使用包装器 function h($s) { return htmlspecialchars(s); } 并在任何地方使用 h()
  • 在实施htmlspecialchars()(或htmlentities()之前测试XSS漏洞有什么意义?
  • 另外,请始终考虑您所处的“代码级别”:例如:将用户生成的数据写入 HTML 评论时,您实际上不必htmlspecialchars() 它,但您必须记得从该数据中删除任何出现的-->,否则您可能存在 XSS 漏洞。
  • @Mike 好点,不过,我很好奇,因为我已经用其他测试实现了 striptags() 并且这种情况仍在发生。更不用说如果我在实现 htmlspecialchars() 之前不重现漏洞,那么我就不会“感觉”它会起作用。主要是为了好奇和学习。 :D
  • @Tomalak 感谢您的建议!你知道使用 striptags() 和 htmlspecialchars() 有什么用吗? (我应该为此提出一个新问题吗?)谢谢!!!

标签: php javascript security xss


【解决方案1】:

你可以使用这个 firefox 插件:

XSS-Me 是用于测试反射跨站点的 Exploit-Me 工具 脚本(XSS)。它目前不测试存储的 XSS。

工具通过提交您的 HTML 表单并替换表单来工作 带有代表 XSS 攻击的字符串的值。如果 生成的 HTML 页面设置了特定的 JavaScript 值 (document.vulnerable=true) 然后该工具将页面标记为易受攻击 到给定的 XSS 字符串。该工具不会试图妥协 给定系统的安全性。它寻找可能的入口点 用于对系统的攻击。没有端口扫描,数据包 嗅探、密码黑客攻击或防火墙攻击 工具。

您可以将工具所做的工作视为与 网站的 QA 测试人员手动将所有这些字符串输入 表单域。

【讨论】:

  • 这个工具很棒,我强烈推荐!螺丝重新发明轮子
  • 5.0 版不支持。有人在 5.0 上成功使用过吗?
  • 您可以通过包含一个简单示例(如answer by ComFreek)并然后深入了解 XSS Me 的优点来改进此答案。
【解决方案2】:

例如:

<script>alert("XSS")</script>
"><b>Bold</b>
'><u>Underlined</u>

【讨论】:

    【解决方案3】:

    使用一些自动化工具非常好,但是您不会从中获得任何见解或经验。

    XSS 攻击的目的是在浏览器窗口中执行 javascript,这不是网站提供的。所以首先你必须看看用户提供的数据是在什么背景下打印在网站上的;它可能在&lt;script&gt;&lt;/script&gt; 代码块内,它可能在&lt;style&gt;&lt;/style&gt; 块内,它可能被用作元素&lt;input type="text" value="USER DATA" /&gt; 或例如&lt;textarea&gt; 的属性。根据这一点,您将看到将使用什么语法来转义上下文(或使用它);例如,如果您在&lt;script&gt; 标记内,则关闭函数的括号并以分号结束行可能就足够了,因此最终注入看起来像); alert(555);。如果提供的数据用作 html 属性,则注入可能看起来像 " onclick="alert(1)",如果您单击该元素将导致 js 执行(这个区域非常适合玩,尤其是 html5)。 关键是,xss 的上下文与任何可能存在的过滤/清理功能一样重要,并且通常可能存在自动化工具无法捕捉到的细微差别。正如您在上面看到的,即使没有引号和 html 标签,在有限的情况下您也可以绕过过滤器并执行 js。

    还需要考虑浏览器编码,例如,如果目标浏览器具有 utf7 编码(并且您以这种方式对注入进行编码),您可能能够绕过过滤器。过滤器规避是另一回事,但是如果使用正确,当前的 PHP 函数是非常安全的。

    这里还有一个足够长的XSS vectors列表

    最后,这是一个在网站上发现的 XSS 字符串的实际示例,我向您保证,没有一个扫描仪会发现它(有各种过滤器和单词黑名单,页面允许插入基本的 html 格式以自定义您的个人资料页面):

    &lt;a href="Boom"&gt;&lt;font color=a"onmouseover=alert(document.cookie);"&gt; XSS-Try ME&lt;/span&gt;&lt;/font&gt;

    【讨论】:

      【解决方案4】:

      即席测试是可以的,但我也建议您尝试使用 Web 应用程序漏洞扫描工具,以确保您没有遗漏任何东西。

      acunetix 非常好,可以免费试用他们的应用程序:

      http://www.acunetix.com/websitesecurity/xss.htm

      (请注意,我与这家公司没有任何关系,但我使用该产品测试了我自己的应用程序)。

      【讨论】:

      • 不幸的是,跨站点脚本是自动扫描器真正难以发现的一件事。他们错过了野外的大多数易受攻击的设置,并且只对最简单的广泛开放的代码进行攻击。
      猜你喜欢
      • 1970-01-01
      • 2010-09-11
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      相关资源
      最近更新 更多