挑战描述
DOM型XSS发生在客户端,通过JavaScript操作DOM来执行恶意代码。与反射型XSS不同,DOM型XSS的payload不会发送到服务器,而是在客户端直接执行。
目标:通过URL参数注入恶意代码,使页面弹出包含"XSS"的警告框。
💡 提示
- 观察URL中的id参数是如何被处理的
- JavaScript使用innerHTML直接输出用户输入
- 尝试在URL中添加id参数,如:?id=test
- 构造包含HTML标签的payload
- 示例URL:level2.html?id=<script>alert('XSS')</script>
漏洞代码分析
// JavaScript DOM操作代码
function displayContent() {
// 从URL中获取id参数
const urlParams = new URLSearchParams(window.location.search);
let id = urlParams.get('id') || '';
// URL解码
id = decodeURIComponent(id);
// 直接使用innerHTML输出(存在XSS漏洞)
document.getElementById('content').innerHTML =
'用户ID: ' + id;
}
// 页面加载时执行
window.onload = displayContent;
// 漏洞分析:
// 1. 直接从URL获取参数
// 2. 使用innerHTML输出,允许HTML标签执行
// 3. 没有任何输入验证或输出编码