热门标签 | 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来注入恶意的代码


推荐阅读
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
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社区 版权所有