谁能解释这些XSS测试字符串?

时间:2014-08-23 11:26:17

标签: javascript xss

最近我发现了关于XSS和Web应用程序安全性的本教程 - > https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#XSS_Locator

一开始有一些字符串要注入,以便测试一个站点是否容易受到xss的攻击。这些字符串是:

';alert(String.fromCharCode(88,83,83))//';alert(String.fromCharCode(88,83,83))//";
alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//--
></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT> 

'';!--"<XSS>=&{()}

我知道XSS的基本概念,但在这里我无法理解为什么在第一个字符串中重复'alert(String.fromCharCode(88,83,83))'以及为什么这些 // '; //“; // - &gt; 需要注释(当他们在搜索xss错误时以这种方式使用时,它们是否意味着什么特别的?)。 在第二个字符串中,&amp; {()}序列的目的是什么?

有人可以用具体示例来解释这两个字符串应该如何工作以检索Web应用程序中的xss错误?在我链接的网站上的原因没有给出解释...

1 个答案:

答案 0 :(得分:16)

这看起来好像正在尝试几次不同的注射,所以我会尝试将它们分解为一次:

第一次注射

';alert(String.fromCharCode(88,83,83))//

此注入尝试终止JavaScript字符串文字(使用'),然后终止语句(使用;)并调用alert(String.fromCharCode(88,83,83)),这将导致弹出框包含“XSS”。以下//是尝试“注释掉”语句的其余部分,因此不会发生语法错误并且脚本将执行。

第二次注射

";alert(String.fromCharCode(88,83,83))//

与第一次注入类似,但在尝试终止JavaScript字符串文字时使用"

第三次注射

--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>

这会尝试执行以下操作:

  1. 终止HTML(或XML)评论(使用-->
  2. 使用<SCRIPT>终止现有的</SCRIPT>代码
    • 这样做是为了防止注入的脚本导致语法错误,这会阻止注入的脚本执行。
  3. 使用">
  4. 终止HTML属性和标记
  5. 使用'>
  6. 终止HTML属性和标记
  7. 使用<SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
  8. 注入JavaScript

    第四次注射

    '';!--"<XSS>=&{()}
    

    这是一个常用字符串,用于测试用户输入上使用的过滤器和/或编码(如果有)。通常,此注入后页面的来源将包含&lt;XSS<XSS。如果找到第二个,应用程序很可能不会过滤用户输入(因为它允许添加任意标记)并且可能容易受到XSS的攻击。<​​/ p>


    回答更直接的问题:

      

    为什么重复'alert(String.fromCharCode(88,83,83))'

    这是一个常见的“概念证明”功能,它会导致弹出框显示为包含“XSS”。如果发生这种情况,则执行注入的JavaScript。

      

    为什么在第一个字符串中重复'alert(String.fromCharCode(88,83,83))'以及为什么//'; //“; // - &gt;

    这些用于防止语法错误,这可能导致注入的JavaScript无法执行。