DOM XSS漏洞挖掘实战DVWA靶场中的前端代码审计与高级利用技巧在当今的Web安全领域DOM型XSS跨站脚本攻击因其独特的攻击方式和隐蔽性成为安全研究人员重点关注的对象。与传统的反射型和存储型XSS不同DOM型XSS完全在客户端执行不经过服务器端处理这使得常规的防护手段往往失效。本文将带您深入DVWADamn Vulnerable Web Application靶场通过三个不同难度级别的实战案例系统性地剖析DOM XSS的挖掘方法与利用技巧。1. DOM XSS漏洞原理与审计方法论DOMDocument Object Model是浏览器对HTML文档的结构化表示JavaScript可以通过DOM API动态修改页面内容。当不可信的用户输入未经适当处理就被传递给某些危险的DOM操作时就可能引发DOM型XSS漏洞。1.1 危险DOM操作清单以下是最常见的危险DOM操作审计时应重点关注// 直接写入HTML的危险方法 document.write() document.writeln() element.innerHTML element.outerHTML // URL相关操作 location.href location.hash location.search // 其他高风险操作 eval() setTimeout()/setInterval() 的第一个参数 Function() 构造函数1.2 代码审计四步法识别输入源查找所有可能接收外部输入的入口点URL参数location.search/hash表单输入CookieWeb存储localStorage/sessionStorageWebSocket消息追踪数据流分析输入数据如何在代码中传递是否经过任何过滤或编码是否被拼接进HTML或JavaScript代码识别危险接收器检查输入最终是否到达危险DOM操作验证可利用性构造测试payload确认漏洞存在1.3 DVWA靶场环境准备在开始实战前确保您已正确搭建DVWA环境# 使用Docker快速部署DVWA docker run --rm -it -p 80:80 vulnerables/web-dvwa访问http://localhost使用默认凭证登录admin/password将安全级别设置为Low。2. Low级别无防护的DOM XSS案例Low级别展示了最基础的DOM型XSS漏洞没有任何防护措施是理解漏洞原理的理想起点。2.1 漏洞分析查看页面源代码关键部分如下script if (document.location.href.indexOf(default) 0) { var lang document.location.href.substring(document.location.href.indexOf(default)8); document.write(option value lang decodeURI(lang) /option); document.write(option value disableddisabled----/option); } /script这段代码存在两个高危问题直接从URL获取default参数值未做任何过滤使用document.write()将参数值直接写入DOM2.2 漏洞利用构造以下URL即可触发XSShttp://localhost/vulnerabilities/xss_d/?defaultscriptalert(document.cookie)/script技术细节decodeURI(lang)对URL编码进行解码使得特殊字符能够被浏览器解析document.write()将我们的脚本直接写入页面导致执行2.3 防御方案防御措施实现方式有效性输入验证白名单仅允许特定语言★★★★☆输出编码对动态内容进行HTML实体编码★★★☆☆避免危险API使用textContent代替innerHTML★★★★★CSP策略设置Content-Security-Policy头★★★★☆3. Medium级别绕过基础过滤的进阶技巧Medium级别引入了基础的防护措施但存在明显的绕过可能。3.1 防护机制分析后端PHP代码新增了过滤if (stripos ($default, script) ! false) { header (location: ?defaultEnglish); exit; }这段代码仅检查了script标签防御非常薄弱。3.2 绕过技巧实战我们可以使用多种方式绕过这种过滤使用其他HTML标签http://localhost/vulnerabilities/xss_d/?default/option/selectimg srcx onerroralert(1)利用事件处理器http://localhost/vulnerabilities/xss_d/?defaultsvg onloadalert(1)大小写混淆http://localhost/vulnerabilities/xss_d/?defaultScRiPtalert(1)/sCriPt3.3 高级Payload构造下表总结了不同场景下的有效Payload过滤条件绕过Payload原理说明过滤