XSS跨站脚本攻击底层原理学习与全方位靶场实战:反射型/存储型/DOM型底层原理+挖掘思路+绕过方案+修复思路
前言在前面三篇 SQL注入系列文章中我们基本掌握了手工漏洞验证能力 工具高效辅助思维建立了Web安全最核心的底层渗透逻辑。本篇进入新的章节新手容易在SRC挖到漏洞的领域XSS跨站脚本攻击。SQL注入的防护越来越严格WAF基本全覆盖新人很难有限出洞但XSS漏洞不少存在于企业官网、后台管理、搜索框、留言板、个人中心是公益SRC、厂商SRC等相对来说高频、容易提交成功、容易积累成果的中低危漏洞。本文秉承着不说废话的原则把三类XSS原理、触发条件、挖掘位置、手工Payload、过滤绕过、真实SRC审计思路一次性讲透靶场依旧选择我们的皮卡丘pikachu的靶场演示一、XSS核心本质面试掌握靶场验证逻辑XSSCross-Site Scripting跨站脚本漏洞本质是后端未过滤用户可控输入 → 前端直接渲染输出 → 攻击者可控JS代码被浏览器执行和SQL注入类似属于输入输出不信任漏洞是Web安全中的经典漏洞类型。核心危害SRC报告话术劫持用户Cookie、钓鱼诱导、后台权限接管、页面篡改、挂黑页、恶意代码执行可窃取用户敏感信息、劫持用户会话严重威胁站点与用户安全。靶场对照逻辑Pikachu所有XSS关卡均严格遵循该漏洞成因无多余复杂环境专注复现「输入可控-无过滤-前端执行」的核心链路。二、三类XSS分类、实战区别Pikachu靶场逐类复现三类XSS是SRC提交、面试、渗透测试的核心考点接下来博主结合原理特点靶场实操逐一拆解复现步骤零基础可直接照搬。1. 反射型XSS一次性危害较小src可能不收漏洞原理用户提交参数 → 服务器接收 → 立即回显页面 → 执行JS → 关闭页面即失效核心特点无数据库存储漏洞只有一次性生效需要诱导用户点击恶意链接才能触发高发位置搜索框、跳转参数、页面标题、提示信息Pikachu靶场实操复现Reflected XSS靶场路径Pikachu - XSS - 反射型xss(get)1场景说明页面存在输入回显功能用户输入的内容会直接展示在页面中后端无任何过滤是典型的反射型业务场景2基础探测Payloadscriptalert(1)/script这里发现长度超出了输入框的限制首先我们观察到这只是前端的限制所以我们可以选择在浏览器的开发者工具F12中修改前端限制代码这个思路适用于许多需要绕过前端限制的地方我们选中输入框发现输入框进行了20个字符长度的限制我们把限制改成100然后再输入测试代码发现弹窗成功这样就进行了一次简单的前端限制绕过3漏洞验证提交后页面直接弹窗URL参数中携带恶意代码关闭页面后漏洞失效完美印证反射型XSS「一次性、无存储」的特点4漏洞利用贴合SRC危害小伙伴们看到这可能会疑惑你这就弹个弹窗有个卵用虽然反射型xss确实危害没有那么大但是还是有发掘价值的。既然我们构造的js代码可以利用我们就可以构造一个恶意代码比如获取当前访问用户的cookie并发到攻击者自己的服务器上把类似的恶意js代码拼接到网址中然后把构造好的网址发给目标用户结合社会工程学就会产生危害。除了获取cookie还能盗取个人信息或者诱导用户下载恶意文件记录键盘输入页面跳转等操作具体要结合社会工程学和网站本身特性来构造网上也有很多构造好的js代码5我们可以看到除了GET型传参的xss皮卡丘靶场里还有一个POST型传参的xss大家看过之前的两篇文章或者是对传参有一定了解的可能会想是不是要抓包实则不然。post传参的xss利用条件比较苛刻首先因为post型传参在实际测试中基本没办法在网址或者输入框等地方输入pikachu靶场的post反射型xss这关登录之后就可以看到post的输入框就可以进行xss所以此时我们如果想利用到POST传参就需要自己构造一个前端页面页面上携带我们写好的传给目标网站的恶意POST参数在进行利用的时候受害者需要已经登录目标网站浏览器保存有效 Cookie关键此时攻击者把这个恶意 html 文件发给受害者诱导打开页面加载瞬间自动发送 POST 请求携带 XSS payload服务器接收 POST 参数把 payload 反射回页面返回给受害者浏览器受害者浏览器渲染页面执行恶意 JS偷 Cookie / 钓鱼 / 执行操作2. 存储型XSS永久性、SRC会收漏洞原理用户输入内容 → 存入数据库 → 任何人访问页面都会触发JS执行核心特点永久存在页面与数据库中持久化漏洞无需诱导任意用户访问页面自动触发高发位置留言板、评论、用户昵称、公告提交、反馈模块SRC收录优先级存储型 反射型Pikachu靶场实操复现Stored XSS靶场路径Pikachu - XSS - 存储型xss打开之后我们看到经典的留言板存储型xss漏洞存在较多的地方我们直接注入xss的测试代码img srcx onerroralert(存储XSS成功)可以看到页面成功弹出了我们想要打印的信息这样就算漏洞测试成功那存储型和反射型的区别是什么呢前面也提到过存储型xss属于是持久性的xss我们输入的xss测试代码不止停留在了前端还传入了网站后端的数据库也就是说在我们上传了恶意js代码之后任何人访问这个页面都会触发攻击造成信息泄露。3. DOM型XSS前端漏洞、难挖、大厂SRC高频纯前端JS逻辑漏洞一些WAF拦截不到位核心JS关键词全局检索innerHTML / outerHTML前端输出编码统一使用HTML实体编码、JS编码、URL编码转义特殊字符复现验证思路访问构造链接页面成功弹窗全程抓包无任何恶意请求发送至服务器后端无日志完全符合DOM XSS漏洞特征我们输入测试代码后点击What do you see就可以看到我们的代码弹窗成功 onclickalert(1)//DOM型XSS深入原理拆解底层技术原理核心逻辑Source数据源 - 传输/处理 - Sink危险函数DOM型XSS的本质是纯前端漏洞。后端只下发静态的 HTMLJS漏洞的产生完全在于前端JS代码将“不可信的数据”写入了“危险的位置”。1. Source可控数据源攻击者能够控制的数据输入点最常见的有location.searchURL的?后面的参数location.hashURL的#后面的内容不发给服务器location.href/document.referrer/window.namepostMessage跨窗口通信localStorage/sessionStorage存储型DOM XSS2. Sink危险接收器前端JS将数据写入这些位置时如果没有做安全处理就会导致代码执行HTML相关innerHTML、outerHTML、document.write、insertAdjacentHTMLJS执行eval()、setTimeout()、setInterval()、new Function()属性/URLlocation.href javascript:...、src、href3. 为什么Pikachu的Payload是 onclickalert(1)//结合Pikachu DOM型的源码通常是document.getElementById(a).innerHTML ...当你的输入被塞进innerHTML时浏览器会将其解析为HTML。闭合原有的HTML属性值就比如闭合了原有的href...中的引号。onclickalert(1)利用HTML解析器规则属性名以on开头如onclick,onerror会被浏览器绑定为事件处理器属于JS执行环境。点击时触发。//JS注释符把原本后面多余的引号、标签等代码注释掉类似于我们之前学的SQL注入语句防止语法错误导致弹窗失败。核心总结DOM型XSS的挖掘秘诀就是“全局搜索Source顺藤摸瓜找Sink”。在F12中搜索location、innerHTML、eval等关键词找到数据流执行链。四、零基础手工Payload体系由简到繁靶场逐一套用常用闭合Payload1. 注入在【双引号 HTML 属性】value这里输出你的输入 onclickalert(1)//解析闭合原有双引号新增 onclick 事件//注释后面剩余引号。 拼接后示例input value onclickalert(1)//2. 注入在【单引号 HTML 属性】Pikachu DOM 关卡href你的输入 onclickalert(1)//解析闭合前面单引号注入事件//注释后面多余单引号。 拼接后a href onclickalert(1)//xxx/a3. 注入在【HTML 正文】直接输出在页面标签之间不用闭合引号不需要引号闭合直接写标签 payloadimg srcx onerroralert(1)4. 注入在【JS 代码块内部】输入直接放在scriptvar a输入/script里面;alert(1);//;闭合 JS 字符串终止原有语句执行 alert//注释剩下代码场景WAF/前端拦截alert关键词方案 Aconfirm/prompt替代img srcx onerrorconfirm(1)方案 Bwindow 对象调用 alertimg srcx onerrorwindow[alert](1)方案 CUnicode 编码绕过img srcx onerror\u0061\u006c\u0065\u0072\u0074(1)场景站点拦截小括号禁止函数传参JS模板字符串反引号调用函数不需要括号img srcx onerroralert1原理JS 标签模板语法alert1 等价于alert(1)没有 ()完美绕过括号过滤。靶场Pikachu到真实SRC的差距Pikachu是“无菌环境”真实SRC是“战场”。新手很容易拿着 scriptalert(1)/script 去真实站点测被WAF拦截后怀疑人生。1. WAF拦截与过滤• 靶场无过滤原样回显。• 真实SRC常规的 script、alert、onerror 大概率被WAF和前端黑名单拦截。你需要掌握大小写混写、Unicode编码、HTML实体编码、使用冷门标签如 svg、details、iframe、利用JS模板字符串反引号、拆分关键字等绕过技巧。2. 输出上下文差异• 靶场通常在标签之间直接输出。• 真实SRC可能在HTML属性内、script标签内的JS变量中、JSON响应中。不同的输出点需要完全不同的闭合方式。直接拿靶场Payload去打真实环境大概率是语法错误页面崩溃。3. 浏览器安全机制• 靶场无防护。• 真实SRC现代浏览器有 HttpOnlyCookie偷不到、SameSite跨站POST不自动带Cookie、CSP内容安全策略内联脚本直接禁止执行。CSP存在的情况下就算你注入了JS浏览器也会拒绝执行。4. SRC审核与危害证明• 靶场弹个窗就算通关。• 真实SRC只弹窗的XSS通常会被判为低危或忽略。你需要证明实际危害◦ 存储型XSS证明能打到管理员后台比如发一条留言管理员一访问就触发。◦ 反射型XSS构造出完整的利用链比如利用XSS窃取用户Token、发起CSRF修改密码。◦ DOM型XSS必须证明恶意链接能稳定触发且能执行任意JS如document.cookie被HttpOnly挡住时构造键盘记录或钓鱼弹窗。◦ SRC报告话术“该漏洞可导致攻击者获取用户登录态执行任意操作建议定级中危/高危修复方案如下……”XSS修复建议SRC报告结尾必备如果你在SRC提交漏洞报告里附上修复建议不仅会显得你专业还能提高审核通过率和定级。1. 首选方案上下文输出编码最核心不要试图过滤用户输入而是根据数据输出的位置进行编码• HTML标签间将 转义为 HTML 实体lt; gt; amp; quot; #x27;。• HTML属性内除上述字符外还需对空格、换行等进行编码确保闭合引号失效。• JavaScript代码块内使用JS Unicode编码或 JSON 序列化输出。• URL参数使用 encodeURIComponent() 进行URL编码。2. DOM型XSS专项防御• 避免使用 innerHTML、document.write、eval 等危险Sink。• 优先使用安全的APItextContent、innerText、setAttribute。• 如果必须插入HTML使用第三方安全库如 DOMPurify 进行净化。3. 内容安全策略CSP• 配置 Content-Security-Policy 响应头禁用 unsafe-inline 和 unsafe-eval。• 例如script-src self https://trusted.cdn.com;• CSP作为最后一道防线即使XSS被注入也能阻止恶意JS执行。4. Cookie安全加固• 为敏感Cookie设置 HttpOnly禁止JS读取防Cookie劫持。• 设置 SameSiteLax 或 Strict防止跨站POST型XSS自动携带Cookie。5. 输入验证与过滤辅助• 对输入格式进行严格的白名单校验如手机号、邮箱格式。• 过滤 script、on* 等危险关键字注意这只是辅助不能完全依赖因为存在大量绕过。结语Pikachu靶场完美适配本文全套XSS知识点是SRC新手最优练习靶场大家可以自己下去尝试一下pikachu中xss章节的其他关卡靶场中除了xss和SQL注入以外还有许多漏洞类型还未涉及接下来的博客中我会一一提到。至此我们完成了 Web安全三大基础核心手工SQL注入 → 工具高阶注入 → XSS全体系学习原理靶场实操绕过方案声明本文所有内容仅用于本地靶场学习未经授权不得对互联网任何真实网站进行渗透测试

