DVWA-XSS(Stored)
字数 1506 2025-08-11 17:39:51
存储型XSS漏洞分析与利用教学文档
1. 存储型XSS概述
存储型XSS(Stored Cross-Site Scripting)是一种恶意脚本被永久存储在目标服务器上的XSS攻击类型。当用户访问包含恶意脚本的页面时,脚本会从服务器加载并在用户浏览器中执行。
2. 不同安全等级的存储型XSS分析
2.1 Low级别
漏洞分析:
- 输入处理函数:
trim(): 仅移除字符串两侧空白字符mysql_real_escape_string(): 仅转义SQL特殊字符stripslashes(): 仅删除反斜杠
- 未对XSS相关字符进行任何过滤
利用方法:
- 在message栏直接输入:
<script>alert(/xss/)</script> - 对于name栏(有前端长度限制):
- 使用开发者工具修改长度限制
- 或抓包修改name参数为:
<script>alert(/name/)</script>
2.2 Medium级别
防护措施:
strip_tags(): 剥离HTML/XML/PHP标签(保留<b>标签)addslashes(): 在特殊字符前添加反斜杠- 对message参数使用
htmlspecialchars()编码 - 对name参数简单过滤
<script>字符串
绕过方法:
- 双写绕过:
- Payload:
<sc<script>ript>alert(/xss/)</script>
- Payload:
- 大小写混淆:
- Payload:
<Script>alert(/xss/)</script>
- Payload:
- 非script标签利用:
- Payload: ``
2.3 High级别
防护措施:
- 使用正则表达式过滤
<script>标签
绕过方法:
- 使用其他危险标签如img、iframe等:
- Payload: ``
2.4 Impossible级别
防护措施:
- 全面使用
htmlspecialchars()函数对输出进行编码 - 注意: 若使用不当仍可能被绕过,特别是DOM型XSS
3. 关键函数解析
-
trim(string, charlist)
- 功能: 移除字符串两侧空白字符或预定义字符
- 预定义字符:
\t,\n,\x0B,\r, 空格 - 可选参数charlist可添加额外需删除字符
-
mysql_real_escape_string(string, connection)
- 功能: 转义字符串中的特殊符号
- 转义字符:
\x00,\n,\r,\,',",\x1a
-
stripslashes(string)
- 功能: 删除字符串中的反斜杠
-
strip_tags()
- 功能: 剥去字符串中的HTML、XML和PHP标签
- 可保留特定标签(如
<b>)
-
addslashes()
- 功能: 在预定义字符前添加反斜杠
- 预定义字符: 单引号、双引号、反斜杠、NULL
-
htmlspecialchars()
- 功能: 将特殊字符转换为HTML实体
- 关键防御函数,但需正确使用
4. 防御建议
- 对所有用户输入进行严格的验证和过滤
- 输出时使用
htmlspecialchars()等函数进行编码 - 实施内容安全策略(CSP)
- 避免直接使用用户输入构建DOM
- 对不同的上下文(HTML、JavaScript、CSS、URL)采用不同的编码方式
5. 总结
存储型XSS的危害性较大,因为恶意代码会持久存储在服务器上,影响所有访问相关页面的用户。防御存储型XSS需要结合输入验证、输出编码和适当的上下文处理,不能仅依赖单一防护措施。