DVWA-DOM型XSS全等级绕过方法

news2025/7/14 13:59:11
DOM型XSS全等级绕过
  • 前言
  • 一、LOW级别
  • 二、Medium级别
      • 图片插入语句法
  • 三、High级别
      • 字符 # 绕过服务端过滤
  • 四、Impossible级别

前言

    DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。

一、LOW级别

打开dvwa,并将等级设置为low
在这里插入图片描述
我们查看源代码

<?php
# No protections, anything goes
?>

 
 

        从源代码可以看出,这里low级别的代码没有任何的保护性措施!
    观察主页面,可以看到页面的功能是让我们选择默认的语言,但是这里又没有对default参数没有进行任何的过滤。
    在这里插入图片描述
        因此,我们在这里构造XSS代码,在default参数后面写入脚本,构造访问连接:

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

      点击之后,我们的 script脚本成功被执行了!
      在这里插入图片描述
      查看网页的源代码即可看出,因为我们的脚本插入到代码中,所以执行了
      在这里插入图片描述
          同样的,我们可以修改语句,使其弹窗可以获取cookie
      在这里插入图片描述

      二、Medium级别

      先查看源代码

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

            从Medium源代码中可以看到它对default参数的值进行了检查,用了stripos()函数对default参数的值进行了检测是否有<scipt字符,如果有的话,就将default=English。

        注意:stripos() 函数是不区分大小写的。具体函数用法请参考:
        PHP stripos() 函数.

        图片插入语句法

            既然这里过滤了<script,那么我们可以用图片插入语句法:

        <img src =1 onerror = alert('dom')>
        
         
         

              当我们访问URL:

          http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=<img src =1 onerror = alert('dom')>
          
           
           

                此时没有出现任何的变化,界面没有反应。这个时候查看网页的源代码:
            在这里插入图片描述
                可以看到我们输入的脚本语句被插入进了value值中,没有插入到option标签的值中,所以我们语句当中的<img>标签就没有起到作用,因此不会弹窗。
            我们改进我们的语句,尝试将前面的标签闭合

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

                  页面成功出现弹窗:
              在这里插入图片描述
                  查看一下网页的源代码:
              在这里插入图片描述
                  我们还可以直接在English值的后面直接进行拼接:

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

                    页面也能直接出现弹窗:

                在这里插入图片描述
                    查看网页源代码:
                在这里插入图片描述

                三、High级别

                先查看源代码

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

                      分析High级别源代码,这里先if判断default的值是否为空,如果不为空就用switch语句进行匹配,很明显这相当于设置了白名单,只允许传 default值为EnglishFrenchGermanSpanish 其中一个。

                  字符 # 绕过服务端过滤

                      url中有一个字符为#,该字符后的数据不会发送到服务器端,#后面的内容是对浏览器的操作,不会发送到http请求当中去,从而绕过服务端过滤。
                      因此可以这样构造连接:

                  http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=English#<script>alert('high!!!')</script>
                  
                   
                   

                        点击提交刷新页面后,出现弹窗:
                    在这里插入图片描述

                    四、Impossible级别

                    查看源代码

                    <?php
                    # Don't need to do anything, protction handled on the client side
                    ?> 
                    
                     
                     

                          意思是不需要做任何事,保护在客户端处理

                          尝试修改English为:
                      <script>alert(‘hello’)</script>
                      在这里插入图片描述
                          从上图可以看出框内的值是我们输入的参数的经过URL编码后的数据。
                      查看网页源代码:
                      在这里插入图片描述
                          并没有对我们输入的内容进行URL解码,所以我们输入的任何内容都是经过URL编码,然后直接赋值。因此不存在XSS漏洞。

                          我们可以对比LOW级别的网页源代码:
                      在这里插入图片描述

                          本站所有文章均为原创,欢迎转载,请注明文章出处: https://blog.csdn.net/weixin_43847838/article/details/111940420.。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

                      本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2301522.html

                      如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

                      相关文章

                      《[含文档+PPT+源码等]精品基于Python实现的Django中药材在线学习系统的设计与实现

                      基于Python实现的Django中药材在线学习系统的设计与实现背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、行业背景 随着中医药在全球范围内的不断推广和普及&#xff0c;中药材的知识普及和在线学习需求日益增长。传统的中药材学习方式往往受限于地域、时间和资…

                      数组和指针常见笔试题(深度剖析)

                      strlen和sizeof的区别 strlen是统计\0之前的字符个数&#xff0c;传递的是地址 sizeof是计算类型的字节数&#xff0c;其实在编译期间会通过类型来确定大小 下边我来讲一下常见的面试题&#xff0c;过程很详细放心观看 #include<stdio.h>#include <string.h>int …

                      网络通信-最大传输单元-MTU,网络安全零基础入门到精通实战教程!

                      文章目录 MTU 引用MTU 介绍 定义MTU 与 VLAN TagVLAN Tag 处理方式 IP分片可靠传输MTU 之 PMTUD PMTUD介绍IP头的DF分片位 DF 0 可以分片DF 1 不可以分片 注意事项 MTU 引用 以太网最初对报文长度没有限制&#xff0c;网络层最大可以接收65535个字节&#xff0c;但是以太…

                      在nodejs中使用ElasticSearch(一)安装,使用

                      使用docker安装ElasticSearch和Kibana 1&#xff09;创建相应的data文件夹和子文件夹用来持久化ElasticSearch和kibana数据 2&#xff09;提前创建好elasticsearch配置文件 data/elasticsearch/config/elasticsearch.yml文件 # Elasticsearch Configuration # # NOTE: Elas…

                      封装一个vue3控制并行任务数量的组合式函数

                      一. 使用场景 使用环境&#xff1a; vue3 当需要处理多个异步任务时&#xff0c;想要控制并行异步任务的数量&#xff0c;不想所有任务同时执行导致产生性能上的问题&#xff0c; 比如当需要同时发起多个网络请求&#xff0c;但又不想一次性发出过多请求导致服务器压力过大或…

                      SpringSecurity请求流转的本质

                      1. SpringSecurity核心源码分析 分析SpringSecurity的核心原理,那么我们从哪开始分析?以及我们要分析哪些内容? 系统启动的时候SpringSecurity做了哪些事情?第一次请求执行的流程是什么?SpringSecurity中的认证流程是怎么样的?1.1 系统启动 当我们的Web服务启动的时候,…

                      【AI工具之Deepseek+Kimi一键免费生成PPT】

                      1.打开Deepseek网页&#xff1a;DeepSeek 2.使用Deepseek获得一份PPT大纲&#xff08;输入背景需求约束条件进行提问&#xff09;如下图&#xff1a; 3.复制Deepseek输出的PPT大纲 4.打开Kimi网页&#xff1a;Kimi.ai - 会推理解析&#xff0c;能深度思考的AI助手 5.在Kimi中…

                      基于微信小程序的宿舍报修管理系统设计与实现,SpringBoot(15500字)+Vue+毕业论文+指导搭建视频

                      运行环境 jdkmysqlIntelliJ IDEAmaven3微信开发者工具 项目技术SpringBoothtmlcssjsjqueryvue2uni-app 宿舍报修小程序是一个集中管理宿舍维修请求的在线平台&#xff0c;为学生、维修人员和管理员提供了一个便捷、高效的交互界面。以下是关于这些功能的简单介绍&#xff1a; …

                      DeepSeek 助力 Vue 开发:打造丝滑的右键菜单(RightClickMenu)

                      前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

                      WLAN无线2.4G/5G频段划分和可用信道

                      互联网各领域资料分享专区(不定期更新)&#xff1a; Sheet

                      自己安装一台DeepSeek的服务器

                      找一台还可以的Linux服务器&#xff0c;登录后执行&#xff1a; curl -fsSL https://ollama.com/install.sh | sh 等待安装完成&#xff1a; 执行命令&#xff0c;根据服务器能力安装不同版本的AI模型&#xff1a; ollama run llama3.2 下一步就开始对话吧&#xff1a; llam…

                      StableDiffusion学习笔记——4、模型下载和学习

                      目录   大家好&#xff0c;我是阿赵。   继续学习StableDiffusion的使用。   这次来学习一下模型的相关知识 一、 什么是模型 之前我们了解过&#xff0c;在StableDiffusion里面生成图片或者视频&#xff0c;都需要先选择模型。模型用通俗的话来说&#xff0c;就是决定了…

                      微软宣布 Windows 11 将不再免费升级:升级需趁早

                      大家都知道如果你现在是Windows 10 系统&#xff0c;其实可以免费升级到正版 Windows 11&#xff0c;只要你的电脑配置满足 TPM2.0要求。 而最近微软已经公布了 Windows 10 的最后支持时间&#xff0c;也就是今年10月14日&#xff0c;在这之后微软将不再对Windows 10负责&#…

                      Java开发实习面试笔试题(含答案)

                      在广州一家中大公司面试&#xff08;BOSS标注是1000-9999人&#xff0c;薪资2-3k&#xff09;&#xff0c;招聘上写着Java开发&#xff0c;基本没有标注前端要求&#xff0c;但是到场知道是前后端分离人不分离。开始先让你做笔试&#xff08;12道问答4道SQL题&#xff09;&…

                      解析DrugBank数据库数据|Python

                      一、DrugBank 数据库简介 DrugBank 是一个综合性的生物信息学和化学信息学数据库&#xff0c;专门收录药物和靶点的详细信息。它由加拿大阿尔伯塔大学的 Wishart 研究组 维护&#xff0c;提供化学、药理学、相互作用、代谢、靶点等多方面的药物数据。DrugBank 结合了实验数据和…

                      专题 - Java Stream API

                      概述 分类 数据源 任何位置。 如:集合、数组、文件、随机数、 Stream 静态工厂等。 支持的数据类型 整型、长整型、双精度浮点型基本数据类型。引用数据类型。流管道的数据处理流程 流管道必须要有终止操作。否则永不执行,只是一个静默的无操作指令。流管道是懒运算的。当执…

                      【前端框架】vue2和vue3的区别详细介绍

                      Vue 3 作为 Vue 2 的迭代版本&#xff0c;在性能、语法、架构设计等多个维度均有显著的变革与优化。以下详细剖析二者的区别&#xff1a; 响应式系统 Vue 2 实现原理&#xff1a;基于 Object.defineProperty() 方法实现响应式。当一个 Vue 实例创建时&#xff0c;Vue 会遍历…

                      大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3)

                      大模型WebUI&#xff1a;Gradio全解11——使用transformers.agents构建Gradio UI&#xff08;3&#xff09; 前言本篇摘要11. 使用transformers.agents构建Gradio UI11.3 创建和使用工具Tools11.3.1 默认工具箱与load_tool11.3.2 创建新工具11.3.3 管理代理的工具箱toolbox11.3…

                      路由基础 | 路由引入实验 | 不同路由引入方式存在的问题

                      注&#xff1a;本文为 “路由基础 | 路由表 | 路由引入” 相关文章合辑。 未整理去重。 路由基本概念 1—— 路由表信息、路由进表以及转发流程、最长掩码匹配原则 静下心来敲木鱼已于 2023-11-26 14:06:22 修改 什么是路由 路由就是指导报文转发的路径信息&#xff0c;可以…

                      网络原理-HTTP/HTTPS

                      文章目录 HTTPHTTP 是什么&#xff1f;理解“应用层协议”理解 HTTP 协议的⼯作过程HTTP 协议格式抓包⼯具的使用抓包⼯具的原理抓包结果协议格式总结 HTTP 请求&#xff08;Request&#xff09;认识 URLURL 的基本格式关于URL encode 认识“⽅法”&#xff08;method&#xff…