Web渗透测试之客户端XSS漏洞原理、项目实战与攻防总结
Web 渗透测试之客户端 XSS 漏洞原理、项目实战与攻防总结
一、前言
XSS(跨站脚本攻击)是 Web 渗透测试中最经典的客户端漏洞之一,全称 Cross Site Scripting,因缩写 CSS 与层叠样式表冲突,故简写为 XSS。该漏洞成因是 Web 应用未对用户可控输入做过滤与转义,导致恶意 JS 脚本被页面解析执行,攻击者可劫持用户 Cookie、伪造页面弹窗、窃取账号凭证甚至接管用户浏览器会话。本文结合本地靶场项目实操,拆解编程思路、渗透技巧与学习感悟。
二、XSS 核心原理与分类
1. 漏洞本质
后端接收用户输入数据后,直接拼接至 HTML 页面源码渲染,浏览器无法区分正常页面代码与攻击者插入的恶意 JavaScript,将恶意脚本当做页面原生代码执行,从而突破同源策略限制操控客户端页面。
2. 三大攻击类型
存储型 XSS(持久型):恶意代码存入服务器数据库,所有访问该页面的用户都会触发攻击,危害范围最大,常见于留言板、评论区、帖子发布模块。
反射型 XSS(非持久型):恶意脚本拼接在 URL 参数中,用户点击特制链接后页面携带参数渲染脚本,仅针对点击链接的单用户生效。
DOM 型 XSS:完全在前端 DOM 树完成数据解析与代码插入,数据不经过后端服务器,后端无法拦截,属于纯客户端漏洞。
三、本地靶场项目实现(PHP+HTML 简易留言靶机)
(一)编程思路
1. 环境架构
后端采用 PHP 实现数据读写,使用 txt 文本充当简易数据库,分为留言提交页与留言展示页,无任何输入过滤函数,故意保留 XSS 漏洞用于实验。
2. 核心文件源码
(1)提交页面 post.html

(2)数据存储后端 save.php

(3)展示页面 index.php(漏洞触发点)

3. 逻辑流程
用户在输入框提交内容 → PHP 接收 POST 参数直接写入文本 → 访问首页读取文本内容原样输出至 HTML → 浏览器渲染页面执行插入的恶意脚本。
(二)渗透实战项目演示
1. 基础弹窗 Payload 测试
在留言框输入基础攻击语句:

提交后刷新首页页面,浏览器直接弹出当前站点 Cookie,证明存储型 XSS 漏洞存在。
配图建议:靶场页面弹窗截图、Burp 抓包提交数据包截图
2. 进阶 Cookie 窃取攻击(核心实战)
搭建攻击者接收脚本 getcookie.php,用于接收目标用户 Cookie 并写入日志:

构造窃取 Payload:

其他用户访问留言页面时,页面自动加载攻击者地址,浏览器 Cookie 自动发送至攻击者服务器,打开cookie.txt即可拿到会话凭证,可直接拼接 Cookie 登录目标用户账号。
配图建议:日志文件捕获 Cookie 结果、浏览器 Network 请求记录截图
3. DOM 型 XSS 拓展实操
页面 JS 直接获取 URL 参数插入 DOM 节点,无后端参与:

构造 URL:xxx.com?x=<script>alert('dom xss')</script>,访问链接即可触发漏洞。
四、渗透测试常用技巧与绕过手段
1. 基础过滤绕过技巧
过滤<script>标签:使用事件标签替代
<img src=x onerror=alert(1)>
<body onload=alert(1)>
过滤alert关键词:编码绕过,Unicode、URL 编码改写函数;
过滤尖括号<>:针对 innerHTML 插入点使用javascript:伪协议。
2. 工具化渗透技巧
Burp Suite:拦截前端提交数据包,批量修改请求参数批量测试 Payload;
XSSer 自动化工具:批量生成多类型 Payload 对 URL 进行扫描,快速发现反射型 XSS;
同源策略利用:窃取 Cookie 后,在浏览器控制台替换 Cookie 实现无密码登录。
3. 漏洞挖掘思路
优先排查所有用户可控输入点:URL 参数、POST 表单、Cookie 内容、Referer 请求头、留言、昵称、个人签名等一切前端展示的数据位。
五、漏洞防御方案
后端转义输出:PHP 使用htmlspecialchars()对输出内容强制转义,将< > " ' &转为 HTML 实体字符,浏览器仅当做纯文本展示;
输入白名单过滤:严格限制输入格式,不允许 HTML 标签与 JS 关键词;
前端 CSP 内容安全策略:配置 HTTP 响应头Content-Security-Policy,禁止页面加载非信任域脚本、禁止行内 JS 执行;
Cookie 添加 HttpOnly 属性:设置后 JS 无法读取 document.cookie,从根源杜绝 Cookie 劫持。
六、学习心得与总结
在本次 XSS 客户端渗透项目搭建与测试过程中,我清晰区分了服务端漏洞与客户端漏洞的本质区别:SQL 注入针对后端数据库,而 XSS 完全利用浏览器解析机制攻击访问页面的普通用户。
初期测试时曾遇到 Payload 无法执行的问题,排查后发现是后端输出时做了简单字符替换,通过大小写混淆、换行拆分标签成功绕过过滤,深刻理解 Web 安全没有绝对固定的 Payload,必须根据页面源码灵活调整攻击语句。同时我也意识到渗透测试并非单纯寻找漏洞,更重要的是站在开发视角理解漏洞产生逻辑,才能精准给出防御方案。
XSS 作为入门级 Web 安全漏洞,是学习前端安全、同源策略、浏览器安全机制的必经之路。后续学习中会结合 CSRF 跨站请求伪造漏洞进行联动渗透,理解多漏洞组合攻击的实战场景,坚守网络安全法律法规,仅在授权靶场环境内进行安全测试,杜绝非法入侵与恶意攻击行为。
排版配图使用建议(适配 CSDN 图文排版)
首图:靶场整体运行界面 + 攻击弹窗截图;
代码段插入:PHP 源码分块高亮显示;
实战部分:插入 Burp 抓包截图、Cookie 窃取日志截图、DOM 源码审查 F12 控制台截图;
文末可添加思维导图:XSS 分类 - 漏洞成因 - 攻击载荷 - 绕过方法 - 防御手段。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)