相关新闻

很多老板误解的财税规划,不只是简单节税

很多老板误解的财税规划,不只是简单节税

在日常服务企业的过程中,我们发现很多中小企业老板,对财税规划存在一个普遍误区:认为财税规划,就等于想方设法少交税,核心目标只是实现节税。不少人会到处打听各类所谓 “降税妙招”,把全部注意力放在税负数…

2026/9/30 16:58:49 阅读更多 →
校园外卖扫码收餐怎么做:单扫、连扫、录码与分拣交接流程

校园外卖扫码收餐怎么做:单扫、连扫、录码与分拣交接流程

校园外卖扫码收餐通常按“商家出餐→校外到站→扫码或录码收单→按楼栋或区域分组→批量中转与通知→校内交接送达”组织。微订校园产品提供单扫收单、连扫收单、录码收单,以及订单标签分类、批量中转、批量送达和批量通知等能力,适合需要集中收餐与多站…

2026/10/1 20:23:24 阅读更多 →
Hermes 系统提示组装:三层缓存与 API 调用时叠加的分离设计

Hermes 系统提示组装:三层缓存与 API 调用时叠加的分离设计

Hermes 系统提示组装:三层缓存与 API 调用时叠加的分离设计 一、案例溯源 很多 Agent 框架把系统提示当成"一坨文本"拼出来就发给模型,结果每轮调用都在变:上轮记忆写回、当前目录变更、插件塞了一段上下文……提示前缀每变一次,Anthropic/OpenAI 的 prompt ca…

