等级6 - JavaScript协议XSS

利用JavaScript协议实现XSS攻击

挑战描述

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代码 // 当用户点击链接或提交表单时,恶意代码被执行

链接生成测试区域

生成的链接:

表单Action测试区域

测试表单:

当前表单action: /submit
JavaScript协议特点:
  • 可在任何接受URL的地方使用
  • 执行时机:点击链接、提交表单、加载资源时
  • 绕过技巧:大小写混合、编码、空格等
  • 危险场景:href、src、action等属性
  • 防护:严格的URL协议白名单验证