由于双引号不同,XSS 有效负载未执行

XSS payload not executing because of different double quote

我正在对一个网站进行渗透测试,我试图通过其中一个输入参数执行存储的 xss 负载。应用程序在客户端有特殊情况验证,所以我在 Burp 中拦截了请求并在输入参数中添加了 %22(这是一个双引号 ")。

现在的问题是,当页面用我注入的双引号反映这个输入参数时,它看起来不像是普通的双引号 (")。相反,它看起来像是斜体。这是它现在在浏览器中的样子 (”) 但我希望它看起来像 (”)

这里可能发生了什么?为什么我的双引号在反射回来时在浏览器中看起来像这样”? 感谢您的帮助。

谢谢

What could be going on here?

好吧,没有看到源代码,我们只能猜测。这可能是开发人员在服务器端编码输出的方式。就像我们经常将 " 转换为 " 以防止 XSS 一样,他们可能正在做一些事情,如果右边有 space ,他们会将其转换为 ”,并且“ 如果左边有一个 space 来创建 "fancy" 引号。

我会尝试这样的有效负载:

  • test%22%20test - test" test - 是否更改为收盘价?
  • test%20%22test - test "test - 是否更改为开报价?
  • %22te%22st%22 - "te"st" - 中间引号怎么了?行为上有什么不同吗?
  • test%22%0atest - test"\ntest" - 使用换行符有什么改变吗?
  • test%5c%22test - test\"test" - 反斜杠改变了什么?
  • %22%22%22%22%22%22%22%22 - """""""" - 哪些引号被编码了?如果我使用 more/less 引号会发生什么。 odd/even。等等

这在某种程度上取决于这些问题的答案,但如果所有引号都经过编码(无论它们是否变成花哨的 unicode 引号或是否变成 &quote;),那么可能根本无法获得XSS 如果你在字符串中 "trapped".

将来,包含 HTML 输出(必要时匿名)可能会有所帮助。