循环绕过问题

循环绕过问题

一,一个循环绕过

首先下图中的js一次循环删除语句将我们插入的元素的属性进行了删除,那么我们的目的就是通过事件属性将下面的循环绕过,换个思路就是让它不要remove掉有用的属性,通过两种方式来执行我们的恶意属性完成弹窗,两种方式分别是:
(1)进循环不删除有用的属性
(2)不进循环,在进循环前就执行了恶意属性
在这里插入图片描述

要想实现让它删除无用的属性就要搞清楚它的删除过程,下面将演示一下这个删除中存在的问题(它删除了第一个获取的属性src但是为什么却没有删除后面的onerror属性呢?)以及如何通过这个问题去实现绕过然后执行事件属性弹窗的效果
在这里插入图片描述
通过这个例子我们可以发现结果为:6,4,3
该循环过程为:
首先for循环从2开始循环整个数组,此时的max为6并将其删除,删除后3会自动补上6的空位,此时循环的指针会从4的位置开始遍历,此时的max为4,删除4后,后面的数都会自动补上去,因为此时for循环会从第三个位置开始,就不会从1开始而是从3开始循环,此时的max为3,并将其删除,因为后面没有值了,所以到此结束。
在这里插入图片描述

1.进循环不删除有用的属性
理解了循环删除的缺点后我们利用它来让恶意属性绕过删除,就可以达到我们的目的
img绕过
在这里插入图片描述
在这里插入图片描述
由此可见我们的代码成功绕过,页面没有删除恶意代码
details绕过
在这里插入图片描述
这里可以用details绕过是因为页面只删除了open属性
在这里插入图片描述
2.不进循环,在进循环前就执行了恶意属性
除了在标签内可以利用一次循环删除的缺点逃逸外还有这种利用svg标签来进行恶意弹窗效果
在这里插入图片描述

二,双循环绕过

这里的2次循环删除与一次不同之处在于通过第二次循环将属性都放入了一个新的数组进行删除,避免了恶意属性的逃逸,那么我们的目的就是通过两种方式来执行我们的恶意属性完成弹窗,两种方式分别是:
(1)进循环不删除有用的属性
(2)不进循环
在这里插入图片描述
在这里插入图片描述
这里可以看出之前的方式完全不行了,这里因为只要放入元素,它的所有属性都会被删除,所以我们就需要使用DOM破坏的方式使恶意属性进入循环中执行,也可以通过不进循环中执行,在循环开始前执行

1.进循环不删除有用的属性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
2.不进循环
这里使用两个svg标签的原因是,它会在循环执行前就执行恶意属性,而使用一个svg时它直到循环执行后还都不会执行
在这里插入图片描述
在这里插入图片描述
直接执行了
在这里插入图片描述
一个svg不行,因为一个svg会进入循环被删除了属性,无法弹窗。前面加一个svg的原因是当没有svg闭合标签时就会触发下面的判断,如果你的svg不是最外侧的就会创建一个事件去执行它,所以这里要使后面的svg不是最外侧才会被执行
在这里插入图片描述
只要你的svg不是最外侧的它就会创建一个事件load去执行你的onload事件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值