前言:
仅作为练习,复盘
推荐html在线运行平台,弹窗标签可以在平台运行,看语句是否能正常弹窗
HTML/CSS/Javascript在线代码运行工具 | 菜鸟教程
内容:
第四关
打开一看,输入<script>alert(1)</script>,看过滤了什么,好像将尖括号过滤了,实体化了,
但是有<input>标签,不需要再重新输入标签,
利用<input>标签,重新构造onclick函数即可造成弹窗
答案为:"οnclick="alert(1)
在重新查看源代码,看过滤了什么
过滤了<>,相当于实体化编码了,
利用前提:存在<input>等危险标签,且双引号可以闭合name字段,重新构造onclick函数
总结思路:过滤了<>,但是还存在危险标签<input>,并且未过滤双引号,导致可以闭合value字段,所以可以构造onclick字段造成弹窗
第五关
我直接输入了:"οnclick="alert(1),看是否有变化,直接将on改成了o_n,我想再去看input标签是否有不含on的参数,结果发现没有,怎个回事,然后这关也是过滤了<>
我想出来的方法是大写绕过,这个好像是针对windows系统奏效的,然后双写绕过(这个肯定不行),想不出来其他方法了,就想到大小写绕过,但是有转化函数,将大写字母全转为小写字母了
突然想到了有个编码绕过,但是我不知道怎么用,其实我之前提前看过答案了,才知道有这个方法
无解,好像想错了,离谱,看下答案,ok
现在知道了将on替换成o_n,和过滤掉on没有很大区别了
替换的字符有,
on、ri替换为o_n、r_i
排错<script>标签,还有包含on的函数,寻找其他可用的标签以及函数
思路
1、on被替换成o_n,意味着input标签不能使用,因为input标签里的函数都带有on字段
2、寻找其他标签,只要不带有ri即可,
那就找<a>标签,其中里面的函数有不带on字段的,(有其他标签符合的也可以)
<a>标签常见的写法之一
<a href="javascript:alert(1)">test</a>
然后构造payload、闭合input标签,写入a标签
"><a href="javascript:alert(1)" >test</a>
总结思路
过滤了on、script,含有大小转换为小写的函数,不能大小写绕过,选择其他标签且不带有script、on字段即可
第六关
尝试写入各种payload,就是之前关卡的payload,发现
替换on、href、script,相当于过滤了on、href、script、src、data字段
基本上把所有的函数都给过滤了,就是说绕过也是在函数字段后面吧应该
绝招,看答案,算了问ai吧,没办法在看答案,问了ai好像给了我好多答案,但是我都没有试出来,有点意思,难道ai也不能解决,可能我问的方式也有问题吧。ok看答案
有点崩溃了,居然是大小写绕过,最朴素的大小写绕过啊,废了
想起来了,前几关有大写转小写的函数,但是这关没有
构造payload
"><a HREF="javascript:alert(1)" >test</a>
总结思路
虽然过滤了绝大部分xss弹窗需要的函数和标签,但是未检测大小写,所以可以用大小写进行绕过!!!!
思考问题:为什么大小写可以绕过这关?
根据我的思考,难道他是windows搭建的,对大小写不敏感?
得到的是否定,不对啊,他又不是用windows运行的,怎么和windows扯上关系了,那他的这段代码是前端运行的!!!
所以是和html和javascript这两个有关系,搜一下子,ok有一点理解,
例如:<script>alert(1)</script>,这段代码的其实分为两种,<script>标签其实html语言的一部分,就是html代码,但是alert(1)是javascript代码,就是js语言,其实就是script标签里面的语句,就是然个js语言来执行的,
但是不是所有的标签里面的语句都是用js引擎来解析的,例如:
<button οnclick="alert(1)"> 有onlick函数,能解析js
<script src="data:text/javascript,..."> 有src,能解析js
等
所以回到正题,本身标签是html代码,所以可以用大小写绕过(html不区分大小写),但是里面的函数是js执行,可就不能大小写绕过了(js严格区分大小写,)
第7关
先尝试注入各种payload,发现payload的其中像,script,on*,data等关键字全部删除了
见图,以下是删除的script,但是未过滤尖括号和双引号,还有其他办法
如果不是删除,是替换了,就没有其他办法了,
如果是删除的话,就需要检查他有没有进行二次删除,就是说他删了我一个script字段后,我剩余的字段可以拼接成script,也是可以造成弹窗
如:<scscriptript>,如果是将里面的script删除了,如果没有检验二次检查的话,我剩余的就可以组成一个完整的弹窗语句,<script>,
所以构造payload:"><scscriptript>alert(1)</scscriptript>
总结思路:
只是对敏感标签进行删除,但是没有进行二次验证,所以可以通过双写来绕过
如果是对敏感字符进行替换,也不能用双写来绕过了