破坏 JS 字符串 XSS

信息安全 xss 网络
2021-08-30 21:19:54

我一直在朋友的网站(黑盒)中搜索 XSS 漏洞,并且在其中一个页面中,他接受了您的输入并将其放入 js 脚本中,window.location="[INPUT]";
我无法打破引号,因为它们被替换为"%22保持不变%22,但是我可以\在我的输入末尾放一个,它会转义原始引号 ( window.location="[INPUT]\";),这给了我一个未终止的字符串,但之后我不能影响任何代码,所以那里没有 XSS,对吗?我基本上能做的就是破解代码,仅此而已

编辑:
--更多信息--

  1. <, >,&"被替换为&lt;, &gt;,&amp;&quot;
  2. 服务器检查是否INPUThttp://or开头https://

我尝试过的事情:

  1. </script> =>用被替换&lt;/script&gt;(并且失败)来破坏字符串
  2. 试图用 URL Encoded </script>( %3C%2Fscript%3E) 打破它,但它显示为 string ( window.location = "http://test.com%3C%2Fscript%3E\";) 并且错误仍然存​​在SyntaxError: unterminated string literal
1个回答

这是不可利用的。

  • 您无法转义字符串,因为引号已编码。( "-> &quot;)
  • 您无法转义脚本标记上下文,因为尖括号已编码。( <-> &lt;)
  • 您不能创建除http[s]://URL 之外的任何内容,因为检查了字符串的开头。在协议部分之后附加什么并不重要,之后您不能将其转换为URLdata:javascript:URL。

您可以尝试其他技巧,但它们是特定于实现的。没有证据表明它们会在这种情况下起作用,因此这些只是几个示例,可以让您了解一下:

  • 也许过滤器在 NULL 字节后停止?(例如http://%00"<>...
  • 也许出于某种原因 unicode 变体有效?(例如 U+FF02:
  • 也许其他编码方案有效?(例如\x22,代替"
  • 等等。