等级3 - 存储型XSS

通过留言板实现持久化XSS攻击

挑战描述

存储型XSS是最危险的XSS类型,恶意代码被永久存储在服务器上,每当用户访问包含恶意代码的页面时都会执行攻击。这种攻击影响所有访问该页面的用户。

目标:在留言板中提交恶意代码,使其被存储并在页面显示时执行,弹出包含"XSS"的警告框。

漏洞代码分析

// 模拟服务器端存储逻辑 function addComment(name, message) { // 直接存储用户输入,没有任何过滤(存在XSS漏洞) const comment = { id: Date.now(), name: name, message: message, // 危险:直接存储原始输入 timestamp: new Date().toLocaleString() }; // 存储到本地存储(模拟数据库) let comments = JSON.parse(localStorage.getItem('comments') || '[]'); comments.push(comment); localStorage.setItem('comments', JSON.stringify(comments)); return comment; } // 显示留言的函数 function displayComments() { const comments = JSON.parse(localStorage.getItem('comments') || '[]'); const container = document.getElementById('comments'); container.innerHTML = ''; comments.forEach(comment => { // 危险:直接使用innerHTML输出用户数据 container.innerHTML += ` <div class="comment"> <strong>${comment.name}</strong> <span class="timestamp">${comment.timestamp}</span> <p>${comment.message}</p> // XSS漏洞点 </div> `; }); } // 漏洞分析: // 1. 用户输入直接存储,没有验证或过滤 // 2. 显示时使用innerHTML,允许HTML/JS执行 // 3. 影响所有访问页面的用户(持久化攻击)

留言板测试区域

存储型XSS特点:
  • 恶意代码被永久存储在服务器
  • 影响所有访问该页面的用户
  • 攻击持续时间长,危害最大
  • 常见于留言板、评论系统、用户资料等

留言列表