【网络安全】DVWA之XSS(DOM)攻击姿势及解题详析合集

文章详细分析了DOM型XSS攻击的不同级别,从低级到高级,包括如何绕过源代码过滤,利用<script>和<option>标签进行payload构造,以及在高难度级别中使用白名单机制防止攻击。同时,讨论了Impossiblelevel的情况,展示了即使在严格条件下,攻击者可能如何尝试注入恶意脚本。
部署运行你感兴趣的模型镜像

XSS(DOM)-low level

源代码未进行任何过滤
复选框中的内容为可变参数

在这里插入图片描述
Payload:<script>alert("qiu")</script>

在这里插入图片描述


XSS(DOM)-medium level

源代码

<?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;
    }
}
?> 

功能如下:

1.通过 array_key_exists() 函数来判断 $_GET 超级全局变量中是否存在名为 default 的键,如果存在并且不为 null,则将其赋值给 $default 变量。

2.使用 stripos() 函数查找 $default 中是否包含 <script 字符串,如果包含,则通过 header() 函数将页面重定向到 ?default=English

姿势

正常Select时,页面如下:

在这里插入图片描述
采用其它XSS标签

Payload:<img src=1 onerror=alert("qiu")>
页面如下:

在这里插入图片描述
上图说明XSS语句被包含在option标签里
此时客户端为:

<select><option <img xss语句>> </option>

因此要想办法使XSS语句逃逸
Payload:></option><img src=1 onerror=alert("qiu")>

在这里插入图片描述此时客户端为:

<select><option></option><img xss语句>> </option>

化简后即为

<select><img xss语句>></option>

由于select标签的存在,XSS语句仍然不可逃逸,加入</select>标签
Payload:></option></select><img src = 1 onerror = alert("qiu")>
此时客户端为:

<select><option></option></select><img xss语句>> </option>

化简后即为

<img xss语句>></option>

由于后面的</option>没有<option>与之匹配,变为

<img xss语句>

在这里插入图片描述
攻击成功:

在这里插入图片描述

script与option标签

<script> 标签用于在 HTML 页面中嵌入 JavaScript 脚本代码,通过在浏览器中执行这些脚本来实现一些与用户交互、数据处理、动态效果等相关的功能。常见的应用包括表单验证、事件处理、页面跳转等。

<option> 标签用于制作下拉框(<select>)中选项的列表。每个<option>元素定义了一个可选项目的值和显示文本,通过设置其 value 属性和 innerHTML 属性来定义项目的值和文本。


XSS(DOM)-high level

源代码

<?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;
    }
}
?> 

1、使用 array_key_exists() 函数来判断 $_GET 超级全局变量中是否存在名为 default 的键,如果存在并且不为 null,则继续进行后续校验;否则直接跳过。

2、在 switch 语句中实现一个白名单机制,将可接受的语言作为取值,所有其他语言都会默认被转换为英语。这里的语言包括:英语、法语、德语和西班牙语。

3、如果用户输入的语言不在白名单列表中,则会通过 header() 函数将页面重定向到 ?default=English,这样就避免了潜在的安全漏洞。

姿势

原理: 该JavaScript 函数为客户端HTML页面中对表单元素进行限制和过滤,不涉及与服务端的通信和交互。因此,即使该 JavaScript 代码被恶意用户修改,也不会影响到服务器端对表单参数的处理结果。
由于#后的代码在客户端被注释,因此注入语句不会被传入服务器端,从而达到注入效果。

Payload:#<script>alert("qiu")</script>

在这里插入图片描述


XSS(DOM)-Impossible level

源代码

if (document.location.href.indexOf("default=") >= 0) {
    var lang = document.location.href.substring(document.location.href.indexOf("default=") + 8);
    document.write("<option value='" + lang + "'>" + (lang) + "</option>");
    document.write("<option value='' disabled='disabled'>----</option>");
}

document.write("<option value='English'>English</option>");
document.write("<option value='French'>French</option>");
document.write("<option value='Spanish'>Spanish</option>");
document.write("<option value='German'>German</option>");

代码审计

1、使用 indexOf() 函数来判断当前页面的 URL 是否包含字符串 "default=",如果包含则返回相应的位置,否则返回 -1

2、如果 URL 中包含 default 参数,则使用 substring() 函数来获取该参数的值,具体方式是从 URL 中 "default=" 字符串后面开始截取,长度为 8(即 "default=" 的长度),得到 lang 变量。

3、使用 document.write() 函数来输出 HTML 代码,首先输出 lang 变量对应的选项(如果存在),然后输出 ---- 分隔符选项,最后分别输出英语、法语、西班牙语和德语等可选项。其中,每个选项都被定义为一个 option 标签,并且包括一个 value 属性和显示文本。如果 lang 变量为空,则表示没有 default 参数,此时不需要输出任何额外的选项。

