XSS:突破不完整的编码
Posted
技术标签:
【中文标题】XSS:突破不完整的编码【英文标题】:XSS: Break out of not-complete encoding 【发布时间】:2012-12-26 19:53:18 【问题描述】:我正在测试运行在 Microsoft-IIS/7.5 Web 服务器上的 ASP.NET 应用程序,并向其发送以下 GET 请求参数:
&search=aaa%20%*+,-/;<=>^|"'bbb
其中一个参数是搜索,我在其中输入了上面可以看到的值。该值在返回的响应中打印两次,如下所示:
第一个参数:
<input name="nn" type="text" value="aaa %* ,-/;<=>^|"'bbb" class="cc" />
第一项中引用的参数如下:
" ==>&quot;
' ==> &#39;
&lt;
我想没有办法突破那里,因为值被转义了,我们不能正确输入 " 字符。然而,所有参数都没有正确转义,即使不可能突破。
第二个参数:
<strong>aaa %* ,-/;<=>^|"'bbb</strong>
我们可以看到所有角色都按原样呈现,但有一个问题。在
如果我们输入以下内容:
&searchQuery=aaa<#script>alert('Hi');<#/script>bbb
我们得到以下输出:
<strong>aaa<#script>alert('Hi');<#/script>bbb</strong>
我问你是否有任何方法可以打破限制并执行任意 javascript 代码?
谢谢
【问题讨论】:
【参考方案1】:html 要求tag name 紧跟start tag 开放分隔符<
:
开始标签必须具有以下格式:
开始标记的第一个字符必须是 U+003C LESS-THAN SIGN 字符 (
<
)。 开始标签接下来的几个字符必须是元素的标签名称。[…]
除此之外的任何事情都取决于浏览器的解释怪癖。
但除了元素标签之外,还有其他标签,例如标记声明标签 (<!…>
)、处理指令标签 (<?…>
) 和替代注释标签 (<%…%>
),它们可以被某些浏览器识别并允许某些黑客攻击。
查看常见的 XSS 备忘单,如 OWASP’s XSS Filter Evasion Cheat Sheet 和 HTML5 Security Cheatsheet,或一些 HTML fuzzer,如 Shazzer。
【讨论】:
以上是关于XSS:突破不完整的编码的主要内容,如果未能解决你的问题,请参考以下文章