DOM Clobbring个人理解

news2024/11/17 1:34:40

目录

toString

One Level

Two Level

Three Level

More


Dom Clobbering:就是⼀种将 HTML 代码注⼊⻚⾯中以操纵 DOM 并最终更改⻚⾯上 JavaScript ⾏为的技术

DOM Clobbering中的操作也是根据JavaScript行为的层级来分为一层、两层、三层和更多

toString

我们通过以下代码进行fuzz去获取可以通过toString方法将转换成字符串的标签。这些标签的属性值是能够控制的,因此我们也就不再是获取无用的标签了,而是变成了获取到我们想要的字符串

    Object.getOwnPropertyNames(window)
    .filter(p => p.match(/Element$/))
    .map(p => window[p])
    .filter(p => p && p.prototype && p.prototype.toString 
    !== Object.prototype.toString)

这段代码主要是对 window 对象的属性进行一系列操作:

  • Object.getOwnPropertyNames(window) 获取 window 对象的所有自身属性的名称。
  • 然后通过 filter 方法筛选出名称以 Element$ 结尾的属性。
  • 接着通过 map 方法将这些属性对应的值提取出来。
  • 最后再通过 filter 方法进一步筛选出那些值存在且有原型且原型的 toString 方法不同于 Object.prototype.toString 的元素。

我们得到了两种标签对象:HTMLAreaElement(<area>)&HTMLAnchorElement(<a>),这两个标签对象,我们都可以利用href属性来进行字符串转换

One Level

当JavaScript的行为只有一层时,只需要简单的使用id或name属性来定义该名称,即可在JavaScript进行执行时对该变量覆盖,如

Two Level

当JavaScript的行为为两层时,需要两层嵌套才能覆盖

需要注意:内外层使用id还是name,需要取决标签之间的层级关系

在双id属性的情况下,可以使用以下来嵌套双层标签:

  • form->button
  • form->fieldset
  • form->image
  • form->img
  • form->input
  • form->object
  • form->output
var log=[];
var html = ["a","abbr","acronym","address","applet","area","article","aside","audio","b",
						"base","basefont","bdi","bdo","bgsound","big","blink","blockquote","body","br"
						,"button","canvas","caption","center","cite","code","col","colgroup","command"
						,"content","data","datalist","dd","del","details","dfn","dialog","dir","div",
						"dl","dt","element","em","embed","fieldset","figcaption","figure","font","footer"
						,"form","frame","frameset","h1","head","header","hgroup","hr","html","i","iframe"
						,"image","img","input","ins","isindex","kbd","keygen","label","legend","li","link"
						,"listing","main","map","mark","marquee","menu","menuitem","meta","meter","multicol"
						,"nav","nextid","nobr","noembed","noframes","noscript","object","ol","optgroup",
						"option","output","p","param","picture","plaintext","pre","progress","q","rb","rp"
						,"rt","rtc","ruby","s","samp","script","section","select","shadow","slot","small"
						,"source","spacer","span","strike","strong","style","sub","summary","sup","svg",
						"table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr",
						"track","tt","u","ul","var","video","wbr","xmp "], logs = [];
div=document.createElement('div'); 
for(var i=0;i<html.length;i++){
	for(var j=0;j<html.length;j++) {
		div.innerHTML='<'+html[i]+' id=element1>'+'<'+html[j]+'id=element2>'; 
		document.body.appendChild(div);
		if(window.element1 && element1.element2){ 
			log.push(html[i]+','+html[j]);
		}
		document.body.removeChild(div);
	}
}
console.log(log.join('\n'));

可以修改代码去获取id和name之间标签的层级关系

Three Level

当JavaScript的行为为三层时,需要构造同名称的同级标签,在其中一同级目录标签同时具有idname属性,然后在其中再嵌套一个子标签。

这样在定位x时,返回是数组,即HTMLCollectionHTMLCollection是可以通过name作为索引进行查找的。所以x.y才会定位到第一个form标签。所以当定位到z时,就成功为三层了。

More

三层以上的层级,需要用到iframesrcdoc来配合使用

<body>
    <iframe name=a srcdoc="<iframe name=b srcdoc='<a id=c name=d href=cid:Clobbered></a><a id=c>' >">
    </iframe>
    <script>setTimeout(()=>alert(a.b.c.d),500)</script>
