【问题标题】:Execute JavaScript for XSS without script tags执行不带脚本标签的 XSS 的 JavaScript
【发布时间】:2016-09-22 22:28:21
【问题描述】:

我正在学习 XSS(出于道德目的),我想知道如何在不使用 <script> 标签的情况下执行一些 JavaScript 代码。这是在

HTML 标签:

"The search term" <p> *JavaScript here* </p> "returned no results"

由于某种原因,脚本标签不起作用。

【问题讨论】:

  • 在 google 上的简短搜索会告诉你:Cross-site Scripting (XSS)XSS Filter Evasion Cheat Sheetexcess-xss.com 我想这将是一个很好的起点。
  • 感谢您提供这些链接,但它们不包含此问题的解决方案。我认为这与字符串 "The search term" 和 "returned no results" 周围的双引号有关,因为在没有这些引号的情况下,&lt;script&gt; 标签可以正常工作
  • 我在这里看不到任何 script 标签,也没有证明您的陈述的示例(执行 js 的示例和不执行 js 的示例),在哪种上下文中使用/评估您的片段, ... .如果这是纯 html,那么文本周围是否有 " 并不重要。

标签: javascript html security xss


【解决方案1】:

您可以使用 HTML 元素中显示的 onclick 属性,这样您就可以创建如下内容:

"The search term" <p> <a href="" onclick="alert('I excuted JavaScript!');">Click me to see the JavaScript work!</a> </p> "returned no results"

现在当点击元素时,JavaScript 将被执行。

【讨论】:

    【解决方案2】:
    1. 尝试放入不同类型的带有特殊字符的字符串,看看是否有任何这些被编码或输出。 (我个人使用'';!--"&lt;XSS&gt;=&amp;{()}
    2. 现在您有三个选项:
      1. 在 HTML 标记中:&lt;&gt; 无关紧要,因为您已经在 HTML 标记中。您可以查看此标签是否支持事件并使用某种onload=alert(1) 或其他事件。如果允许&lt;&gt;,您可以突破并创建自己的标签'&gt;&lt;img src=0 onerror=alert(1)&gt;
      2. HTML 标记之外:&lt;&gt; 很重要。有了这些,您可以打开一个新标签,整个世界都在您的脚下(或什至......)
      3. Javascript 内部: 嗯...如果你可以用'" 打破一个字符串,那么你基本上可以写';alert(1)
    3. 根据您的编码字符和输出字符串的周围环境来制作您的 XSS

    &lt;XSS&gt; 完全消失: 应用程序使用某种strip_tags。如果您不在 HTML 标签之外,并且没有将 HTML 标签列入白名单,那么很遗憾,我不知道任何实现 XSS 的方法。

    制作您自己的有效载荷

    有多种方法可以实现这一点,并且无法一一列举。 看看这两个网站,有很多方法和概念来构建你自己的。 它归结为:页面允许通过的内容。

    1. https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#XSS_Locator_.28short.29
    2. https://html5sec.org/

    【讨论】:

    • 在 cmets 中,OP 表示这些链接无法回答问题。 (html5sec 不在列表中,但它包含相同/相似的信息)
    • @t.niese 是的...后来看到了,改为回答一个简单的方法。没有...html5sec 提供了更多不同的标签,因为很多过滤器不过滤新的 html5 标签。
    • 感谢您的详细解释。我试过你的方法(输入"'';!--"=&{()})"),所有字符都显示在页面上,即没有被过滤掉。当我点击“检查元素”,我看到此文本显示在 2 个 &lt;strong&gt; 标签内,这些标签位于 &lt;h2&gt; 标签内,这些标签位于 &lt;div&gt; 内。我尝试插入 &lt;div onmouseover="alert(1)"&gt;hi&lt;/div&gt; 但它只是正常显示,当我检查文本,我发现它没有被注册为 HTML,它只是被视为一个字符串。
    【解决方案3】:

    另一个在:https://stackoverflow.com/a/53430230/895245

    <a href="javascript:alert(1)">asdf</a>
    

    适用于 Chromium 81。

    也许更重要的是如何对其进行消毒,例如:

    【讨论】:

    • 知道如何防止此类攻击吗? HTML 编码没有帮助,因为它不包含任何 html- 任何指针?
    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 2012-02-24
    • 1970-01-01
    • 2013-06-05
    • 2011-10-30
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多