pikachu靶场实战:XSS漏洞攻防全解析

张开发
2026/4/15 10:02:32 15 分钟阅读

分享文章

pikachu靶场实战:XSS漏洞攻防全解析
1. XSS漏洞初探从原理到实战第一次接触XSS漏洞时我完全被它那种无中生有的能力震惊了。想象一下攻击者只需要在网页输入框里敲几行代码就能让其他用户的浏览器乖乖执行任意指令这简直就像在别人的电脑里开了个后门。在pikachu靶场里我们可以安全地体验这种黑客的感觉而不用担心造成实际危害。XSS全称跨站脚本攻击Cross-Site Scripting虽然名字里有跨站但它本质上是在目标网站上注入恶意脚本。就像往别人的汤里偷偷加料喝汤的人根本不知道自己中了招。根据注入方式的不同XSS主要分为三类反射型、存储型和DOM型。在pikachu靶场里这三种类型都有对应的实战场景我们先从最简单的反射型开始。2. 反射型XSS实战GET与POST的区别2.1 GET型XSS漏洞利用打开pikachu靶场的第一个关卡你会看到一个朴素的输入框。我刚开始测试时习惯先输入一些特殊字符探路比如6666。这就像敲门时先轻轻敲几下看看门后有没有人应答。如果页面对这些字符原样输出那就相当于门没锁我们可以进一步尝试。发现没有过滤后我尝试输入经典的测试语句scriptalert(xss)/script但遇到个小麻烦——输入框长度限制。这时候F12开发者工具就是我们的瑞士军刀找到input标签的maxlength属性把20改成100问题就解决了。点击提交后熟悉的弹窗出现这就是反射型XSS最直观的表现。2.2 POST型XSS的特别之处第二关需要先登录账号密码用简单的暴力破解就能猜到提示试试admin/123456。登录后的攻击方式和第一关几乎一样但有个关键区别GET请求的参数显示在URL里而POST请求的参数藏在请求体内。这意味着GET型的XSS攻击链接可以直接发给受害者而POST型需要诱骗用户在特定页面提交表单。我在实际渗透测试中发现很多开发人员会防范GET请求的XSS却忽略了POST请求同样危险。pikachu靶场这个设计非常贴心提醒我们要全面防护。3. 存储型XSS持久化的威胁存储型XSS比反射型危险得多因为它会把恶意代码存入数据库。就像在小区净水系统里投毒所有喝水的住户都会中招。在pikachu第三关我们输入的攻击代码会被永久保存每次有人访问这个页面都会触发弹窗。测试时我输入scriptalert(我是存储型XSS)/script提交后发现弹窗不是一次性的刷新页面后依然存在。这种攻击常见于留言板、评论区等用户内容持久化的场景。去年某知名博客平台就因此漏洞导致大规模用户cookie泄露攻击者甚至不需要诱导点击静默窃取数据更可怕。4. DOM型XSS不经过服务器的攻击4.1 基础DOM XSS分析第四关看起来有点神秘输入111后显示what do you see链接点开却是404。查看源码才发现玄机页面用JavaScript直接操作DOM完全没经过服务器。这种攻击就像魔术师的障眼法表面看起来人畜无害实际暗藏杀机。关键代码在这里function domxss(){ var str document.getElementById(text).value; document.getElementById(dom).innerHTML a hrefstrwhat do you see?/a; }攻击方法是闭合href属性插入新的事件处理器。我输入# onclickalert(DOM XSS)点击链接时就触发了我们的代码。这种攻击最难防御因为流量监控工具根本看不到异常请求。4.2 URL参数型DOM XSS第五关更隐蔽攻击载荷是通过URL参数传递的。查看源码发现它用window.location.search获取参数然后动态生成链接。虽然效果和反射型XSS类似但原理完全不同。我测试用的payload和第四关相同# onclickalert(URL DOM XSS)这种漏洞在单页应用(SPA)中特别常见去年某电商网站就因此导致用户支付劫持。5. XSS盲打与后台攻击第六关模拟的是盲打场景——我们不知道输入的内容会显示在哪里。就像把写了字的纸条塞进黑箱不知道谁会看到它。我输入scriptalert(后台XSS)/script然后登录后台管理界面提示admin/123456果然在管理员页面看到了弹窗。这种攻击在真实场景中危害极大因为管理员权限高获取的cookie可能直接控制整个网站。6. 突破过滤XSS的花式绕过6.1 基础过滤绕过第七关开始有了防护措施直接输入script标签会被过滤。但安全防护就像防盗网总有没焊牢的接缝。我尝试了几种绕过方法大小写混合ScRiPtalert(1)/ScRiPt嵌套标签scrscriptiptalert(1)/scr/scriptipt使用img标签img srcx onerroralert(1)每种方法都有适用场景实战中需要根据过滤规则灵活调整。某次渗透测试中我甚至用过unicode编码绕过WAF原理就像用摩斯密码交流避开监听。6.2 特殊编码技巧当常规字符被过滤时编码就是我们的变形术。比如img srcx onerroralert(1)可以编码为img srcx onerror#97;#108;#101;#114;#116;#40;#49;#41;浏览器会自动解码执行而很多防护系统不会深度解码检查。7. 高级防御与绕过7.1 htmlspecialchars的局限第八关展示了PHP的htmlspecialchars函数它会把特殊字符转为HTML实体。但就像防盗门没锁死留了条缝——默认配置下不编码单引号。我构造的payload是1 onclickalert(1)点击输入框下方的文字就会触发。这提醒我们安全配置必须完整ENT_QUOTES参数必不可少。7.2 href属性的陷阱第九关的漏洞在a标签的href属性。虽然过滤了尖括号但忽略了javascript协议。输入javascript:alert(1)点击蓝色文字就执行了代码。正确防御需要白名单校验协议头仅允许http/https。7.3 JS上下文中的XSS最后一关的漏洞在JavaScript代码中需要闭合前面的语句。我构造的payloadx/scriptscriptalert(1)/script这就像在对方说话时突然插嘴把话题带偏。防御这种漏洞需要对动态插入的JS数据进行严格转义。8. 防御体系构建经过这些实战我总结出几点防御经验输入过滤前端做展示性过滤后端做实质性校验像海关一样层层把关输出编码根据输出上下文HTML/JS/URL使用不同的编码方案CSP策略通过内容安全策略限制脚本来源就像制定小区访客登记制度HttpOnly Cookie给敏感cookie加上防窃听保护定期扫描使用自动化工具检查XSS漏洞像体检一样定期进行在最近参与的一个Web项目中我们采用组合防护策略后成功拦截了多次XSS攻击尝试。特别是CSP策略即使有漏洞未被发现也能有效限制攻击影响范围。

更多文章