</body>

因为需要等待所有的iframe加载完毕我们才能获得这个层级关系,所以需要⽤到延时,不⽤延时也可以通过⽹络请求来进⾏延缓

<iframe name=a srcdoc="
<iframe srcdoc='<a id=c name=d href=cid:Clobbered>test</a><a id=c>' name=b>">
</iframe>
<style>@import 'http://example.com';</style>
<script> 
alert(a.b.c.d)
</script>

需要注意:如果没有延时或者延缓,可能会导致iframe加载不全,导致undefined

只使用a返回的是最外层iframe标签的srcdoc属性,a.b返回内层iframe标签的srcdoc属性,到a.b.c时,返回的才是HTMLCollection

最内层的标签也可以转换成form标签和output标签的嵌套

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

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

相关文章

集合及数据结构第一节————初识集合框架和数据结构

系列文章目录 集合及数据结构第一节————初识集合框架和数据结构 初始集合框架和数据结构 什么是集合框架&#xff1f;集合框架的重要性背后所涉及的数据结构以及算法数据结构的基本概念和术语逻辑结构和物理结构数据类型 文章目录 系列文章目录集合及数据结构第一节——…

机器学习/自主系统与亚当·斯密

人工智能中的机器学习和自主系统是当前科技领域的热门话题&#xff0c;它们与亚当斯密的经济学理论之间可能存在一些潜在的联系和启示。亚当斯密的经济学理论主要关注市场经济的运行和资源分配。他的核心观点是&#xff0c;通过市场机制的作用&#xff0c;个体追求自身利益的行…

算法日记day 41(动归之最长序列问题)

一、最长递增子序列 题目&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0…

一款免费的开源支付网关系统,支持X宝、某信、云闪付等多种支付方式,提供收单、退款、聚合支付、对账、分账等功能(附源码)

前言 在数字化浪潮中&#xff0c;电子-商务和移动支付迅速崛起&#xff0c;支付系统成为企业运营的核心组件。然而&#xff0c;现有支付处理方案常面临成本高、集成复杂、系统耦合度高等挑战。 这些问题不仅增加了企业负担&#xff0c;也制约了业务的快速迭代和创新。市场迫切…

Tomcat的核心文件讲解

参考视频&#xff1a;对应视频 server.xml中的以下部分可修改&#xff1a; 1.connector标签里的port可以修改。--修改端口号 Tomcat默认端口号&#xff1a;8080 <Connector connectionTimeout"20000" maxParameterCount"1000"port"8080" prot…

Mac文件需要分卷压缩怎么办 Mac上怎么解压分卷压缩的文件

在处理大型文件的传输和存储的时候&#xff0c;Mac用户常面临文件大小超过限制的问题。为了有效管理这些大文件&#xff0c;分卷压缩成为一种必不可少的解决方案。Mac文件需要分卷压缩怎么办&#xff1f;Mac上怎么解压分卷压缩的文件&#xff1f;本文将向你介绍如何使用BetterZ…

STM32F103之DMA

DMA简介 DMA&#xff0c;即Direct Memory Access&#xff0c;是一种在无需CPU参与的情况下&#xff0c;将数据在存储器&#xff08;单片机的RAM&#xff09;和外设&#xff08;一般是I/O设备&#xff09;之间高效传输的硬件机制。实现这种功能的集成电路单元叫做DMA Controlle…

北京大学数学课程相关视频

今天无意中发现了一个网站&#xff1a;北京大学教学媒体资源服务平台媒体资源服务平台-北京大学&#xff0c;发现里面有一些精品的课程&#xff0c;于是将里面的数学相关可成整理出来。 北大精品课 离散数学&#xff08;2013&#xff09; 屈婉玲 课程链接&#xff1a;媒体资源…

Bugku-web-Simple_SSTl_1

开启环境 翻译一下 他说 您需要输入一个名为flag的参数。 SSTL 是一个模板注入, SECRET KEY:是flask 一个重要得配置值 需要用以下代码来加密 /?flag{{config.SECRET KEY}}(注意大小写),或直接 /?flag{{config}} 关于SSTL注入 SSTL注入&#xff0c;通常指的是‌服务器端…

Vxe UI vue vxe-table 实现表格数据分组功能,根据字段数据分组

Vxe UI vue vxe-table 实现表格数据分组功能&#xff0c;根据字段数据分组 实现数据分组功能 基于树结构功能就可以直接实现数据分组功能&#xff0c;代码如下&#xff1a; <template><div><vxe-button status"primary" click"listToGroup()&…

Self-Attention自注意力机制解读(2):图解版!

文章目录 一、前言二、流程解读1.它整体做了一件什么事2.多层Self-attention3.self-attention做了一件什么事4.具体流程 三、流程的矩阵表示三、Softmax层的解释 一、前言 上一篇文章 Self-Attention自注意力机制&#xff1a;深度学习中的动态焦点 | 手把手实例解析 看不懂你打…

Keepalived实验

keepalived在架构中的作用 LVS和HAProxy组成负载均衡 调度器LVS&#xff08;四层&#xff09;后端服务器&#xff08;多&#xff09; LVS&#xff1a;优点是速度快&#xff0c;性能要求不高&#xff0c;但是没有对后端服务器的健康检测&#xff1b; HAProxy&#xff1a;有后…

有名管道 | 信号

匿名管道由于没有名字&#xff0c;只能用于具有亲缘关系的进程间通信。 为了克服这个缺点&#xff0c;就提出了有名管道&#xff08;FIFO&#xff09;&#xff0c;也称为命名管道、FIFO文件。 有名管道 FIFO在文件系统中作为一个特殊的文件而存在并且在文件系统中可见&#…

8个最佳iMacros替代方案(2024)

iMacros作为一款经典的网页自动化工具&#xff0c;多年来帮助无数用户自动化了繁琐的网页任务。然而&#xff0c;随着技术的进步&#xff0c;越来越多功能更强大、界面更友好的替代方案涌现&#xff0c;为用户提供了更多选择。如果你正在寻找2024年最好的iMacros替代工具&#…

中国智能物流系统集成玩家图谱:很全

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 上海欣巴自动化科技股份有限公司 总部&#xff1a;上海服务行业&#xff1a;快递、电商、服装、零售、医药、食品饮料等解决方案&#xff1a;自动化分拣输送系统&#xff1b;控制软件…

linux下tomcat nio 底层源码调用系统函数处理流程

linux tomcat使用nio处理请求 调用jvm native C 底层调用系统函数源码原理 ##Acceptor接受socket socket endpoint.serverSocketAccept(); ##NioEndpoint serverSock.accept() ##ServerSocketChannelImpl n accept(this.fd, newfd, isaa); ##ServerSocketChannelImpl a…

Linux的安装和使用

Linux 第一节 Linux 优势 1. 开源 为什么这么多的的设备都选择使用 Linux&#xff1f;因为它是开源软件&#xff08;open source software&#xff09;&#xff0c;具有不同的含义。使用一个安全的操作系统工作变得必不可少的事&#xff0c;而 Linux 恰好满足了这个需求。因…

Golang | Leetcode Golang题解之第344题反转字符串

题目&#xff1a; 题解&#xff1a; func reverseString(s []byte) {for left, right : 0, len(s)-1; left < right; left {s[left], s[right] s[right], s[left]right--} }

vue3ts+element-plus实现点击el-select下拉选择内容填充和编辑内容

需求在填写报表时&#xff0c;既可以选择下拉选项&#xff0c;还可以编辑选的内容&#xff0c; 找了elementUi没有现成的就自己组装一个 效果&#xff1a; 贴代码&#xff1a; 在components下新建文件夹TextareaSelect&#xff0c;再新建index.vue和interface.ts &#xff08;…

AIGC创新应用技术实践:成都技术生态沙龙全回顾

AIGC创新应用技术实践&#xff1a;成都技术生态沙龙全回顾 2024年8月17日下午&#xff0c;我有幸作为CSDN校园主理人参加了在成都举办的AIGC创新应用技术实践沙龙活动。 此行也见到了许许多多的行业大佬&#xff0c;得到的收获非常之多&#xff0c;赶了1300公里的路&#xff0…