一、如图
我们在这串代码的情况下看一下打印状态
打印x和y的时候把标签打印出来了,而document没有打印出来x值,所以我们要考虑特性
可以看到我们接下来的验证,其中document.cookie 已经被我们⽤img 标签给覆盖了
接下来覆盖系统函数
既然我们可以通过这种⽅式去创建或者覆盖 document 或者 window 对象的某些值,但是看起来我们 举的例⼦只是利⽤标签创建或者覆盖最终得到的也是标签,是⼀个HTMLElment 对象。
但是对于⼤多数情况来说,我们可能更需要将其转换为⼀个可控的字符串类型,以便我们进⾏操作。
举个例子:settimeout这个函数,只能传函数或者字符串,即使我们想覆盖ok,那么覆盖出来的也只是一个对象,那第一个接收不了(而这也就是我们上面所说转换为一个可控的字符串的解释)
而接下来,如何破解我们的疑问呢??
我们可以通过以下代码来进⾏fuzz 得到可以通过toString ⽅法将其转换成字符串类型的标签:
将Windows下的所有key获取到了,之后进行匹配Element,两次过滤
我们试着去打印一下
很明显有两个元素自身自带toString方法,一个是<area>一个是<a>
举个例子吧
可以看到自动调用的是字符串
好了那我们的想法如上,把刚才的实践一下,那么取的会是ok,两秒后会去执行,依然没有执行???
这个标签还是被DOMPurify这个函数过滤掉了,因为我们还是通过boomer这个参数进行传递的,但是这个框架是有白名单的,如果我们找到白名单自然可以过滤了
白名单:
我们使用cid自然ok
整理一下思路:
因为系统元素中没有ok,但是我们又需要ok去绕过,且我们想要的是一个字符,先会找系统的,之后找a标签,但是 DOMPurify这个元素又把我们标签过滤掉了,我们难以执行,但是这个DOMPurify框架是有白名单的,我们通过白名单直接就过了DOMPurify这个框架,之后便可实现弹窗这也是我前面给大家所讲的核心点dom破坏强行增加一个元素