基于DOM型XSS漏洞与利用实验教程

一、实验目的

  1. 理解 DOM 型 XSS 的基本原理与特点。
  2. 掌握在 DVWA 平台中对 DOM XSS 漏洞的发现方法。
  3. 学会在受控环境下对 DOM XSS 进行验证与利用。
  4. 分析不同安全等级下 DVWA 对 DOM XSS 的防护差异。
  5. 掌握 DOM XSS 的基本修复与防御思路。

二、实验原理

  1. 什么是 DOM 型 XSS

DOM 型 XSS(Document Object Model Based XSS)是一种客户端脚本注入漏洞。其特点是:恶意输入通常不会经过服务器端处理后返回;漏洞发生在浏览器端 JavaScript 对页面 DOM 的操作过程中。

常见危险来源:

  • document.location
  • location.href
  • location.search
  • location.hash
  • document.URL
  • document.referrer

常见危险接收点:

  • document.write()
  • innerHTML
  • outerHTML
  • eval()
  • setTimeout() / setInterval()
  • srcdoc
  1. DOM XSS 与其他 XSS 的区别

|-----------|----------------------------|
| 类型 | 特点 |
| 反射型 XSS | 恶意输入由服务器即时返回到页面 |
| 存储型 XSS | 恶意输入被存储到数据库,再展示给用户 |
| DOM 型 XSS | 注入和执行发生在浏览器端,往往与前端 JS 代码有关 |

  1. DVWA 中 DOM XSS 的典型原理

在 DVWA 的 DOM XSS 模块中,页面通常会读取 URL 参数中的值,例如:document.location.href,然后通过不安全方式写回页面,例如:document.write(...)。如果开发者没有对输入进行有效过滤和安全编码,就可能造成脚本执行。

三、实验前置准备

实验前需完成以下配置:

    1. DVWA 已正确部署并可正常登录 DVWA;
    2. 浏览器允许 JavaScript 正常执行;

四**、实验步骤及结果**

步骤 1:Low 级别 DOM XSS

进入DVWA平台后,在 DVWA Security 中将安全级别设置为 Low,然后进入XSS (DOM) 功能页面。页面通常会出现一个语言选择框或 URL 参数控制内容的功能。尝试选择某个语言选项后点击提交:观察地址栏是否出现类似参数:...?default=English

这表明前端脚本可能正在使用 URL 中的 default 参数。

由于参数内容可能被插入到 <option> 标签中,直接输入 <script> 有时不一定能触发。通常可采用闭合原有标签后插入新标签的方式。

可使用如下测试语句:English</option></select><script>alert(1)</script>

拼接测试 URL,提交后观察页面变化,保存截图并分析结果

结果分析

 拼接 URL 访问,页面成功弹出 alert,漏洞触发。

 结果分析:Low 级别无任何防护,直接将参数拼接到 DOM 中,可直接执行脚本。

步骤 2:Medium 级别 DOM XSS

将 DVWA 安全等级设为:Medium

测试绕过思路:尝试插入带事件的 HTML 标签保存截图并分析结果

Payload 成功触发的验证

构造的 Payload:

?default=English</option></select><img src=x onerror="alert('DOM XSS')">

访问该 URL 后,页面成功弹出 DOM XSS 提示框,说明注入的 JavaScript 代码已被浏览器解析并执行,DOM XSS 漏洞在 Medium 级别下可被成功利用。

结果分析

  • 页面通过 JavaScript 读取 URL 中 default 参数的值,并直接拼接到页面的 <select> 下拉框 DOM 中,未对用户可控数据进行安全编码或过滤。
  • Payload 中 English</option></select> 先闭合了原有的下拉框标签,使后续注入的 <img> 标签能被浏览器正常解析。
  • <img src=x onerror="alert('DOM XSS')"> 中,src=x 会触发图片加载错误,进而触发 onerror 事件,执行 alert() 脚本,实现 XSS 攻击。

步骤 3:High 级别 DOM XSS

将 DVWA 安全等级设为:High

分别尝试直接输入脚本 、和带事件的 HTML 标签。

再测试:#default=<script>alert(1)</script> 提交后观察页面变化,保存截图并分析结果

