Web For Pentester 平台 针对Xss-Example 1-10
字数 1463 2025-08-18 11:38:31
Web For Pentester XSS 漏洞实战教程 (Example 1-10)
前言
Web For Pentester 是一个专为初学者设计的 PHP 漏洞学习环境,本教程详细解析其中的 XSS 漏洞示例 1-10,帮助学习者深入理解跨站脚本攻击的各种形式和防御方法。
XSS 基础概念
跨站脚本攻击 (XSS) 是一种将恶意脚本注入到可信网站中的攻击方式,主要分为三类:
- 反射型 XSS
- 存储型 XSS
- DOM 型 XSS
示例解析
Example 1: 基础 XSS
<script>alert(1)</script>
特点:最简单的 XSS 注入,无任何过滤
Example 2: 基础过滤
<sc<script>ript>alert(1)</sc</script>ript>
特点:过滤了 script 标签
绕过方法:在过滤的关键词中插入自身,使过滤后形成完整标签
Example 3: 变体过滤
<-sc<-script>ript>alert(1)<-/sc<-/script>ript>
特点:使用 <- 替代 < 进行过滤
绕过方法:与 Example 2 类似,在过滤模式中插入自身
Example 4: 黑名单过滤
特点:完全禁止 script 标签
绕过方法:使用其他可执行 JavaScript 的 HTML 标签(如 img 的 onerror 事件)
Example 5: 关键词过滤
<script>eval(String.fromCharCode(97,108,101,114,116,40,49,41))</script>
特点:过滤 alert 关键词
绕过方法:
- 使用其他弹窗函数(prompt/confirm)
- 使用 String.fromCharCode 编码 alert(1):
- 97(a), 108(l), 101(e), 114(r), 116(t), 40((), 49(1), 41())
- 使用 eval 执行编码后的字符串
Example 6: JavaScript 字符串注入
";alert(1);//
特点:输入被放入 JavaScript 字符串变量中
var $a = "hacker<script>alert(1)</script>";
绕过方法:
- 闭合前面的引号和分号
- 插入恶意代码
- 注释掉后面的内容
Example 7: 单引号变体
';alert(1);//
特点:与 Example 6 类似,但使用单引号包裹
绕过方法:原理相同,使用单引号闭合
Example 8: 表单属性注入
/"><script>alert(1)</script>
特点:输入被放入表单属性中,< 被转义
绕过方法:
- 先闭合表单标签
- 然后插入恶意脚本
Example 9: DOM 型 XSS
example9.php?<script>alert(1)</script>
example9.php#<script>alert(1)</script>
特点:利用 location.hash 实现 DOM XSS
关键点:
#后的内容不会发送到服务器- 仅在客户端由浏览器解析
- 现代浏览器会对
<自动编码(转为 %3C)
Example 10: 进阶 DOM XSS
(原文未提及,但通常涉及更复杂的 DOM 操作)
防御措施总结
-
输入过滤:
- 黑名单方式容易被绕过
- 推荐使用白名单方式
-
输出编码:
- HTML 实体编码
- JavaScript 编码
- URL 编码
-
内容安全策略 (CSP):
- 限制脚本来源
- 禁止内联脚本
-
HttpOnly Cookie:
- 防止 JavaScript 访问敏感 Cookie
-
框架安全功能:
- 现代框架(如 React、Vue)的自动转义
实战技巧
-
多尝试不同的事件处理器:
- onerror, onload, onclick 等
-
使用编码绕过:
- HTML 实体
- URL 编码
- Unicode 编码
-
注意上下文:
- HTML 标签内
- HTML 属性中
- JavaScript 代码中
- URL 参数中
-
测试各种闭合方式:
- 引号闭合
- 标签闭合
- 注释掉后续内容
本教程详细解析了 Web For Pentester 中的 XSS 示例,展示了从基础到进阶的各种 XSS 攻击技术和防御方法,是学习 Web 安全的宝贵资源。