DVWA靶场之XSS(Reflected)学习分享
字数 1182 2025-08-24 20:49:31

DVWA靶场之XSS(Reflected)教学文档

1. XSS(Reflected)概述

反射型XSS(Reflected Cross-Site Scripting)是一种常见的Web安全漏洞,攻击者将恶意脚本注入到URL参数中,当用户访问包含恶意参数的链接时,服务器会"反射"回这些参数并在用户浏览器中执行恶意代码。

2. 不同安全级别的XSS(Reflected)分析与利用

2.1 Low级别

代码分析

  • 直接引用name参数,没有任何过滤与检查
  • 存在明显的XSS漏洞

利用方法

<script>alert(/xss/)</script>

直接在输入框中提交上述payload即可触发弹窗。

2.2 Medium级别

代码分析

  • 使用str_replace函数过滤输入
  • 基于黑名单思想,删除<script>标签
  • 防护机制较弱,可被多种方式绕过

绕过方法

  1. 双写绕过
<sc<script>ript>alert(/xss/)</script>

服务器删除中间的<script>后,剩余的字符会重新组合成有效的<script>标签。

  1. 大小写混淆绕过
<ScRipt>alert(/xss/)</script>

利用大小写变体绕过简单的字符串匹配。

  1. 非script标签payload

使用img标签的onmouseover事件触发XSS,当鼠标移动到图片上时执行。

2.3 High级别

代码分析

  • 使用preg_replace()函数进行正则表达式过滤
  • 正则表达式使用i修饰符(不区分大小写)
  • 使双写绕过和大小写混淆失效

绕过方法


虽然无法使用<script>标签,但可以通过其他HTML标签的事件属性(如img的onerror)执行JavaScript。

2.4 Impossible级别

代码分析

  • 使用htmlspecialchars函数转换特殊字符
  • 将预定义字符(&, ", ', <, >)转换为HTML实体
  • 有效防止浏览器将输入解释为HTML元素

防护效果

  • 完全防御XSS攻击
  • 所有特殊字符都会被编码,无法作为HTML或JavaScript执行

3. 防御建议

  1. 输入过滤

    • 使用白名单而非黑名单
    • 对特殊字符进行编码或转义
  2. 输出编码

    • 使用htmlspecialchars等函数对输出进行编码
    • 根据上下文(HTML, JavaScript, URL等)选择合适的编码方式
  3. 内容安全策略(CSP)

    • 实施严格的内容安全策略
    • 限制脚本执行来源
  4. HTTP头设置

    • 设置X-XSS-Protection
    • 设置Content-Type头并指定字符编码

4. 总结

反射型XSS漏洞的严重性取决于防护措施的有效性:

  • 无防护(Low):直接执行任意脚本
  • 简单过滤(Medium):可通过多种方式绕过
  • 严格过滤(High):仍可通过非script方式利用
  • 正确编码(Impossible):完全防御

开发者应始终对用户输入保持警惕,实施多层次的防御措施来防止XSS攻击。

DVWA靶场之XSS(Reflected)教学文档 1. XSS(Reflected)概述 反射型XSS(Reflected Cross-Site Scripting)是一种常见的Web安全漏洞,攻击者将恶意脚本注入到URL参数中,当用户访问包含恶意参数的链接时,服务器会"反射"回这些参数并在用户浏览器中执行恶意代码。 2. 不同安全级别的XSS(Reflected)分析与利用 2.1 Low级别 代码分析 : 直接引用name参数,没有任何过滤与检查 存在明显的XSS漏洞 利用方法 : 直接在输入框中提交上述payload即可触发弹窗。 2.2 Medium级别 代码分析 : 使用 str_replace 函数过滤输入 基于黑名单思想,删除 <script> 标签 防护机制较弱,可被多种方式绕过 绕过方法 : 双写绕过 : 服务器删除中间的 <script> 后,剩余的字符会重新组合成有效的 <script> 标签。 大小写混淆绕过 : 利用大小写变体绕过简单的字符串匹配。 非script标签payload : 使用img标签的onmouseover事件触发XSS,当鼠标移动到图片上时执行。 2.3 High级别 代码分析 : 使用 preg_replace() 函数进行正则表达式过滤 正则表达式使用 i 修饰符(不区分大小写) 使双写绕过和大小写混淆失效 绕过方法 : 虽然无法使用 <script> 标签,但可以通过其他HTML标签的事件属性(如img的onerror)执行JavaScript。 2.4 Impossible级别 代码分析 : 使用 htmlspecialchars 函数转换特殊字符 将预定义字符(&, ", ', <, >)转换为HTML实体 有效防止浏览器将输入解释为HTML元素 防护效果 : 完全防御XSS攻击 所有特殊字符都会被编码,无法作为HTML或JavaScript执行 3. 防御建议 输入过滤 : 使用白名单而非黑名单 对特殊字符进行编码或转义 输出编码 : 使用 htmlspecialchars 等函数对输出进行编码 根据上下文(HTML, JavaScript, URL等)选择合适的编码方式 内容安全策略(CSP) : 实施严格的内容安全策略 限制脚本执行来源 HTTP头设置 : 设置 X-XSS-Protection 头 设置 Content-Type 头并指定字符编码 4. 总结 反射型XSS漏洞的严重性取决于防护措施的有效性: 无防护(Low):直接执行任意脚本 简单过滤(Medium):可通过多种方式绕过 严格过滤(High):仍可通过非script方式利用 正确编码(Impossible):完全防御 开发者应始终对用户输入保持警惕,实施多层次的防御措施来防止XSS攻击。