挑战描述
属性注入XSS发生在用户输入被插入到HTML标签的属性中时。即使标签本身是安全的,恶意的属性值也可能导致JavaScript执行。这种攻击常见于图片链接、表单值等场景。
目标:通过修改图片链接的值,注入恶意属性来执行JavaScript代码并弹出包含"XSS"的警告框。
漏洞代码分析
// 图片显示函数
function displayImage(imageUrl) {
// 直接将用户输入插入到HTML属性中(存在XSS漏洞)
const imgHtml = '<img src="' + imageUrl + '" alt="用户图片" width="200">';
// 使用innerHTML输出
document.getElementById('imageContainer').innerHTML = imgHtml;
}
// 表单处理函数
function updateProfile(name, value) {
// 直接将用户输入作为表单值(存在XSS漏洞)
const inputHtml = '<input type="text" value="' + value + '" readonly>';
document.getElementById('profileContainer').innerHTML =
'<label>' + name + ':</label>' + inputHtml;
}
// 漏洞分析:
// 1. 用户输入直接插入到HTML属性中
// 2. 没有对引号进行转义或过滤
// 3. 攻击者可以闭合属性并注入新属性
// 4. 事件处理器属性可以执行JavaScript代码
// 攻击示例:
// 输入:x" onerror="alert('XSS')"
// 生成:<img src="x" onerror="alert('XSS')"" alt="用户图片">
// 结果:当图片加载失败时执行alert('XSS')