挑战描述
JavaScript协议XSS是一种特殊的XSS攻击方式,通过在URL中使用javascript:协议来执行恶意代码。这种攻击常见于链接、表单action、iframe src等场景,特别是当应用允许用户自定义链接时。
目标:通过修改链接URL,使用JavaScript协议执行恶意代码并弹出包含"XSS"的警告框。
漏洞代码分析
// 链接生成函数
function createLink(url, text) {
// 简单的URL验证(存在绕过漏洞)
if (url.toLowerCase().startsWith('http://') ||
url.toLowerCase().startsWith('https://') ||
url.toLowerCase().startsWith('ftp://')) {
// 认为是安全的URL
} else {
// 其他协议可能被忽略(包括javascript:)
console.log('非标准协议URL:' + url);
}
// 直接生成链接(存在XSS漏洞)
const linkHtml = '<a href="' + url + '" target="_blank">' + text + '</a>';
return linkHtml;
}
// 表单处理函数
function updateForm(action) {
// 直接设置表单action(存在XSS漏洞)
document.getElementById('testForm').action = action;
// 显示当前action
document.getElementById('formAction').innerHTML =
'当前表单action: ' + action;
}
// 漏洞分析:
// 1. URL验证不完善,只检查了常见的http/https协议
// 2. javascript:协议没有被过滤
// 3. 用户输入直接插入到href属性中
// 4. 表单action也可以使用javascript:协议
// 攻击原理:
// javascript:协议允许在URL中执行JavaScript代码
// 当用户点击链接或提交表单时,恶意代码被执行