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

网络安全-dom破坏结合jq漏洞以及框架漏洞造成的xss-World War 3

目录

一、环境

二、开始介绍

三、寻找触发点

3.1总结一下方法:


一、环境

XSS Game - Learning XSS Made Simple! | Created by PwnFunction

二、开始介绍

如果notify为真的话那么html是

<div class="alert alert-warning" role="alert"><b>Meme</b> created from ${DOMPurify.sanitize(text)}</div>

代码解析

meme-code的值

在页面随便输入一个text=aaaa&img=bbbbb

很明显调用到这里因为text和img都存在了

而我们可以很明显看到一点Meme Code没值,没值的话那就代表onload根本没有加载,当我们什么都没写的情况下很明显加载值了

当我们把地址参数写对的情况下,我们的onload很明显是可以执行的

而我们从始至终都没有看到created...,因为notify是false

三、寻找触发点

很明显经过上面的介绍,我们必须要notify为true不然无法下手,那这不就是我们dom破坏的技巧

并且乍一看经过DOMPurify后的这些交互点都很安全,但是使用html()解析会存在标签逃逸问题。

两种解析html的方式:jquery.html&innerhtmlinnerHTML是原生js的写法,Jqury.html()也是调用原生的innerHTML方法,但是加了自己的解析规则(后文介绍)。

关于两种方式:Jquery.html()innerHTMl的区别我们用示例来看。

对于innerHTML:模拟浏览器自动补全标签,不处理非法标签。同时,<style>标签中不允许存在子标签(style标签最初的设计理念就不能用来放子标签),如果存在会被当作text解析。因此<style><style/><script>alert(1337)//会被渲染如下

<style><style/><script>alert(1337)//
</style>

对于Jqury.html(),最终对标签的处理是在htmlPrefilter()中实现:jquery-src,其后再进行原生innerHTML的调用来加载到页面。

rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^/>x20trnf]*)[^>]*)/>/gijQuery.extend( {htmlPrefilter: function( html ) {return html.replace( rxhtmlTag, "<$1></$2>" );}...
})tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];

有意思的是,这个正则表达式在匹配`<*/>`之后会重新生成一对标签(区别于直接调用innerHTML)

所以相同的语句`<style><style/><script>alert(1337)//`则会被解析成如下形式,成功逃逸`<script>`标签。

<style>    <style>
</style>
<script>alert(1337)//

我们知道DOMPurify的工作机制是将传入的payload分配给元素的innerHtml属性,让浏览器解释它(但不执行),然后对潜在的XSS进行清理。由于DOMPurify在对其进行innerHtml处理时,script标签被当作style标签的text处理了,所以DOMPurify不会进行清洗(因为认为这是无害的payload),但在其后进入html()时,这个无害payload就能逃逸出来一个有害的script标签从而xss。

3.1总结一下方法:

1.绕过过滤框架

2.html 逃逸出style标签

3.nofity dom破坏 使他为真

<img name=notify><style></style><script>alert//因为img是异步方法,那么DOMPurity会先写,那我们notify就会变成ture,那么我们就会触发

最终payload

text=<img name%3dnotify><style><style%2F><script>alert(1337)%2F%2F&img=https://i.imgur.com/PdbDexI.jpg

之后就搞定了 

最终的加载就是加载到div标签里面了

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • FastAPI 中的错误处理:如何让错误信息更有价值
  • 上传文件到钉盘流程详解
  • SpringBoot整合WebSocket实现消息推送或聊天功能示例
  • 【计算机网络】HTTPHTTPS
  • 时序必读论文06|PITS : 基于非依赖策略学习时序patch特征表示
  • C和指针:指针
  • vue+IntersectionObserver + scrollIntoView 实现电梯导航
  • Android 车联网——汽车系统介绍(附2)
  • 工具知识 | Linux 常用命令参考手册
  • 深度学习——数据预处理,张量降维
  • 位段、枚举、联合
  • S32G EB tresos AutoCore下载和激活方法
  • 52.【C语言】 字符函数和字符串函数(strcat函数)
  • Oracle EBS中AR模块的财务流程概览
  • 《数据结构(C语言版)第二版》第八章-排序(8.5-归并排序、8.6基数排序、8.7 外部排序)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • co模块的前端实现
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • es6(二):字符串的扩展
  • Java读取Properties文件的六种方法
  • k8s 面向应用开发者的基础命令
  • LeetCode18.四数之和 JavaScript
  • spring学习第二天
  • 对超线程几个不同角度的解释
  • 番外篇1:在Windows环境下安装JDK
  • 高度不固定时垂直居中
  • 记录:CentOS7.2配置LNMP环境记录
  • 前嗅ForeSpider采集配置界面介绍
  • 浅谈Golang中select的用法
  • 如何用vue打造一个移动端音乐播放器
  • 微信支付JSAPI,实测!终极方案
  • 带你开发类似Pokemon Go的AR游戏
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # Kafka_深入探秘者(2):kafka 生产者
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #define、const、typedef的差别
  • #java学习笔记(面向对象)----(未完结)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C)一些题4
  • (Oracle)SQL优化技巧(一):分页查询
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (过滤器)Filter和(监听器)listener
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (转)【Hibernate总结系列】使用举例
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .net反混淆脱壳工具de4dot的使用
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET使用存储过程实现对数据库的增删改查
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • // an array of int