热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

34Dom形XSS详解以及演示

学习DOM型XSS前,先搞清楚什么是DOM通过JavaScript,可以重构整个HTML文档。您可以添加、移除、改变或重排页面上的项目。要改变页面的某
学习DOM型XSS前,先搞清楚什么是DOM

在这里插入图片描述

通过 Javascript,可以重构整个 HTML 文档。您可以添加、移除、改变或重排页面上的项目。

要改变页面的某个东西,Javascript 就需要获得对HTML 文档中所有元素进行访问的入口。这个入口,连同对 HTML 元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。

所以,你可以把DOM理解为一个可以访问HTML的标准编程接口。

举个栗子来理解一下DOM

这是标题

点击标题,会提示出它的值。

#From w3school#

这个例子是从w3school拖下来的,我们直接去w3school看一下,因为上面有具体演示的页面,http://caibaojian.com/w3c/example/hdom_examples.html

在这里插入图片描述

这里有一个document对象,点击getelementbyid()

在这里插入图片描述

首先我们先把js代码给删掉

在这里插入图片描述

那这段就是纯HTML代码,显示出来就是上边这样子

我们再把js代码给添进去


function这个地方其实是js的函数,它定义了一个变量x,通过document.getElementById去获取HTML里面,id等于myHeader标签的这个值,那实际上x的值就是这是标题,这是个字符,document.getElementById这个方法,其实就是document提供的方法,当它获取到值后,把这个值给alert出来

这是标题


点击标题,会提示出它的值。


在这个标题里面,有onclik,当我们点击这个标题的时候,会去调用getValue()这个方式,然后把这个值复制给x,弹出来

在这里插入图片描述

看到了吧,弹出来了,DOM有一个比较大的特征,这一整个弹窗的过程,其实都是在前端完成的,这一整个过程是没有跟我们的后台交互的,数据并没有通过get、post的方式提交到后台,所以说,DOM是一个前端的操作接口

我们打开pikachu,也就是我们今天要演示的靶场

在这里插入图片描述

输入框那边,我们可以输入一个字符,来看一下,我们点提交

在这里插入图片描述

点提交之后,弹出来一个what do you see?,看起来好像是一个A标签,我们看一下源码,它到底是做了什么操作,搜索一下what

在这里插入图片描述

我们看到这个地方有一段js的代码,我们来读一下它是什么意思

首先,它用document.getElementById的一个方法,来获取id等于text这个标签的值

function domxss(){var str = document.getElementById("text").value;document.getElementById("dom").innerHTML = "what do you see?";}

实际上这个text就是input,也就是我们输入的内容,它把我们输入的内容赋值给了str,通过字符串拼接的方式,写到了A标签的href属性里面,整个的意思是说,当我们在text标签里面输入字符串之后,它就会把字符串,通过dom方法,把它拼接到a标签里面,这个a标签会被写到id等于dom。这么一个div标签里面来

我们首先确认它的输入点,输入点就是在input里面,通过document.getElementById把数据给获取到了之后,在div里面,把它输出了,直接通过innerHTML把它写到了div里面

我们可以看到,它的输入和输出是没有做任何转义的操作的,我们把这段给复制出来,构造一个闭合,来看一下

what do you see?

中间这个str其实就是我们输入的内容,就是一个变量,我们要做的其实就是通过构造一个闭合,来执行我们预期的代码,我们把中间这部分变量,我们可以控制的这部分给删掉,我们首先在这个地方,去把前面的a标签给闭合掉,我们在这里随便输个字符串,或者一个#号,单引号,把前面的href给闭合掉,然后我们在这里用onclick,弹一个窗,然后我们alert,111,然后我们要把前面的a标签给闭合掉,在这里输一个右尖括号,然后


这一整段就是我们前面的a标签,因为它后面本身自带了一个a标签,所以这a标签就是一个正确的a标签

'>what do you see?

后面这一段,我们不用管他,我们把我们刚刚输入的那个部分,把它复制出来

#' onclick="alert(111)">

这其实就是我们构造的payload,就是一旦我们输入这个内容,按照我们的预期,它应该会在我们的div标签里面,通过我们的dom方法,来获取到这个输入,然后把它输出到div里面,我们来试一下

在这里插入图片描述

理论上,这个a标签点一下,就会弹出111

在这里插入图片描述

这就说明,这个地方是存在dom型xss漏洞的

我们接下来讲一下don型漏洞的利用,这一串输入既不会在url里面,也不会在后台存储下来,刷新一下,这个东西就没了,其实在我们场景下,这个例子确实是比较鸡肋的,但是不能不说,它是个问题,只能说这个地方是出现了比较低危的dom型xss

它的原因,其实是前端的输入被dom给获取到了,也就是对dom进行了操作,然后通过dom又在前端输出了,它是不经过后台输出的

因为前端的写法千奇百怪,层级也非常复杂,谁都不知道程序员会怎么去写前端的dom操作,我们来看一下,下一个dom型xss的案例

在这里插入图片描述

我们看到这个地方,有输入框,我们随便输入一串字符串,点一个提交,他弹了一句话,我们看一下后端的源码,看一下,他的逻辑是怎么样的,我们搜一下,定位一下

在这里插入图片描述

我们看到这个地方,也有一段js代码

function domxss(){var str = window.location.search;var txss = decodeURIComponent(str.split("text=")[1]);var xss = txss.replace(/\+/g,' ');
// alert(xss);document.getElementById("dom").innerHTML = "就让往事都随风,都随风吧";}

他在这个地方,定义了一个function,用window.location.search这个dom方法,来获取浏览器的参数,他会把url传参的参数,给获取下来,然后对他进行一个url的解码,用一个字符串进行分割,来获取到对应的内容

var str = window.location.search;var txss = decodeURIComponent(str.split("text=")[1]);var xss = txss.replace(/\+/g,' ');

这一段其实就是从框里面,获取到完整的内容,然后把这个赋值的内容,赋值给xss这么一个变量,然后,他就把xss跟我们刚看到的dom型xss一样,他把他写到了a标签里面,他的输入其实是从浏览器的url里面去获取的,跟我们上面一关不一样的地方,这个场景跟我们反射性的xss,就很像了

我们来构造一下闭合,跟刚刚一样,我们复制一下,然后我们点提交

有些费尽心机想要忘记的事情,后来真的就忘掉了

我们点一下a标签,就会去执行function,function会把a标签的内容,写到div里面

在这里插入图片描述

这种情况也是dom型的xss,他只需要把这一段url发送给需要攻击的用户

http://192.168.42.236/pikachu/vul/xss/xss_dom_x.php?text=#'+onclick="alert(111)">#

他只需要打开这个链接,这段恶义的代码,就会被插入到xss里面去,那这个就跟反射型的xss一样了,这个就比我们刚刚讲的dom型xss危害高很多

如果是从url里面获取的参数,那就意味着,我们可以通过js来注入恶意的代码


推荐阅读
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
author-avatar
Benson
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有