2026/9/30 16:56:47 阅读更多 →

最新新闻

ThingsBoard Edge Ubuntu 升级指南:基于 .deb 包的升级流程与实现原理

ThingsBoard Edge Ubuntu 升级指南:基于 .deb 包的升级流程与实现原理

物联网后端数据可视化消息队列 【免费下载链接】thingsboard All-in-one IoT Platform - Device management, data collection, processing and visualization. 项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard 点击查看 免费下载 本篇技术指南围绕…

2026/10/1 21:04:06 阅读更多 →
Qt5.12 + MSVC2017 环境搭建:我重装了三次才顺,这 8 个坑你不用再踩

Qt5.12 + MSVC2017 环境搭建:我重装了三次才顺,这 8 个坑你不用再踩

插件化那 20 天写的是"程序内部怎么长"。这个专栏换个角度——从一堆源码到一个能交给别人用的安装包,中间那些把人卡住的事。 开篇先解决最前面的一步:环境。去年我接手一个老项目,硬性要求 Qt 5.12.11 MSVC2017。照着网上的教程…

2026/10/1 21:04:06 阅读更多 →
AMD 82 亿美元买下李飞飞的世界模型:当 Agent 开始操作物理世界,安全的游戏规则变了

AMD 82 亿美元买下李飞飞的世界模型:当 Agent 开始操作物理世界,安全的游戏规则变了

