当前位置: 首页 > news >正文

DVWA靶场通关笔记-DOM型XSS(Impossible级别)

目录

一、DOM型XSS

二、代码分析

1、index.php

2、Impossble.php

三、DOM型XSS安全级别分析

四、Impossble防范分析

1、禁用 URI 解码,依赖默认编码输入

2、无需服务器端额外过滤

3、尝试注入脚本1

4、尝试注入脚本2


本系列为通过《DVWA靶场通关笔记》的DOM 型 XSS关卡(low,medium,high,impossible共4关)渗透集合,通过对相应关卡源码的代码审计找到讲解渗透原理并进行渗透实践。本文为DOM 型 XSS impossible关卡的原理分析部分,讲解相对于low、medium和high级别,为何对其进行渗透测试是Impossible的。

一、DOM型XSS

DOM 型 XSS(Document Object Model Cross-Site Scripting) 是一种特殊的 XSS 攻击,其注入点存在于客户端 JavaScript 代码中,而非服务器端。攻击者通过操控网页的 DOM 环境(如 URL 参数、表单输入等),诱导浏览器执行恶意脚本,无需服务器参与。

方面普通XSSDOM XSS
检测工具传统扫描工具可分析HTTP响应内容需动态分析JS代码和DOM操作
防御位置服务器端过滤(如转义<>客户端转义 + 避免危险的DOM操作
WAF防护可通过拦截恶意HTTP请求防御通常无效(攻击数据可能不发送到服务器)

二、代码分析

1、index.php

进入DVWA靶场DOM 型 XSS源目录,找到index.php源码。

这段代码是DVWA(Damn Vulnerable Web Application)中DOM型XSS的演示页面,主要功能是:

  • 根据用户选择的语言生成一个下拉菜单。
  • 当用户提交选择后,URL中会包含default=参数。
  • 页面JavaScript会读取URL参数并动态生成选项。

 详细注释后的代码如下所示。

<?php
// 设置根目录路径
define( 'DVWA_WEB_PAGE_TO_ROOT', '../../' );
// 引入DVWA页面初始化文件
require_once DVWA_WEB_PAGE_TO_ROOT . 'dvwa/includes/dvwaPage.inc.php';// 启动页面,要求认证和PHPIDS保护
dvwaPageStartup( array( 'authenticated', 'phpids' ) );// 创建新页面
$page = dvwaPageNewGrab();
// 设置页面标题
$page[ 'title' ]   = 'Vulnerability: DOM Based Cross Site Scripting (XSS)' . $page[ 'title_separator' ].$page[ 'title' ];
$page[ 'page_id' ] = 'xss_d';
$page[ 'help_button' ]   = 'xss_d';
$page[ 'source_button' ] = 'xss_d';// 连接数据库
dvwaDatabaseConnect();// 根据安全等级选择对应的级别文件
$vulnerabilityFile = '';
switch( $_COOKIE[ 'security' ] ) {case 'low':$vulnerabilityFile = 'low.php';break;case 'medium':$vulnerabilityFile = 'medium.php';break;case 'high':$vulnerabilityFile = 'high.php';break;default:$vulnerabilityFile = 'impossible.php';break;
}// c
require_once DVWA_WEB_PAGE_TO_ROOT . "vulnerabilities/xss_d/source/{$vulnerabilityFile}";// 对于impossible级别,不进行URI解码
$decodeURI = "decodeURI";
if ($vulnerabilityFile == 'impossible.php') {$decodeURI = "";
}// 构建页面主体
$page[ 'body' ] = <<<EOF
<div class="body_padded"><h1>Vulnerability: DOM Based Cross Site Scripting (XSS)</h1><div class="vulnerable_code_area"><p>Please choose a language:</p><form name="XSS" method="GET"><select name="default"><script>// 检查URL中是否包含default参数if (document.location.href.indexOf("default=") >= 0) {// 提取default参数值var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);// 动态写入选项document.write("<option value='" + lang + "'>" + $decodeURI(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>");</script></select><input type="submit" value="Select" /></form></div>
EOF;// 添加更多信息链接
$page[ 'body' ] .= "<h2>More Information</h2><ul><li>" . dvwaExternalLinkUrlGet( 'https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)' ) . "</li><li>" . dvwaExternalLinkUrlGet( 'https://www.owasp.org/index.php/Testing_for_DOM-based_Cross_site_scripting_(OTG-CLIENT-001)' ) . "</li><li>" . dvwaExternalLinkUrlGet( 'https://www.acunetix.com/blog/articles/dom-xss-explained/' ) . "</li></ul>
</div>\n";// 输出页面
dvwaHtmlEcho( $page );?>

2、Impossble.php

进入DVWA靶场源目录,找到Impossible.php源码,打开源码Impossible.php,如下所示

Impossible的含义是服务器端不需要做任何防御措施,防御的关键在于客户端。我们查看index.php对impossible.php的特别处理,即不对其传入内容进行URI解码,这样注入语句就会失败。

三、DOM型XSS安全级别分析

四个安全级别(Low、Medium、High、Impossible)在 DOM 型 XSS 防护上的区别主要体现在对用户输入的处理方式和防护严格程度上,具体如下表所示。

  • Low 级别

    • 无任何防护措施,对用户输入的default参数完全信任,直接将其嵌入到页面的 JavaScript 代码中并执行。
    • 例如,攻击者可以直接构造包含恶意脚本的 URL,如/vulnerabilities/xss_d/?default=English<script>alert(1)</script>,脚本会被直接执行。
  • Medium 级别

    • 尝试通过简单的模式匹配进行防护,会检测default参数中是否包含<script(不区分大小写),如果包含则重定向到?default=English
    • 攻击者可以不使用<script>标签,通过其他方式执行脚本,比如利用img标签的onerror事件,如/vulnerabilities/xss_d/?default=English>/option></select><img src='x' onerror='alert(1)'>
  • High 级别

    • 采用白名单机制,只允许default参数的值为FrenchEnglishGermanSpanish这几个预设的语言选项,若为其他值则重定向到?default=English
    • 不过,由于 URL 中#后面的片段(fragment)不会发送到服务器,因此攻击者可以将恶意脚本放在#之后,如/vulnerabilities/xss_d/?default=English#<script>alert(1)</script>,从而绕过服务器端的白名单检查。
  • Impossible 级别

    • 防护在客户端进行,浏览器会对从 URL 中获取的内容进行默认编码,使得注入的恶意 JavaScript 无法被执行,从而彻底防止了 DOM 型 XSS 攻击。

四、Impossble防范分析

在 DVWA 的 DOM 型 XSS(Cross Site Scripting)场景中,Impossible级别的防范方法主要通过客户端编码处理浏览器默认安全机制实现。Impossible级别的核心防范思路是利用浏览器对动态插入 DOM 的内容进行默认编码,避免将用户输入直接作为原始 HTML/JavaScript 执行,从而彻底阻断 DOM 型 XSS 攻击的可能性。具体如下所示。

1、禁用 URI 解码,依赖默认编码输入

在impossible.php对应的逻辑中,通过设置$decodeURI = "",移除了对 URL 中default参数的decodeURI解码操作。此时,浏览器会对从 URL 中获取的内容进行默认编码(如将特殊字符转换为 HTML 实体),使得注入的恶意脚本(如<script>标签)无法被解析为可执行代码。

关键代码逻辑(来自xss_d/index.php):

$decodeURI = "decodeURI";
if ($vulnerabilityFile == 'impossible.php') {$decodeURI = ""; // 禁用解码,依赖浏览器默认编码
}

对应的前端脚本部分:

// 当为impossible级别时,$decodeURI为空,等价于直接输出lang(被浏览器自动编码)
document.write("<option value='" + lang + "'>" + $decodeURI(lang) + "</option>");

2、无需服务器端额外过滤

服务器端(impossible.php)未添加任何主动过滤逻辑(代码为空),完全依赖客户端浏览器对动态插入的内容进行编码,从根源上阻止恶意脚本的执行。

3、尝试注入脚本1

注入Payload:<script>alert('mooyuan')</script>

http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=<script>alert('mooyuan')</script>

如下所示注入失败,页面显示为注入语句的URL编码后效果。

4、尝试注入脚本2

注入Payload:</select><img src=0 οnerrοr=alert('mooyuan')>

http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=</select><img src=0 onerror=alert('mooyuan')>

如下所示注入失败,页面显示为注入语句的URL编码后效果。


文章转载自:

http://1Tqzzn5M.qLjxm.cn
http://gcgFCtTS.qLjxm.cn
http://PTdJqt5v.qLjxm.cn
http://KjZlYXid.qLjxm.cn
http://i75Wq064.qLjxm.cn
http://HER5KJpY.qLjxm.cn
http://Ozah5DdO.qLjxm.cn
http://dxU6Kcf7.qLjxm.cn
http://Ri5pnTCP.qLjxm.cn
http://tDZ3LPww.qLjxm.cn
http://8VghUMLk.qLjxm.cn
http://G92H3clM.qLjxm.cn
http://n6HBPGCU.qLjxm.cn
http://cpIIXzHf.qLjxm.cn
http://q4xBd4P9.qLjxm.cn
http://HaTZYePx.qLjxm.cn
http://sr8DTn6i.qLjxm.cn
http://Fpa4GEhL.qLjxm.cn
http://iW8H6LDe.qLjxm.cn
http://6dzYEFjn.qLjxm.cn
http://NtSbdi14.qLjxm.cn
http://B05JdhYc.qLjxm.cn
http://03CjGh3X.qLjxm.cn
http://4GRjJvmp.qLjxm.cn
http://0AfLOSKd.qLjxm.cn
http://wGPqdfPF.qLjxm.cn
http://y6SosWnl.qLjxm.cn
http://BEWdcaXV.qLjxm.cn
http://tmuy7J1Z.qLjxm.cn
http://bJPzXUbX.qLjxm.cn
http://www.dtcms.com/a/362552.html

相关文章:

  • CentOS7.6
  • 基于Force-closure评估的抓取计算流程
  • gitlab中回退代码,CI / CD 联系运维同事处理
  • RAGFlow——知识库检索系统开发实战指南(包含聊天和Agent模式)
  • 微信小程序备忘
  • ResponseBodyEmitter介绍
  • HarmonyOS 鸿蒙系统自带的 SymbolGlyph 图标组件详解
  • 【学Python自动化】 8.1 Python 与 Rust 错误处理对比学习笔记
  • 拔河(蓝桥杯)(前缀和)
  • Docker CI/CD 自动化部署配置指南
  • 【Datawhale之Happy-LLM】3种常见的decoder-only模型——Github最火大模型原理与实践教程task07
  • C#---共享项目
  • 【C++变量和数据类型:从基础到高级】
  • AI 在教育领域的落地困境:个性化教学与数据隐私的平衡之道
  • 线程特定存储
  • 【Go语言入门教程】 Go语言的起源与技术特点:从诞生到现代编程利器(一)
  • 深入浅出 RabbitMQ-TTL+死信队列+延迟队列
  • idea上传本地项目代码到Gitee仓库教程
  • 【论文阅读】Deepseek-VL:走向现实世界的视觉语言理解
  • 【Web前端】JS+DOM来实现乌龟追兔子小游戏
  • GPT-5在医疗领域应用的研究效能初探(下)
  • 跨平台游戏引擎 Axmol-2.8.0 发布
  • https_server.cpython-310.pyc 等pyc后缀这些是什么文件
  • Python+DRVT 从外部调用 Revit:批量创建墙
  • DVWA靶场通关笔记-反射型XSS(Impossible级别)
  • 4.MySQL数据类型
  • 【51单片机6位数码管显示矩阵键值至右向左自左向右】2022-11-29
  • 企业DevOps的安全与合规关键:三大主流DevOps平台能力对比
  • 图像加密安全传输--设备端视频流加密,手机端视频流解密,使用ChaCha20-Poly1305 进行系统分析
  • TLS终止位置的安全影响深度解析:三种模式技术对比与选择建议