最近我发现了关于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)”,以及为什么需要这些//“;//”;//-->注释(当以这种方式使用时,它们是否意味着某些特殊的东西,比如搜索xss bug?).
在第二个字符串中,&{()}序列的用途是什么?
有谁能给我举个具体的例子来说明这两个字符串应该如何工作,以便在web应用程序中检索xss错误?因为在我链接的网站上没有给出任何解释…
最佳答案:
这看起来像是在尝试几次不同的注射,所以我会尝试一次一次将它们分解:
第一次注射
';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>
这将尝试执行以下操作:
终止HTML(或XML)注释(使用
-->
)使用
<SCRIPT>
终止现有的</SCRIPT>
标记这样做是为了防止注入的脚本导致语法错误,从而阻止注入的脚本执行。
使用
">
终止html属性和标记使用
'>
终止html属性和标记使用
<SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
注入javascript第四次注射
'';!--"<XSS>=&{()}
这是一个常用字符串,用于测试用户输入中使用了什么(如果有的话)过滤器和/或编码。通常,注入后的页面源将包含
<XSS
或<XSS
。如果找到第二个,应用程序很可能不会过滤用户输入(因为它允许添加任意标记),并且很可能容易受到xss的攻击。要回答更直接的问题:
为什么会重复“alert(string.fromcharcode(88,83,83))”
这是一个常见的“概念证明”函数,它将导致包含“xss”的弹出框出现。如果发生这种情况,则执行注入的javascript。
为什么在第一个字符串中会重复“alert(string.fromcharcode(88,83,83)”,为什么会重复那些//';//“;//-->
它们用于防止语法错误,这可能导致注入的javascript无法执行。