当前位置:网站首页>一个循环,两个循环问题的思考及复现
一个循环,两个循环问题的思考及复现
2022-08-03 01:03:00 【熬夜且瞌睡】
一个循环

在url中输入img标签
<img src=1 οnerrοr=alert(1)>

执行之后,我们看到src属性消失了,只留下来onerror属性,

分析原因,我们断点执行,一步一步来看。在第一个for里面,el传递的是img标签,而后面的“*” 代表标签内的所有元素,attr代表img标签内的属性,而下图的0和1则代表的索引下标,而后面的el.removeAttribute(attr.name);即删除了img的第一个属性,就是src,为什么onerror没有被删除掉,可以理解为这个删除是按照空间位置来删的。索引为[0]在第一个空间位置,索引为[1]在第二个空间位置,当把第一个空间位置清理出来,删除就会来到第二个空间位置,但因为第一个空间位置为空,原空间二自动填充,及此时所有空间都往前移了一位,则此时若删除空间二的内容,实际删除的是空间三的内容。



如图,按程序的意思应该是从大到小排序,但实际只输出9,7,6,这就是因为当删除9,7,6时,在其后面的元素都会前移,实际一共循环三次,第一次以2为起始元素,第二次是3,第三次是1,三次循环过后,停止循环
当我们输入以下标签,添加一个a=1111
![]()

则只保留了 src属性
为了避免删除标签,我们可以将其设置为,可以进入循环,但让其删除的是无用的属性,我们可以利用之前学的id与name来实现
先进行演示,查看是否可行
<body>
<form id="x"action="">
<img name="attributes">
</form>
</body>
<script>
console.log(window.x.attributes)
</script>

可以看到img标签完整的出现了,这种是利用的删除无用标签,你想删除就删除,我满足你的规则,我在其它地方触发就可以了。但因为要满足可迭代对象的条件,因此<img>标签要写两个,
同时我们要在form里面进行触发,可以加一个自动聚焦的属性:tabindex
最后修改为
<form tabindex=1 onfoucus=“alert(1)” autofocus><input name=attributes><input name=attributes>
但因为时自动聚焦,弹窗会一直出现,我们可以让它执行一次后自动删除
<form tabindex=1 onfoucus="alert(1);this.remove.Attribute('onfocus')" autofocus><input name=attributes><input name=attributes>

另一种不进循环的方式:
使用两个svg标签
原因:
循环执行前就执行恶意属性,若使用一个则在循环结束时也并不会出现弹窗
<svg><svg/οnlοad=alert(1)>

边栏推荐
猜你喜欢
随机推荐
[NCTF2019]SQLi-1||SQL注入
优秀的 Verilog/FPGA开源项目总结及交流群
UPC2022暑期个人训练赛第23场(Credit Card Payment)
并发模型和I/O模型介绍
和睦家私有化后换帅:新风天域吴启楠任CEO 李碧菁靠边站
PAT甲级 1051 Pop Sequence
Latex-查看预收录在arXiv.org上论文的TeX源文件
投资的思考
线上交流丨稀疏神经网络:实践和理论(青源Talk第23期 汪张扬)
Flink / Scala - 使用 CountWindow 实现按条数触发窗口
怎么做postgrsql主备?
apache-activemq-5.14.1
微信小程序--》条件与列表渲染以及WXSS模板样式
一套开源的可快速搭建自己的物联网/智能家居系统源码
Violence recursion to dynamic programming 08 (pony go chess)
“蔚来杯“2022牛客暑期多校训练营4 补题题解(N)
1686. 石子游戏 VI
.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)
为什么要使用 playwright 做浏览器自动化测试?
The cornerstone of high concurrency: multithreading, daemon threading, thread safety, thread synchronization, mutual exclusion lock, all in one article!...









