【无标题】xss的深入以及绕过以及单双循环的问题复现

Ma Spaghet关卡的绕过
在这里插入图片描述
在这里插入图片描述
首先,通过查看代码分析得到,我们需要传一个somebody的参数,最终会输出在h2表标签里,
我们先看h2标签能否容纳script
在这里插入图片描述
很明显,容纳我们的script在这里插入图片描述
所以,我们先试试script能否成功
在这里插入图片描述
结果不符合预期,失败了
在这里插入图片描述
不同点在innerHTML,所以查询官方文档后发现该函数存在安全问题,所以该函数里的script不会被html5执行,
所以我们用img标签来绕过

在这里插入图片描述
在这里插入图片描述
成功绕过

Jeff关卡的绕过
在这里插入图片描述分析代码后,该关会接受一个jeff,且该关有eval,是一个可利用的点,因为eval会把字符串当成javascript代码执行,所以我们尝试用alert(1337)
在这里插入图片描述
结果失败了,仔细看eval里的输出,a没有执行成功,在看了老师的解题思路后,我也收到了启发,eval只会接一个参数,但会分情况,如果第二个参数是字符串,则eval只会接受一个参数,如果第二个参数是函数,eval则会接受该函数并执行,由于该eval和后面的组成了带标签的模板字符串,所以我们先用双引号闭合前面的,使得该成为第一个子字符串,而我们$后面的会先被模板字符串执行,并且用//将后面的引号注释掉
在这里插入图片描述
结果成功了

Ugandan Knuckles关卡的绕过
在这里插入图片描述
很明显,这一关过滤了我们的<>,所以这一关想要用<>闭合不太可能,所以我首先想到了image的这个解法,因为它就不会带<>
在这里插入图片描述
绕过失败,我还想到了点击事件绕过,但题目要求不用有用户交互,所以我想到了autofocus它会自动对交,在结合点击事件onfocus来尝试下
在这里插入图片描述
这里也是成功绕过了

Ricardo Milos关卡绕过
在这里插入图片描述
这一关,分析代码后,发现会自动将action提交在form表单里,所以我们只需再写一个action让其执行就行
在这里插入图片描述
Ah That’s Hawt关卡绕过
在这里插入图片描述
通过分析代码,发现他将我们的(,`,,)这四个符号给过滤了,且不能有用户的交互,并且还用了innerHTML,所以我们的script也就不用想了,我想到了将编码的办法,这是在url地址栏里,所以我们需要使用URLcode编码,但我们的html不认识URLcode编码,它认识的时我们的实体编码,所以我们需要二次编码,我们先进行实体编码,在进行URLcode编码,这样在地址栏里会识别我们的urlcode编码,然后解码为实体编码,从而进入到html里,而html认识实体编码,所以解码,然后我们来尝试下
在这里插入图片描述
成功绕过,当然这里用img标签也行,我也做了测试

Mafia关卡绕过
在这里插入图片描述
这一关,很明显过滤了我们很多的符号,但最后是输出在了eval里,那就想到了我们的30进制绕过法
在这里插入图片描述
OK,Boomer关卡的绕过
第一种绕过方式:
在这里插入图片描述
这一关,引用了我们的DOMPurify过滤机制,引入的1版本是2.0.7,通过查看可知,设置了白名单
第一种绕过方法,通过切换命名空间来绕过,遇到svg和math是可以切换到SVG和Mathml命名空间的,在html命名空间下,style只包含文本内容,但在svg和mathml命名空间下可以被解析,在html和mathml里会有文本集成点,遇到这些文本集成点就会切换到html命名空间,math mi,math mo,
math mn,math ms,- application/xhtml+xml`

  • svg foreignObject
  • svg desc
  • svg title这下就是文本集成点,但并不是所有的文本集成点的所有原有元素都会切换到html命名空间,mglyph和mailgnmark不会切换到html命名空间,且DOMPurify会使HTML解析两次,且解析两次后DOM树可能会不同,且html里的form不能嵌套使用,否则在解析时form会消失,那所以我们用form这一特点,结合HTML解析两次DOM树,以及mglyqh不会切回到html命名空间来绕过
    在这里插入图片描述
    成功绕过

第二种绕过方式,破环DOM树绕过
我们在html里有一个id或name元素时,js就可以直接用,并且由于作用域会一路找到window,且只需要用id同名的方法就可以拿到,可以用此方法的有四个标签,form,embed,img,object,我们可以设两个相同元素的id,然后通过id和name可以拿到它的第一个和第二个元素
所以,我们使用id=ok来破环DOM树,再配合a标签,以及2.0.7里白名单来绕过
在这里插入图片描述
单个循环问题的绕过复现
在这里插入图片描述

首先分析源代码后,发现它是做了一个一边循环出来元素一边删除的操作,而一边循环一边删除在执行时是有问题的
,以下面一个python小案例为示
在这里插入图片描述
可以看到最后打印出的a=[1,3,4,5,6]是符合我们的想法,因为2满足条件被删除了,但打印i却不一样,它把我们的3删除了,其实这并不是删除了,是解释器解析时没有发现3的存在,在执行时2时,因为2满足了条件,所以2就被删除了,由于2被删除了,3会向前移动一位,也就时它的索引变为了1(python索引默认从0开始),后面的都会向前移动一位,当执行第三次循环的时候,就会执行索引为2的那一位数字,也就是我们的第三位数字,而此时在第三位上的数字是4,所以由此一来,我们的数字3就“神奇的消失了”
那么以此类推,我们的这个单循环的问题,也就可以利用这样的方法来绕过,我们将我们要执行的元素放在我们的2,4位,这样删除的时候会删除我们1,3位的元素,我们的2,4位元素就可以得以保留,从而执行,然后就达到了绕过的效果在这里插入图片描述
双循环问题的绕过复现
在这里插入图片描述
首先分析代码,相较于单个循环,我们可以发现它会先将选中的值放在一个数组里,然后再去将这个数组里的东西删除
那现在我们就有两种思路,一种是别进循环,这样它就删不了我们的元素,或者进循环,但删的不是我们想留的元素
我的想法是后者,让其进入循环,但留下我们想要的元素,那要想进入循环,我们首先得是一个可迭代对象,因为for循环,循环的就是可迭代对象,这里将input双写形集合·进入到循环中,进入到循环中,我们的form表单也会进入,与此同时我们的form表达需要聚焦事件,而我们的form表单没有这个元素,所以我们使用tabindex聚焦事件,将其聚焦在input里,然后在使用点击事件onfocus在配合我们的autofocus自动聚焦,虽然我们的input属性被删除了,但input标签还在,还是可以用来聚焦,而用来触发的是form,form不会被删,所以就会执行,从而绕过
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值