【问题标题】:Bypass XSS blacklist "<", ">", "&" input nvarchar绕过XSS黑名单“<”、“>”、“&”输入nvarchar
【发布时间】:2012-02-16 10:36:47
【问题描述】:

我正在使用某些软件将某些字符“”、“&”列入用户提交的值的黑名单。

显示提交的结果时不是对值进行HTML编码(将所有提交的结果输出到一个表格中)。

它将值存储在 Sql Server 的 nvarchar 字段中。

你能在这种黑名单方法中找到 XSS 漏洞吗? 看看是否可以让软件供应商对输出进行 HTML 编码。

编辑

我发现表中的值首先作为javascript变量输出,然后添加到页面中。 javascript 中的值是 javascript 编码的。 javascript 编码正在完成它的工作并转义字符串变量中的值。

我正在从这个 javascript 字符串变量呈现的 html 中寻找 xss 漏洞。

失败的想法

鉴于使用了 javascript,因此尝试使用

的 javascript unicode 表示

"\u003cscript\u003ealert('hi');\u003/script\u003e"

然而,如上所述,javascript 编码器正在完成它的工作,只是输出为文本。

【问题讨论】:

  • javascript:alert('Hello World!') 将通过此验证器。
  • 是的,但它没有被执行,值在表格单元格中输出。
  • html 看起来如何?数据是只放在标签之间还是作为 html 属性。响应是否设置了字符编码http头?
  • 数据在元素 Data_Goes_Here 内输出,而不是在元素的属性中输出,或者可以通过 onmouseover 执行某些操作。数据作为javascript变量输出,然后从javascript写到表中。

标签: asp.net xss


【解决方案1】:

我知道这已经过时了,但将尖括号列入黑名单不会在所有情况下都可以防止 XSS。

一个反例是如果您将用户输入放入 HTML 属性中;例如用他们的电子邮件创建一个 mailto 链接。 如果他们输入这个作为他们的电子邮件地址:

" onclick="alert('没有尖括号的XSS!')"

他们已经对您的网站进行了 XSS。

【讨论】:

  • 这只有在他们不清理他们的输出时才有效,否则输出清理步骤会将“转换为”所以记住总是清理你的输出!
猜你喜欢
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多