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

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

目录

一、XSS

二、DOM型XSS

三、代码分析

1、index.php

2、low.php

四、渗透实战

1、渗透准备

2、XSS注入

3、分析闭合


DVWA(Damn Vulnerable Web Application)中的 XSS DOM关卡是用于练习和演示 DOM XSS的不同场景,不同安全等级存在不同的脆弱点和绕过方法,本小节对低等级别的关卡进行渗透实战。

一、XSS

XSS(Cross-Site Scripting) 指的是攻击者通过在网页中注入恶意脚本,当用户访问该页面时,脚本会在用户浏览器中执行,从而窃取用户数据、会话信息或进行其他恶意操作。核心原理就是未对用户输入或输出进行适当过滤,导致恶意代码被浏览器解析执行。

XSS类型

位置

数据流向

反射型 XSS

服务器端

用户输入服务器响应中包含恶意代码

存储型 XSS

服务器端

用户输入存储(数据库)所有用户访问时触发

DOM XSS

客户端 JavaScript 代码

用户输入浏览器 DOM 操作执行恶意代码

二、DOM型XSS

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

三、代码分析

1、index.php

进入DVWA靶场源目录,找到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;
}// 引入指定级别的文件
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、low.php

打开源码low.php,分析可知这段代码没有做完全未防护,可直接注入脚本,如下所示。

很明显代码存在DOM型XSS诸如的可能性,具体原因如下所示。

  • 未验证或过滤输入:直接从URL获取default参数值,未进行任何过滤或编码。

  • 直接拼接HTML:使用document.write()直接将用户输入拼接到HTML中。

  • DOM操作不安全:动态生成的DOM元素未进行适当的转义处理。

3、渗透思路

本关卡的XSS注入点关键代码如下所示,主要功能时检查当前 URL 是否包含 "default=" 参数,若存在则从中提取该参数值作为语言代码,通过document.write()动态生成一个 HTML 的 option 元素,将提取的值作为 option 的 value 和显示文本,用于页面语言选择功能。但存在 DOM 型 XSS 风险。

// 检查当前URL是否包含"default="参数(用于语言设置或页面配置)
if (document.location.href.indexOf("default=") >= 0) {// 从URL中提取"default="后面的字符串作为语言值// 例如:http://example.com?default=en 会提取出"en"var lang = document.location.href.substring(document.location.href.indexOf("default=") + 8  // +8是为了跳过"default="这8个字符);// 直接向页面写入HTML内容,创建一个选中状态的option元素// 这里的$decodeURI可能是自定义函数,用于解码URI编码的字符串document.write("<option value='" + lang + "'>" + $decodeURI(lang) + "</option>");// ... 后续代码可能会继续生成其他option选项
}

假设此时传入注入内容如下所示。

default='><script>alert('MOOYUAN')</script>

我们将参数传入后,构成如下闭合。 

<option value=''><script>alert('MOOYUAN')</script>'>...</option> 

假设此时传入注入内容如下所示。

default=<script>alert('MOOYUAN')</script>

当传入参数 default=<script>alert('MOOYUAN')</script> 时,,构成如下闭合,HTML 页面会立即弹出一个包含文本 MOOYUAN 的警告框(alert 对话框)。这是典型的 DOM 型 XSS 攻击 成功执行的表现。。 

<option value='<script>alert('MOOYUAN')</script>'>...</option> 

四、渗透实战

1、渗透准备

进入DVWA靶场XSS DOM关卡low级别,选择English,此时完整URL地址如下所示。

http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=English

2、XSS注入

尝试注入XSS语句<script>alert('mooyuan')</script>看效果如何,URL如下所示。

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

 如下所示渗透成功,成功弹出mooyuan弹框。

3、分析闭合

右键元素,在查看器中搜索mooyuan关键字,如下所示。

http://www.dtcms.com/a/275392.html

相关文章:

  • 力扣-19. 删除链表的倒数第N个节点
  • 前端内容-ES6
  • Vue.js:从 Web 到桌面的跨端实践与技术选型指南
  • 虚拟现实的镜廊:当技术成为存在之茧
  • AI之DL之VisualizationTool:ai-by-hand-excel的简介、安装和使用方法、案例应用之详细攻略
  • 生成式对抗网络(GAN)模型原理概述
  • 用 Python 将分组文本转为 Excel:以四级词汇为例的实战解析
  • Socket到底是什么(简单来说)
  • HTTP和HTTPS部分知识点
  • w460实习生管理系统
  • Linux中Gitee的使用
  • 【小沐杂货铺】基于Three.JS绘制汽车展示Car(WebGL、vue、react、autoshow、提供全部源代码)
  • vue3 el-table动态表头
  • vite如何生成gzip,并在服务器上如何设置开启
  • tp8.0\jwt接口安全验证
  • Ubuntu快速搭建QT开发环境指南,5000字解析!!
  • 自动化证书续签工具针对VPS服务器HTTPS服务的维护实践
  • windows电脑远程win系统服务器上的wsl2
  • 企业选择大带宽服务器租用的原因有哪些?
  • 北京企业纷纷“借兵”:揭秘软件人力外包走俏的四大真相
  • 9. JVM垃圾回收
  • 持有对象-基本概念
  • 多 Agent 强化学习实践指南(一):CTDE PPO 在合作捕食者-猎物游戏中的应用详解
  • 检查输入有效性(指针是否为NULL)和检查字符串长度是否为0
  • 图像扭曲增强处理流程
  • 基于 AI 的大前端网络请求优化:动态调整与缓存策略
  • Nginx模块注册全流程揭秘:为什么Nginx模块化架构依然是Web服务器的“金标准”?
  • stack和queue的使用和模拟实现以及了解deque
  • 以数据为核心,以业务为导向,漫谈数据可视化应用
  • 网络编程员工管理系统