等级4 - 过滤绕过XSS

绕过基础过滤机制实现XSS攻击

挑战描述

在实际应用中,开发者通常会实施一些基础的过滤机制来防止XSS攻击。但是,不完善的过滤往往可以被绕过。这个挑战模拟了一个有基础过滤的搜索功能。

目标:绕过输入过滤机制,成功执行JavaScript代码并弹出包含"XSS"的警告框。

过滤机制分析

// 基础过滤函数 function basicFilter(input) { // 过滤常见的XSS标签(不完善的过滤) let filtered = input; // 过滤script标签(仅小写) filtered = filtered.replace(/<script>/gi, ''); filtered = filtered.replace(/<\/script>/gi, ''); // 过滤一些危险的事件(不完整) filtered = filtered.replace(/javascript:/gi, ''); filtered = filtered.replace(/on\w+=/gi, ''); return filtered; } // 搜索处理函数 function handleSearch(query) { // 应用基础过滤 const filteredQuery = basicFilter(query); // 显示搜索结果(存在XSS漏洞) document.getElementById('searchResult').innerHTML = '搜索结果:' + filteredQuery; } // 过滤分析: // 1. 只过滤了小写的script标签 // 2. 事件处理器过滤不完整 // 3. 没有考虑HTML实体编码 // 4. 没有过滤其他危险标签如img、svg等 // 5. 可以通过大小写混合、编码等方式绕过

搜索测试区域

搜索结果:

请输入搜索关键词
过滤结果将显示在这里
绕过技巧:
  • 大小写混合:<ScRiPt>、<IMG>
  • 事件处理器:onclick、onload、onerror、onmouseover
  • 其他标签:<svg>、<img>、<iframe>
  • HTML实体编码:&lt; &gt;
  • 属性注入:src、href等属性