DVWA下的XSS通关(DOM型)
字数 1161 2025-08-15 21:32:24

DVWA下的DOM型XSS通关详解

1. XSS基础概念

XSS (Cross Site Scripting) 跨站脚本攻击:

  • 一种注入攻击,攻击者在页面中注入恶意脚本代码
  • 受害者访问该页面时,恶意代码会在其浏览器上执行
  • 不仅限于JavaScript,还包括flash等脚本语言

XSS分类:

  • 存储型XSS:恶意代码存储在服务器中
  • 反射型XSS:恶意代码不存储在服务器中
  • DOM型XSS:基于DOM树的特殊类型,可能是存储型或反射型

XSS常见用途:

  • 盗取用户cookies
  • 劫持会话
  • 流量劫持
  • 网页挂马
  • DDOS攻击
  • 权限提升

2. DOM型XSS详解

DOM (Document Object Model):

  • 平台和语言中立的接口
  • 使程序和脚本能动态访问和更新文档内容、结构及样式
  • DOM型XSS是基于DOM文档对象模型的漏洞

工作原理:

  • 浏览器为页面创建顶级Document对象
  • 生成各个子文档对象,每个页面元素对应一个文档对象
  • 可通过JS脚本对文档对象进行编辑从而修改页面元素
  • 客户端脚本通过DOM动态修改页面内容,获取DOM数据并在本地执行

3. DVWA中的DOM型XSS通关

3.1 Low级别

服务器端代码:

<?php # No protections, anything goes ?>

攻击方法:

  • 直接在URL输入:default=<script>alert(/xss/)</script>
  • 无任何防护措施,直接注入即可

3.2 Medium级别

服务器端代码:

<?php
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    $default = $_GET['default'];
    // 过滤<script>标签
    if (stripos ($default, "<script") !== false) {
        header ("location: ?default=English");
        exit;
    }
}
?>

防护措施:

  • 检查输入中是否包含<script>标签
  • 如果发现则重定向到默认页面

绕过方法:

  • 使用非<script>标签的XSS向量
  • 示例:闭合现有标签并构造XSS事件
    ></option></select><iframe onload=alert(/xss/)>
    

3.3 High级别

服务器端代码:

<?php
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    // 白名单过滤
    switch ($_GET['default']) {
        case "French":
        case "English":
        case "German":
        case "Spanish":
            // 允许的值
            break;
        default:
            header ("location: ?default=English");
            exit;
    }
}
?>

防护措施:

  • 采用白名单机制,只允许French、English、German、Spanish四个值
  • 其他输入都会被重定向到默认页面

绕过方法:

  • 利用URL片段标识符(#)绕过白名单检查
  • 示例:
    default=English#</option></select><iframe onload=alert(/xss/)></option>
    

3.4 Impossible级别

服务器端代码:

<?php # Don't need to do anything, protction handled on the client side ?>

防护措施:

  • 注释表明防护在客户端实现
  • 实际无服务器端防护(根据提供的代码)

4. 防御建议

  1. 输入验证:

    • 实施严格的白名单验证
    • 对特殊字符进行转义
  2. 输出编码:

    • 对所有动态输出进行HTML编码
    • 使用安全的API如textContent代替innerHTML
  3. 内容安全策略(CSP):

    • 实施严格的CSP策略
    • 限制内联脚本执行
  4. 其他措施:

    • 设置HttpOnly标志保护cookie
    • 使用X-XSS-Protection头
    • 考虑使用现代框架如React/Vue的自动转义功能

5. 总结

DOM型XSS攻击特点:

  • 不依赖服务器端处理
  • 完全在客户端执行
  • 需要仔细分析DOM操作和数据流

防御关键:

  • 不要信任客户端输入
  • 安全地处理DOM操作
  • 结合多种防御措施形成纵深防御
DVWA下的DOM型XSS通关详解 1. XSS基础概念 XSS (Cross Site Scripting) 跨站脚本攻击: 一种注入攻击,攻击者在页面中注入恶意脚本代码 受害者访问该页面时,恶意代码会在其浏览器上执行 不仅限于JavaScript,还包括flash等脚本语言 XSS分类: 存储型XSS:恶意代码存储在服务器中 反射型XSS:恶意代码不存储在服务器中 DOM型XSS:基于DOM树的特殊类型,可能是存储型或反射型 XSS常见用途: 盗取用户cookies 劫持会话 流量劫持 网页挂马 DDOS攻击 权限提升 2. DOM型XSS详解 DOM (Document Object Model): 平台和语言中立的接口 使程序和脚本能动态访问和更新文档内容、结构及样式 DOM型XSS是基于DOM文档对象模型的漏洞 工作原理: 浏览器为页面创建顶级Document对象 生成各个子文档对象,每个页面元素对应一个文档对象 可通过JS脚本对文档对象进行编辑从而修改页面元素 客户端脚本通过DOM动态修改页面内容,获取DOM数据并在本地执行 3. DVWA中的DOM型XSS通关 3.1 Low级别 服务器端代码: 攻击方法: 直接在URL输入: default=<script>alert(/xss/)</script> 无任何防护措施,直接注入即可 3.2 Medium级别 服务器端代码: 防护措施: 检查输入中是否包含 <script> 标签 如果发现则重定向到默认页面 绕过方法: 使用非 <script> 标签的XSS向量 示例:闭合现有标签并构造XSS事件 3.3 High级别 服务器端代码: 防护措施: 采用白名单机制,只允许French、English、German、Spanish四个值 其他输入都会被重定向到默认页面 绕过方法: 利用URL片段标识符(#)绕过白名单检查 示例: 3.4 Impossible级别 服务器端代码: 防护措施: 注释表明防护在客户端实现 实际无服务器端防护(根据提供的代码) 4. 防御建议 输入验证: 实施严格的白名单验证 对特殊字符进行转义 输出编码: 对所有动态输出进行HTML编码 使用安全的API如textContent代替innerHTML 内容安全策略(CSP): 实施严格的CSP策略 限制内联脚本执行 其他措施: 设置HttpOnly标志保护cookie 使用X-XSS-Protection头 考虑使用现代框架如React/Vue的自动转义功能 5. 总结 DOM型XSS攻击特点: 不依赖服务器端处理 完全在客户端执行 需要仔细分析DOM操作和数据流 防御关键: 不要信任客户端输入 安全地处理DOM操作 结合多种防御措施形成纵深防御