第一道
代码分析:data是要插入到html页面的标签及属性,下面的for循环的作用则是将你插入的标签里的属性给全部删除。
图中,把我img的src属性给删掉了。
但当我多写几个属性时,奇怪的事情发生了。
他只把我得src给删掉了,但是我得onerror并没有,试试3个属性时,并把onerror放到第三位,确保不是因为onerror的问题。
这时发现又只有src在了,其他两个都别删除了。
这是为什么呢?
以a,b,c为例,循环下来先删除的是a元素,当要删除第二个元素时,b元素因为a元素被删掉,自动补位到第一位,c元素补位到第二位,这就导致c元素被删除,而b元素逃逸了出来。
如此推断,那么我们只要将第二位属性写src,第四位属性写onerror是不是就能实现xss了呢?实现以下。
很明显我们的推断是对的。
第二道
在上一道题的基础上进行完善。
上一道题出现问题是因为都在同一个数组中,而这次修改了一下,重新放进一个新的数组中,这样就能全部删除完。
那这个该如何去绕过呢?
我们可以尝试一下,看看能不能让这个删除的是无害的属性,而删不了我有害的属性和标签。
其实是可以的。
我们可以用两个标签,将他们的id名字取成attributes,这样当for循环的时候,取出来的就是这两个标签,而有害的标签则会逃逸出来。
<style>@keyframes x{}</style><form style="animation-name: x" onanimationstart="alert(1)"><input id=attributes><input id=attributes>