您可能感兴趣的与本文相关的镜像

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

<think>嗯,用户需要了解在Kali和Win10系统下使用DVWA靶场进行XSS DOM攻击的方法和教程。用户已经提供了三个相关引用,说明用户对DVWA靶场、XSS DOM攻击的基本概念有一定了解,现在需要具体的操作指导。 用户可能正在学习Web安全渗透测试,可能是安全初学者或CTF选手。ta明确要求跨平台操作指导(Kali和Win10),说明实际环境中可能同时使用这两类系统。深层需求应该是想掌握不同环境下的标准化攻击流程,而不仅仅是理论。 从引用来看,关键信息点包括:DVWA靶场部署方法(引用2)、DOMXSS攻击特征(引用1和3),特别是引用3提到用#号绕过服务器直接操作DOM的技巧很有实操价值。 需要重点解决三个层面: 1. 环境搭建:区分Kali(Linux)和Win10的部署差异,尤其是Win10可能遇到的权限问题 2. 攻击原理:解释为什么DOMXSS可以不经过服务器,这与反射型/存储型的本质区别 3. 实操演示:必须包含输入示例和预期结果,像引用3的payload需要优化(原示例有HTML实体编码问题) 特别注意要强调法律边界,引用1已声明"严禁非法攻击",在教程中需强化警告。技术细节上,DOMXSS的#号技巧在DVWA的low级别有效,但medium/high级别需要其他绕过方法,用户没提难度级别,所以从基础开始。 最后考虑加入攻击日志分,因为用户引用中没提如何验证成功,实际需要查看浏览器开发者工具。 </think>以下是在Kali和Windows 10系统下使用DVWA靶场进行DOMXSS攻击的完整操作指南,包含环境搭建和攻击实战步骤: --- ### 一、环境搭建 #### ▶ Kali系统部署 ```bash # 1. 下载DVWA git clone https://github.com/digininja/DVWA.git cd DVWA # 2. 配置数据库 sudo mysql -u root > create database dvwa; > grant all on dvwa.* to 'dvwa'@'localhost' identified by 'p@ssw0rd'; > flush privileges; # 3. 修改配置文件 cp config/config.inc.php.dist config/config.inc.php nano config/config.inc.php # 修改数据库密码为 p@ssw0rd # 4. 启动服务 sudo systemctl start apache2 mysql ``` 访问 `http://localhost/DVWA/setup.php` 点击"Create/Reset Database" [^2] #### ▶ Windows 10系统部署 1. 安装XAMPP(含Apache+MySQL) 2. 下载DVWA压缩包解压到 `htdocs` 目录 3. 修改 `config/config.inc.php` 中的数据库密码: ```php $_DVWA[ 'db_password' ] = 'p@ssw0rd'; ``` 4. 访问 `http://localhost/DVWA/setup.php` 初始化数据库[^1] --- ### 二、DOMXSS攻击实战 #### ▶ 攻击路径 访问:`DVWAXSS (DOM) → Low Security Level` #### ▶ 攻击步骤 1. **观察URL参数** URL格式:`http://靶场地址/vulnerabilities/xss_d/?default=English` ```mermaid graph LR URL参数 --> default=值 --> 页面DOM直接输出 ``` 2. **构造恶意Payload** 在URL末尾追加(注意空格): ``` #<script>alert('XSS_by_zky50')</script> ``` 完整URL示例: ``` http://localhost/DVWA/vulnerabilities/xss_d/?default=English#<script>alert('XSS_by_zky50')</script> ``` 3. **攻击原理分** - `#` 后的内容不会发送到服务器(DOM型特征)[^3] - 页面JavaScript直接读取 `location.hash` 并输出 - 前端源码漏洞点: ```javascript document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>"); ``` - 若输入为 `#<script>...</script>` 会被解为HTML标签 4. **中/高安全等级绕过技巧** ```python # Medium级别绕过示例 #<img src=x onerror=alert(1)> # High级别绕过(需闭合标签) #</option></select><svg onload=alert(document.domain)> ``` --- ### 三、防御建议 1. 前端过滤:对 `location.hash` 使用 `encodeURIComponent()` 2. 服务端校验:即使DOMXSS不依赖服务端,也应验证参数格式 3. 内容安全策略:设置CSP头 ```http Content-Security-Policy: script-src 'self' ``` > **法律声明**:本文仅供学习防御技术使用,未经授权对他人的系统实施攻击属于违法行为,使用者需自行承担法律责任[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值