XSS训练

最近发现了几个专门训练XSS的网站,我在这方面还是弱项,决定把这几个网站的题都刷一遍,然后写一写WP,也算是增强记忆和理解吧,我找的几个网站如下:

https://xss.haozi.me/#/0x04

http://xss-quiz.int21h.jp/

首先我会记忆一下第一个网站的题目:

前三题都较简单,从第四题说起:


0x03

我们看一下网站代码,发现他是过滤了 圆括号。

绕过这个过滤,我们可以直接使用反引号:

关于反引号在XSS中的最新运用,大家可以参考下面的一片文章:

 


0x04

这道题,我们可以看到我们将 圆括号和 反引号都过滤了,也就是我们不能运用模板字符串了。

我们想到,我们是否可以使用  unicode 编码,来代替 圆括号。 这种思路没错,但是我们要遇到一个问题就是 unicode 编码怎么才会被转码实现了,如果只是正常的 html编码, unicode编码是不会有任何用的。

这里我们可以在了解一下 <svg>  这个标签,这是一个外部标签,可以显示文字,字符及其他数据。 而  <svg> 有一个 很重要的特性,便是 他可以和  xml 一样将  unicode 编码转码进行执行,也就是我们可以通过这个标签执行 unicode编码,关于这个标签的具体介绍,我们可以查看下面这篇资料:

https://www.hackersb.cn/hacker/85.html

又或者可以H5中iframe的特点,因为h5中iframe的srcdoc属性,srcdoc里的代码会作为iframe中的内容显示出来,srcdoc中可以直接去写转译后的html片段。

<iframe srcdoc="<script>alert&#40;1&#41;</script>">

0x05

这道题,我们过滤了  -->, 这是一个注释的结尾符, 但是我们又急需将这个网页中的 注释符 赶快闭合。

这里,我们可以知道 注释符的闭合符有两种:

  • <!-- xxx -->
  • <!- xxx --!>

所以,我们可以采用第二种注释符


0x06

这道题过滤了  auto字符串 或者  on或空开头到=之间的字符串  或者 > 。

所以,这里我们想直接 注入  <script> </script>是不成功的,因为,我们的 >会被过滤掉。

这里,我们看到在input标签注入,我么就可以使用  onmousemove这个属性,这个属性是当鼠标移到input这个输入框时,就会被执行的属性。 我们可以注入:  οnmοusemοve=alert(1)

但是,我们这里还有一个问题,就是 onmousemove 这个注入,是以on开头且中间有=,所以我们最终的输入会被正则过滤如下:

onmosemove=  这段字符串会被过滤,所以这里我们需要想一些办法。

我们再来仔细查看上面的正则表达式: 

on.*=

这个过滤,中间有 小数点:

那我们就知道,它不匹配换行符,所以如果我们在  onmousemove = alert(1)之间使用换行符,那么这个正则表达式就会匹配无法成功。

我们可以成功绕过


0x07

这道题主要是对  <  和  >进行了过滤,也就是我们不能同时输入  <  和  >。

所以,这里我们可以运用 浏览器的容错性,当我们少输入一个  >时,浏览器仍然会解释执行我们输入的标签语言。

所以,这里我们只需要考虑 输入一个 单标签 执行语句。

这里,大家可以参考下面这篇博文,我在里面发现了很多 XSS的payload,大家可以尽情测试:

https://wps2015.org/drops/drops/Bypass%20xss%E8%BF%87%E6%BB%A4%E7%9A%84%E6%B5%8B%E8%AF%95%E6%96%B9%E6%B3%95.html

然后,我测试成功了两个标签:


0x08

这道题,主要是对  </style> 这个字符串进行了过滤,但是我们仍然可以采用空格或者换行的方法进行绕过。


0x09

这道题,我们的输入需要含有这个网址,然后,我们需要闭合一个 <script>标签,然后注入我们的代码。


0x0B

题目我们可以看到,就是对我们的输入转为了大写。

但是,JS是严格区分大小写的,html是不区分的。

所以,这道题我们有两种思路:一是寻找JS中不区分大写的部分;二是使用 html标签

第一种:JS中的 src 的值是不区分大小写的,所以我们可以使用如下:

第二种,我们可以使用html标签,运用其解析unicode编码执行,如 img, audio, 


0x0C

这道题,其实就是在上一题的基础上对 script进行了过滤,所以我们可以使用上一题的第二种方法绕过


0x0D

这道题的过滤,主要是对 <  /  "  '进行了过滤。

而我们也需要对注释进行绕过,对于前面的注释,我们只需要一个换行符即可,但是对于后面的 ‘) 我不太明白 为什么  -->  可以进行绕过。


0x0E

这道题学到新知识了,我们看这个过滤,对以  <  开头的字符串进行过滤,那么基本上所有的 标签都会被过滤。

但是,我们发现了一个新字符: ſ 。 它大写之后会被转为S,然而他却不是字母。

那么,我们的过滤方法如下:


0x0F

这里我们可以看到这个过滤,是将一些字符进行了转码,但是我们的 ’  和  / 都是被转为了 unicode编码,所以这个实体编码仍然可以执行。所以,我们目前的任务就是先闭合  console.error(''),仍然执行JS。


0x10

这道题,不用多说,直接闭合,然后写入 alert()


0x11

这道题过滤了相当多的符号。但是我们的思路,还是可以放到闭合符号再注入。

但是,由于我对JS的代码的了解不是太多,所以,导致这道题的闭合方法,我也有点不清楚,我贴一下别人的解决方法:


0x12

这道题由于将 "  替换成 \\",  但是在实际上只会输出  \" 。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值