DVWA下的XSS通关(反射型)
字数 1145 2025-08-15 21:32:22
DVWA反射型XSS通关详解
一、XSS基础概念
XSS(Cross Site Scripting)即跨站脚本攻击,是一种注入攻击形式,攻击者在页面中注入恶意脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行。
XSS分类:
- 存储型XSS:恶意代码存储在服务器中
- 反射型XSS:非持久化,需要欺骗用户点击特定链接才能触发
- DOM型XSS:基于DOM树的XSS,可能是存储型也可能是反射型
XSS常见用途:
- 盗取用户cookies
- 劫持会话
- 流量劫持
- 网页挂马
- DDOS攻击
- 权限提升
二、DVWA反射型XSS通关详解
1. Low Security Level
漏洞代码分析:
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
漏洞特征:
- 直接采用GET方式传入name参数
- 没有任何过滤与检查
- 存在明显的XSS漏洞
测试Payload:
<script>alert(/xss/)</script>
URL编码分析:
- %3C = <
- %3E = >
- %28 = (
- %29 = )
- %2F = /
2. Medium Security Level
防护代码分析:
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
防护特点:
- 使用str_replace函数将
<script>替换为空 - 黑名单防护机制
绕过方法:
-
大小写绕过
<ScRipt>alert(/xss/)</ScRipt> -
双写绕过
<scr<script>ipt>alert(/xss/)</script> -
使用非script标签
- img标签:
- iframe标签:
<iframe onload=alert(1)> <iframe src=javascript:alert('xss');height=0 width=0 />
- img标签:
3. High Security Level
防护代码分析:
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
防护特点:
- 使用preg_replace函数进行正则替换
- 正则表达式不区分大小写(i修饰符)
- 防止了双写和大小写混淆绕过
绕过方法:
-
使用img标签及其变种
编码变种:
-
使用iframe标签
<iframe onload=alert(/xss/)> -
使用DATA URL
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>
4. Impossible Security Level
防护代码分析:
$name = htmlspecialchars( $_GET[ 'name' ] );
防护特点:
- 使用htmlspecialchars函数转换特殊字符为HTML实体
- 转换规则:
- & → &
- " → "
- ' → ' (需要ENT_QUOTES参数)
- < → <
-
→ >
防护效果:
- 完全防止了反射型XSS利用
- 可作为最佳加固方案参考
三、总结与防御建议
攻击技术总结:
- 基本XSS注入
- 编码绕过技术
- 标签替换技术
- 事件处理器利用
- DATA URL利用
防御建议:
-
输入过滤:
- 使用htmlspecialchars等函数转换特殊字符
- 实施严格的白名单策略而非黑名单
-
输出编码:
- 根据输出上下文(HTML, JavaScript, CSS等)进行适当编码
-
内容安全策略(CSP):
- 限制可执行脚本的来源
- 防止内联脚本执行
-
其他措施:
- 设置HttpOnly标志保护cookie
- 实施X-XSS-Protection头部
- 使用现代框架的自动编码功能
通过理解这些攻击技术和防御措施,可以更好地保护Web应用免受XSS攻击的威胁。