9 月 28 日,AMD 官宣了一笔让不少人意外的收购:以约 82 亿美元(约合人民币 550 亿元)全股票收购 World Labs——由「AI 教母」李飞飞 2024 年联合创办、专注空间智能与世界模型的研究实验室。交易预计年底前完成,李飞飞…

2026/10/1 21:04:06 阅读更多 →
咱们散户的心里话

咱们散户的心里话

咱们散户的心里话: 我想给你们更好的生活。 我想换掉那辆开了多年的旧车,想在周末带你们去更远的地方看海,想让孩子用上更优质的教育资源,想让家里的餐桌出现更多样、更健康的食材。 这些念头并非虚荣,而是我作为家庭支…

2026/10/1 21:04:06 阅读更多 →
HEU KMS Activator 新版全面解析全新界面设计与核心功能详解:智能激活、TSForge 离线授权

HEU KMS Activator 新版全面解析全新界面设计与核心功能详解:智能激活、TSForge 离线授权

HEU KMS Activator 迎来了全新版本,此次更新最大的亮点在于界面设计的全面革新。新版采用了更为直观简洁的 UI 风格,不仅让整体视觉效果焕然一新,更重要的是大幅降低了操作复杂度,即便是初次接触的用户也能快速上手。 本文将逐一解…

2026/10/1 21:04:06 阅读更多 →
晋中榆次正规团队与线上中介在合规拉新执行模式上的差异对比

晋中榆次正规团队与线上中介在合规拉新执行模式上的差异对比

晋中榆次地区APP合规拉新:线上中介与本地团队的执行模式差异解析在寻找晋中榆次地区靠谱的APP合规拉新推广团队推荐资源时,许多项目方往往面临选择困境:是选择覆盖面广的线上流量中介,还是深耕区域的本地实体团队?事实…

2026/10/1 21:03:05 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →