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

DOM破坏绕过XSSfilter例题

目录

一、什么是DOM破坏

 二、例题1

​编辑 三、多层关系

1.Collection集合方式

2.标签关系

四、例题2

一、什么是DOM破坏

DOM破坏(DOM Clobbering)指的是对网页上的DOM结构进行不当的修改,导致页面行为异常、性能问题、安全风险或其他不良影响的情况。

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

这里我们举一些例子就能更好地解释

 

可以看到打印的结果如下

通过打印<img>标签中的id或者name属性值,我们获取到了整个<img>标签

从中我们也发现了规律,直接打印x,y不管是id还是name都可以打印出来

而通过document来获取x,y只能打印出name属性的标签

window和直接打印的结果是一样的,都可以打印

 

下面这个例子可以看到cookie开始是空值,然后创建了一个div元素

在div里面添加了<img name=cookie>标签,然后添加到body里面去

这时候再打印cookie,发现变成了<img name="cookie">

这个例子成功地让本来为空值的cookie有了值,而且是我们可以控制的
 

然而得到一个标签对象并不是我们想要的,有些函数的参数并不是一个对象,而是字符串

这就需要函数在调用自己时,自己本身有一个ToString函数能够转换为字符串,然后让函数执行

所以我们需要一个自身拥有ToString函数的标签,而不是继承父类Object的ToString函数

 

 

可以看到一个对象调用父类的toString函数就会返回[object object],所以我们需要一个本身有toString函数的标签

通过下面的脚本过滤出了自身拥有toString函数的标签

HTMLAreaElement()和HTMLAnchorElement(),也就是<textarea>和<a>标签

所以这两个标签我们可以利用

 二、例题1

 

然后我们来看一道例题Ok, Boomer. | XSS Warmups

XSS Game - Ok, Boomer | PwnFunction

这道题通过get参数将内容写入h2标签内,而且有过滤框架DOMPurify

这个过滤框架由安全团队cure53开发,以我们的技术很难绕过

但是注意setTimeout函数内的ok参数

这里的JS代码是没有任何关于ok参数的定义的,所以我们可以使用DOM破坏

 构造ok参数,因为setTimeout函数执行字符串,所以需要用到<a>或者<textarea>标签

payload:<a id=ok href="tel:alert(1)">a</a>

 这里因为DOMPurify框架过滤了javascript,所以我们用tel,也可以执行script脚本

 三、多层关系

 如果我们需要获取一个标签下的子标签的内容,怎么获取呢?可以直接x.y吗?

 

显然不行,返回undefined 

 

1.Collection集合方式

既然直接x.y不行,那我们可以用一个集合来做x,然后再获取y

此时x指代了一个集合,既有div也有a标签,然后再获取它的y属性

 

 

2.标签关系


要想知道哪些标签能直接调用x.y,可以通过一段代码来获取,但代码有点长,就直接说结果了

form---button
from---fieldset
from---img
from---image
from---input
from---object
from---output
from---select
from---textarea
这九种组合可以直接调用x.y,来获取子标签内容

比如

 

 

3.三层标签如何获取
如果有三层标签,就需要要⽤到以上两种技巧来构建了

先分析x.y,x是一个集合,然后获取y,利用了第一种方法--集合方式,获取了第一个form标签

然后x.y.z,因为form和output标签存在关系,可以直接调用y.z,利用了第二种方法--标签关系

最后x.y.z.value就成功拿到output标签内的内容

 

四、例题2


首先审计代码,data为URL后的hash值,然后创建了一个div标签,把我们输入的hash值放进了div这个标签里面

第一个for循环拿出了div元素的所有后代元素,用el表示

定义了一个空数组attrs

第二个for循环拿出了后代元素的所有属性,用attr表示

然后将属性添加到attrs数组里

第三个for循环拿出了attrs数组里面的属性,用name表示

然后移除掉这个元素的该属性

最后将div添加到body里面去

const data = decodeURIComponent(location.hash.substr(1));
const root = document.createElement('div');
root.innerHTML = data;// 这里模拟了XSS过滤的过程,方法是移除所有属性
for (let el of root.querySelectorAll('*')) {let attrs = [];for (let attr of el.attributes) {attrs.push(attr.name);}for (let name of attrs) {el.removeAttribute(name);}
}document.body.appendChild(root); 

可见这道例题是移除掉我们输入标签的所有属性

既然不能有属性,那直接输入<script>alert(1)</script>不就行了吗

答案是不可以的,因为innerHTML考虑到安全问题将script过滤掉了

这道题可以使用DOM破坏和CSS来触发XSS

直接来看payload

 <style>@keyframes x{}</style><form style="animation-name:x" onanimationstart="alert(1)"><input id=attributes><input id=attributes></form>

 

首先定义了一个CSS动画@keyframes x{},然后form表单里面调用这个样式

然后属性onanimationstart执行alert,意思是当animation动画开始时执行alert

CSS样式我已经忘得差不多了,但是大概是这样一个意思

我们再看后面的内容,一个form表单内包含两个id属性为attributes的input标签

看到这个id属性值应该能猜到这是什么作用了,没错,它就是用来破坏el.attributes属性的

上面我们说了,form和input标签是由关系的,可以直接调用x.y

所以代码中的el.attributes正好是我们的input标签,那为什么不用一个input标签,而是两个呢?

因为在for循环中el.attributes需要是可迭代的,而一个input标签只是一个对象,所以是不可迭代的

报错如下:

所以我们需要两个input标签来组成一个集合,这时,集合就是可迭代的了

根据代码,首先到style标签,没有属性可删,然后到form标签

因为迭代对象变成了input标签集合,此时attr就变成了undefined,所以attr.name也就不存在

此时attrs数组获取不到form标签里的任何属性,自然下面的for循环也不会删除form表单的任何属性

 

最后到我们的两个input标签,因为此时目的已经达到,删除了属性也无妨

最后成功绕过

相关文章:

DOM破坏绕过XSSfilter例题

目录 一、什么是DOM破坏 二、例题1 ​编辑 三、多层关系 1.Collection集合方式 2.标签关系 四、例题2 一、什么是DOM破坏 DOM破坏&#xff08;DOM Clobbering&#xff09;指的是对网页上的DOM结构进行不当的修改&#xff0c;导致页面行为异常、性能问题、安全风险或其他不…...

代码随想录Day_56打卡

①、两个字符串的删除操作 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 事例&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "sea&…...

高忆管理:六连板捷荣技术或难扛“华为概念股”大旗

在本钱商场上名不见经传的捷荣技术&#xff08;002855.SZ&#xff09;正扛起“华为概念股”大旗。 9月6日&#xff0c;捷荣技术已拿下第六个连续涨停板&#xff0c;短短七个生意日&#xff0c;股价累积涨幅逾越90%。公司已连发两份股票生意异动公告。 是炒作&#xff0c;还是…...

「解析」YOLOv5 classify分类模板

学习深度学习有些时间了&#xff0c;相信很多小伙伴都已经接触 图像分类、目标检测甚至图像分割(语义分割)等算法了&#xff0c;相信大部分小伙伴都是从分类入门&#xff0c;接触各式各样的 Backbone算法开启自己的炼丹之路。 但是炼丹并非全是 Backbone&#xff0c;更多的是各…...

交换排序——冒泡排序、快速排序

交换排序就是通过比较交换实现排序。分冒泡排序和快速排序两种。 一、冒泡排序&#xff1a; 1、简述 顾名思义就是大的就冒头&#xff0c;换位置。 通过多次重复比较、交换相邻记录而实现排序&#xff1b;每一趟的效果都是将当前键值最大的记录换到最后。 冒泡排序算法的原…...

Android 10.0 禁用adb shell input输入功能

1.前言 在10.0的产品开发中,在进行一些定制开发中,对于一些adb shell功能需要通过属性来控制禁止使用input 等输入功能,比如adb shell input keyevent 响应输入事件等,所以就需要 熟悉adb shell input的输入事件流程,然后来禁用adb shell input的输入事件功能,接下来分…...

cuda显存访问耗时

背景&#xff1a; 项目中有个数据量大小为5195 * 512 * 128float 1.268G的显存&#xff0c;发现有个函数调用很耗时&#xff0c;函数里面就是对这个显存进行128个元素求和&#xff0c;得到一个5195 * 512的图像 分析 1. 为什么耗时 直观上感觉这个流程应该不怎么耗时才对&a…...

【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用

文章目录 一、拖拽事件1.1 拖拽事件1.2 案例&#xff1a;拖拽丢弃图片 二、音频和视频三、defer 与 async 属性3.1 概述3.2 示例一&#xff1a;3.3 示例二&#xff1a; 四、dialog 元素 一、拖拽事件 原生JavaScipt案例合集 JavaScript DOM基础 JavaScript 基础到高级 Canvas…...

独享IP vs. 共享IP:哪种更适合你?

无论是个人用户还是企业组织&#xff0c;在互联网上都需要一个唯一标识来与其他设备进行通信。这就涉及到使用独立分配给自己或多个用户分享的公共 IP 地址&#xff08;也称为共享 IP&#xff09;。那么&#xff0c;究竟应该选择独占一个专用地址还是与他人分享相同地址呢&…...

【Arduino27】DHT11温湿度传感器模拟值实验

硬件准备 DHT11温湿度&#xff1a;1个 面包板&#xff1a;1个 杜邦线&#xff1a;3根 硬件连线 VDD引脚接 5V 电源 DATE引脚接 4号 接口 GND引脚接 GND 接口 软件程序 #include<DHT.h>#define DHT11_pin 4 //温湿度传感器引脚DHT dht(DHT11_pin,DHT11);float tem…...

dockerfile基于apline将JDK20打包成镜像

dockerfile基于apline将JDK20打包成镜像 ​ 今天就来和大家聊聊如何把最新出版的JDK20打包成docker镜像&#xff0c;很多uu都会采用centos作为基础镜像&#xff0c;这么做会有一个问题&#xff0c;centos系统会含有很多库文件&#xff0c;这些库文件JDK程序并不是完全需要的&a…...

MATLAB基础-MAT文件的读写操作

简介 MAT文件是MATLAB格式的双精度二进制数据文件&#xff0c;由MATLAB软件创建&#xff0c;可以使用MATLAB软件再其他计算机上以其他浮点格式读取&#xff0c;同时也可以使用其他软件通过MATLAB的应用程序接口来进行读写操作。如果只是再MATLAB环境中处理数据&#xff0c;使用…...

PostgreSQL PG15 新功能 PG_WALINSPECT

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 liuaustin3 &#xff08;…...

时序预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神…...

数据结构和算法(2):向量

抽象数据类型 数组到向量 C/C 中&#xff0c;数组A[]中的元素与[0,n)内的编号一一对应&#xff0c;A[0],A[1],...,A[n-1]&#xff1b;反之&#xff0c;每个元素均由&#xff08;非负&#xff09;编号唯一指代&#xff0c;并可直接访问A[i] 的物理地址 Ai s&#xff0c;s 为单…...

mysql 大表如何ddl

大家好&#xff0c;我是蓝胖子&#xff0c;mysql对大表(千万级数据)的ddl语句&#xff0c;在生产上执行时一定要千万小心&#xff0c;一不小心就有可能造成业务阻塞&#xff0c;数据库io和cpu飙高的情况。今天我们就来看看如何针对大表执行ddl语句。 通过这篇文章&#xff0c;…...

C++新特性:智能指针

一 、为什么需要智能指针 智能指针主要解决以下问题&#xff1a; 1&#xff09;内存泄漏&#xff1a;内存手动释放&#xff0c;使用智能指针可以自动释放 2&#xff09;共享所有权指针的传播和释放&#xff0c;比如多线程使用同一个对象时析构问题&#xff0c;例如同样的数据…...

SAP FI之批量修改财务凭证的BAPI

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 一般涉及修改财务凭证&#xff0c;或者其它凭证&#xff0c;不应直接更新数据库&#xff0c;而是使用系统提供的function module,或者BAPI&#xff0c;或者使用BDC。 一、 示例&#xf…...

Spring Boot + Vue的网上商城之商品分类

Spring Boot Vue的网上商城之商品分类 在网上商城中&#xff0c;商品分类是非常重要的一个功能&#xff0c;它可以帮助用户更方便地浏览和筛选商品。本文将介绍如何使用Spring Boot和Vue来实现商品分类的功能&#xff0c;包括一级分类和二级分类的管理以及前台按分类浏览商品…...

Docker 容器逃逸漏洞 (CVE-2020-15257)复现

漏洞概述 containerd是行业标准的容器运行时&#xff0c;可作为Linux和Windows的守护程序使用。在版本1.3.9和1.4.3之前的容器中&#xff0c;容器填充的API不正确地暴露给主机网络容器。填充程序的API套接字的访问控制验证了连接过程的有效UID为0&#xff0c;但没有以其他方式…...

Python 如何使用 csv、openpyxl 库进行读写 Excel 文件详细教程(更新中)

csv 基本概述 首先介绍下 csv (comma separated values)&#xff0c;即逗号分隔值&#xff08;也称字符分隔值&#xff0c;因为分隔符可以不是逗号&#xff09;&#xff0c;是一种常用的文本格式&#xff0c;用以存储表格数据&#xff0c;包括数字或者字符。 程序在处理数据时…...

$nextTick属性使用与介绍

属性介绍 $nextTick 是 Vue.js 中的一个重要方法&#xff0c;之前我们也说过$ref 等一些重要的属性&#xff0c;这次我们说$nextTick&#xff0c;$nextTick用于在 DOM 更新后执行回调函数。它通常用于处理 DOM 更新后的操作&#xff0c;因为 Vue 在更新 DOM 后不会立即触发回调…...

【群智能算法改进】一种改进的鹈鹕优化算法 IPOA算法[2]【Matlab代码#58】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 原始POA算法2. 改进后的IPOA算法2.1 随机对立学习种群初始化2.2 动态权重系数2.3 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 原始POA算法…...

k8s 入门到实战--部署应用到 k8s

k8s 入门到实战 01.png 本文提供视频版&#xff1a; 背景 最近这这段时间更新了一些 k8s 相关的博客和视频&#xff0c;也收到了一些反馈&#xff1b;大概分为这几类&#xff1a; 公司已经经历过服务化改造了&#xff0c;但还未接触过云原生。公司部分应用进行了云原生改造&…...

编程语言新特性:instanceof的改进

以前也写过类似的博文&#xff0c;可能重复。 要判断一个对象是哪个类或父类的实例&#xff0c;JAVA用到instanceof&#xff0c;其实语言也有类似语法。而类一般是多层继承的&#xff0c;有时就让人糊涂。所以我提出改进思路&#xff1a; instanceof&#xff1a;保持不变。ins…...

数据挖掘的学习路径

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…...

逻辑回归Logistic

回归 概念 假设现在有一些数据点&#xff0c;我们用一条直线对这些点进行拟合&#xff08;这条直线称为最佳拟合直线&#xff09;&#xff0c;这个拟合的过程就叫做回归。进而可以得到对这些点的拟合直线方程。 最后结果用sigmoid函数输出 因此&#xff0c;为了实现 Logisti…...

Flink提交jar出现错误RestHandlerException: No jobs included in application.

今天打包一个flink的maven工程为jar&#xff0c;通过flink webUI提交&#xff0c;发现居然报错。 如上图所示&#xff0c;提示错误为&#xff1a; Server Response Message: org.apache.flink.runtime.rest.handler.RestHandlerException: No jobs included in application. …...

【数仓基础(一)】基础概念:数据仓库【用于决策的数据集合】的概念、建立数据仓库的原因与好处

文章目录 一. 数据仓库的概念1. 面向主题2. 集成3. 随时间变化4. 非易失粒度 二. 建立数据仓库的原因三. 使用数据仓库的好处 一. 数据仓库的概念 数据仓库的主要作用&#xff1a; 数据仓库概念主要是解决多重数据复制带来的高成本问题。 在没有数据仓库的时代&#xff0c;需…...

电商类面试问题--01Elasticsearch与Mysql数据同步问题

在实现基于关键字的搜索时&#xff0c;首先需要确保MySQL数据库和ES库中的数据是同步的。为了解决这个问题&#xff0c;可以考虑两层方案。 全量同步&#xff1a;全量同步是在服务初始化阶段将MySQL中的数据与ES库中的数据进行全量同步。可以在服务启动时&#xff0c;对ES库进…...

广东高端网站建设公司/深圳网站制作推广

参照《Android第一行代码》&#xff0c;使用WebView控件&#xff0c;结构无法加载网页提示如下错误&#xff0c;参照转文链接的博主解决&#xff0c;我用的是方法三&#xff0c;感谢这位兄弟&#xff0c;引用&#xff0c;仅学习记录。 【异常原因】&#xff1a;从Android 9.0&a…...

wordpress 未找到/google seo实战教程

液体青贮添加剂市场的企业竞争态势 该报告涉及的主要国际市场参与者有Volac (UK)、Trouw Nutrition (Netherlands)、Schaumann BioEnergy (Germany)、ADDCON (Germany)、Chr. Hansen (Denmark)、BASF (Germany)、Lallemand (US)、DuPont Pioneer (US)、Micron Bio-Systems (US)…...

阿里云搭建wordpress/苏州百度

JSON 对象中数组可以包含另外一个数组&#xff0c;或者另外一个 JSON 对象&#xff1a; 微信小程序交流群&#xff1a;111733917 | 微信小程序从0基础到就业的课程&#xff1a;https://edu.csdn.net/topic/huangjuhua 实例 myObj { "name":"网站", &quo…...

wordpress前台显示英文/网站关键词排名

编写很多小的函数对象的缺点&#xff1a; 1&#xff0c; 大量的小类分散在代码中&#xff0c;这样很难进行维护 2&#xff0c;理解函数对象被调用处的代码会很难Boost.Lambda &#xff1a; 1】可以创建直接定义和调用的函数对象&#xff0c;或者把它保存起来晚一些再调用&am…...

西地那非片的正确服用方法/百度关键词seo

触发器、存储过程和函数三者有何区别&#xff1f; 回复&#xff1a;触发器、存储过程和函数三者有何区别&#xff1f; 触发器是特殊的存储过程&#xff0c;存储过程需要程序调用&#xff0c;而触发器会自动执行&#xff1b;你所说的函数是自定义函数吧&#xff0c;函数是根据输…...

网站建设中的多语言翻译如何实现/关键词优化排名用什么软件比较好

前言&#xff1a;最近开始接触bugku&#xff0c;感觉适合新人培养兴趣。自己在学习的时候写个笔记&#xff0c;督促自己多去学习和巩固知识。如果文章和代码有表述不当之处&#xff0c;还请大佬不吝赐教。 Bugku CTF-web5 矛盾知识积累解题知识积累 is_numeric()函数&#xf…...