等级5 - 属性注入XSS

通过HTML属性注入实现XSS攻击

挑战描述

属性注入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')

图片链接测试区域

图片显示区域:

默认图片

用户资料测试区域

用户资料显示:

属性注入技巧:
  • 闭合引号:使用"或'来闭合当前属性
  • 注入事件:onerror、onload、onclick、onmouseover等
  • JavaScript协议:javascript:alert('XSS')
  • 多重编码:HTML实体、URL编码等
  • 注意上下文:单引号、双引号的使用