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

ton*_*nix 8 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> 
Run Code Online (Sandbox Code Playgroud)

'';!--"<XSS>=&{()}
Run Code Online (Sandbox Code Playgroud)

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

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

Cal*_*man 18

看起来它正在尝试几次不同的注射,所以我会尝试一次一个地打破它们:

第一次注射

';alert(String.fromCharCode(88,83,83))//
Run Code Online (Sandbox Code Playgroud)

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

第二次注射

";alert(String.fromCharCode(88,83,83))//
Run Code Online (Sandbox Code Playgroud)

像第一次注入一样,但它用于"尝试终止JavaScript字符串文字.

第三次注射

--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
Run Code Online (Sandbox Code Playgroud)

这会尝试执行以下操作:

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

第四次注射

'';!--"<XSS>=&{()}
Run Code Online (Sandbox Code Playgroud)

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


要回答更直接的问题:

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

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

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

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