2

我正在测试在 Microsoft-IIS/7.5 Web 服务器上运行的 ASP.NET 应用程序,并向其发送以下 GET 请求参数:

&search=aaa%20%*+,-/;<=>^|"'bbb

其中一个参数是搜索,我在其中输入了上面可以看到的值。该值在返回的响应中打印两次,如下所示:

第一个参数:

<input name="nn" type="text" value="aaa %* ,-/;&lt;=>^|&quot;&#39;bbb" class="cc" />

第一项中引用的参数如下:

  • " ==>&quot;
  • ' ==>&#39;
  • <==>&lt;

我想没有办法突破那里,因为值被转义了,我们不能正确输入 " 字符。然而,所有参数都没有正确转义,即使不可能突破。

第二个参数:

<strong>aaa %* ,-/;<=>^|"'bbb</strong>

我们可以看到所有角色都按原样呈现,但有一个问题。在 < 字符之后不能有任何 [a-zA-Z0-9] (可能还有其他一些)字符,因为我们可能会被 ASP.NET 过滤器阻止。

如果我们输入以下内容:

&searchQuery=aaa<#script>alert('Hi');<#/script>bbb

我们得到以下输出:

<strong>aaa<#script>alert('Hi');<#/script>bbb</strong>

我问你是否有任何方法可以打破限制并执行任意 JavaScript 代码?

谢谢你

4

1 回答 1

0

HTML 要求标签名称紧跟在起始标签open delimiter之后<

开始标签必须具有以下格式:

  1. 开始标记的第一个字符必须是 U+003C LESS-THAN SIGN 字符 ( <)。
  2. 开始标签接下来的几个字符必须是元素的标签名称。

[…]

除此之外的任何事情都取决于浏览器的解释怪癖。

但是除了元素标签之外,还有其他标签,例如标记声明标签 ( <!…&gt;)、处理指令标签 ( <?…&gt;) 和替代注释标签 ( <%…%>),它们可以被某些浏览器识别并允许某些黑客攻击。

看看常见的 XSS 备忘单,如OWASP 的XSS Filter Evasion Cheatsheet和HTML5 Security Cheatsheet,或一些 HTML fuzzer,如Shazzer

于 2013-01-12T10:24:55.233 回答