结果分析:

High 级别后端对 URL 中 ? 后的 default 参数做了严格的白名单校验,仅允许预设的语言值(English/French/Spanish/German),非白名单内容会被直接过滤,因此常规注入全部失效。

成功版#default=<script>alert(1)</script>

结果分析

  1. 访问该 URL 后,页面成功弹出alert(1)提示框,说明脚本已被浏览器解析并执行。
  2. 地址栏的 URL 中,#后的内容未发送到服务器,因此绕过后端的白名单过滤;而前端 JavaScript 会读取 Hash 中的default参数值,并直接写入页面 DOM 中,导致恶意脚本被执行。

步骤 4:DOM XSS 常见利用方式(LOW级别)

1. 窃取 Cookie(最常用)

测试payload:

default=<script>alert(document.cookie)</script>

提交后观察页面变化,保存截图并分析结果

结果与分析

  • 现象:页面弹出包含当前会话 Cookie 的提示框,内容类似 security=low; PHPSESSID=xxxxxx。
  • 原理:document.cookie 可以读取当前页面的 Cookie 信息,XSS 脚本执行后,通过 alert() 将 Cookie 显示出来。
  • 危害:攻击者可以将窃取到的 Cookie 发送到自己的服务器,实现会话劫持,登录受害者的账户。

2. 跳转到钓鱼页面

测试payload:

default=<script>location.href='http://www,b'</script>

提交后观察页面变化,保存截图并分析结果

测试 Payload

?default=<script>location.href='https://www.baidu.com'</script>

操作步骤

保持安全等级为 Low,在地址栏构造完整 URL:

http://127.0.0.1:8888/dvwa/vulnerabilities/xss_d/?default=\<script>location.href='https://www.baidu.com'</script>

结果与分析

  • 现象:页面自动跳转到 Payload 中指定的 URL(如百度首页)。
  • 原理:location.href 可以修改当前页面的跳转地址,脚本执行后,浏览器会直接加载目标 URL。
  • 危害:攻击者可以将用户跳转到仿冒的钓鱼页面,诱导用户输入账号密码,从而窃取用户信息。

3. 获取页面源码

测试payload:

default=<script>alert(document.documentElement.outerHTML)</script>

提交后观察页面变化,保存截图并分析结果

结果与分析

  • 现象:页面弹出包含当前页面完整 HTML 源码的提示框。
  • 原理:document.documentElement.outerHTML 可以获取当前页面根元素(<html>)的所有 HTML 代码,包括页面结构、隐藏元素和部分前端敏感信息。
  • 危害:攻击者可以通过获取页面源码,分析页面逻辑、接口路径或隐藏的敏感信息,为进一步攻击做准备。

五、实验小结

防御要点

  • 避免使用document.write、innerHTML直接插入用户可控数据;
  • 对 URL 参数、hash 值做HTML 编码与 JS 编码
  • 白名单限制可控内容,禁止执行未知脚本。
相关推荐
Aotman_2 小时前
Element UI 表格搜索高亮
前端·javascript·vue.js·ui·elementui
yqcoder3 小时前
[特殊字符] Vue 3 中 Keep-Alive 对生命周期的影响:深度解析
前端·javascript·vue.js
jiayong233 小时前
第 33 课:任务看板视图(按状态分列)与本地持久化
开发语言·前端·javascript·学习
GISer_Jing3 小时前
Dify可视化编排:技术架构与实战指南
前端·人工智能·ai编程
宇宙realman_9993 小时前
DSP28335-FlashAPI使用
linux·前端·python
踩着两条虫4 小时前
VTJ 平台六大设计模式落地实战指南
开发语言·前端·人工智能·低代码·设计模式·重构·架构
Yeats_Liao4 小时前
后台 Sidebar 伸缩交互(PC + 移动端)实现
前端·javascript·css·html5
MXN_小南学前端4 小时前
computed 计算属性详解:触发时机、实战场景、Vue2 与 Vue3 对比
前端·javascript·vue.js
isNotNullX4 小时前
数据大屏怎么做?数据大屏有哪四个核心环节
开发语言·前端·javascript