xss在线练习平台地址:http://test.xss.tv/

xss小游戏:https://pan.baidu.com/s/128cEiVn7g-8f24-zt49Zuw 提取码:8d05
可以搭建在本地上,把文件放在WWW目录下,需要php+mysql环境(把PHPstudy打开就行了)
Level 1

1 |
|
第一题看下源码,get方式接受没有对输入进行任何过滤,所以弹窗很简单,构造payload:
1 | <script>alert(1)</script>等 |

Level 2

1 | <?php |
第二关可以看出有一个输入框,输入内容以get方式接受为$str变量,但是下面有一个htmlspecialchars()函数对$str做了处理,这个函数作用就是把预定义的字符转换为 HTML 实体,也就是说会过滤尖括号。但这题上面被过滤而下面input标签没有过滤,所以这时可以闭合掉双引号,有两种方法可以触发弹窗
(1)在input里面,添加事件,payload:
1 | " onmouseover="alert(1) //移动鼠标触发 |
1 | " onclick="alert(1) //点击输入框触发 |
1 | " onfocus="alert(1) //点击输入框触发 |
(2)将input标签闭合,payload:
1 | "><script>alert(1)</script> //最简单的双引号闭合 |
1 | "><img src="1" onerror="alert(1)"> //使用<img>标签,src所指路径不存在图片则弹窗 |
1 | "><a href="javascript:alert(1)">1</a> //使用<a>标签,点击生成的链接触发弹窗 |
1 | <a href="" onmouseover="alert(1)">1</a> //移动鼠标至框内弹窗 |

Level 3

1 |
|
分析源码发现两个地方都进行了过滤,所以尖括号不能使用,不过第二关中第一个方法应该还是可以的,在input标签中添加事件,但是这关中value属性使用的单引号所以要闭合单引号,把第二关双引号换成单引号就行了,payload:
1 | ' onclick='alert(1)等 |

Level 4

1 | <h1 align=center>欢迎来到level4</h1> |
分析源码第一处还是转义,第二处用了str_replace()函数处理,这个函数的作用是替换,<、>被替换成了空格不能闭合标签,所以与上一关是类似的添加事件就行了,不过这关value属性是双引号,payload:
1 | " onclick="alert(1)等 |

Level 5

1 | <h1 align=center>欢迎来到level5</h1> |
这一关第一处进行转义,第二处有三步处理分别是strtolower()函数,把输入内容都转化为小写,所以不能用大写绕过,还有str_replace()函数,把<script和on替换成了<scr_ipt和o_n,所以不能闭合标签也不能用js事件触发了,但是替换的是<script而script不会被替换所以javascript是可以的并且这次没有过滤尖括号,payload:
1 | "><a href="javascript:alert(1)">1</a> |

Level 6

1 | <h1 align=center>欢迎来到level6</h1> |
这一关过滤了很多字符,on、src、data、href、<script都被替换了,但是没有strtolower()函数没有对大小写进行过滤,所以可以用大写绕过,payload:
1 | "> <Script>alert(1)</script>、" Onclick="alert(1) 等等 |

Level 7

1 | <h1 align=center>欢迎来到level7</h1> |
于上一关不同之处是字符都被替换成了空格还多了strtolower()函数,所以这一关可以使用双写绕过,比如oonn,中间的on会被替换成空格,就变成了on。payload:
1 | " oonnclick=alert(1)>、"><scscriptript>alert(1)</scscriptript>等 |

Level 8

1 | <h1 align=center>欢迎来到level8</h1> |
分析源码,这一关还是替换了很多字符,也有strtolower()函数,而且“也被编码了,而尖括号,单引号,#、%等符号没有被过滤。看这一关后面有个添加友情链接,从源码看出需要添加链接后再点击友情链接才能弹窗,所以要用javascript绕过。而script被过滤了所以要用URL编码绕过,就是把javascript中一个字母进行编码,例r换成r ;就变成了javascr ;ipt,HTML字符实体转换:https://www.qqxiuzi.cn/bianma/zifushiti.php ,payload:
1 | javascript:alert(1) |

Level 9

1 |
|
比上一关多了一个if-else判断句,if中有个strpos()函数,这个函数原型是strpos(string,find,start)第一个参数string是必须的,规定了要搜索的字符串,第二个参数find是必须的,规定了要查找的字符串,第三个参数start是可选的,规定在何处开始搜索。
多的这部分就是对str7进行搜索,要找字符串 http:// ,所以if语句就是如果str7中没有要找的字符串,就执行if语句,如果找到了就会返回效应的位置比如2,就不会等于false,就可以绕过。payload:
1 | javascript:alert(1)//http:// |
注:要用单行注释符//把后边的http://注释掉,这里是在javascript伪协议里面,属于js范畴,所以单行注释符是可以使用的。

Level 10

1 |
|
分析源码,这一关需要两个参数keyword和t_sort,尖括号<>都被转换成空,还有三个隐藏的输入框,参数t_sort就在一个hidden属性的input标签中,所以可以从隐藏的输入框入手,把type改成显示的,payload:
1 | keyword=test&t_sort=" type="text" onclick="alert(1)等 |

Level 11、12、13
这三关是同样的东西,需要抓包改东西
1 |
|
11、12关的源码只有第13行不同,分别是
1 | <input name="t_ref" value="'.$str33.'" type="hidden"> |
1 | <input name="t_ua" value="'.$str33.'" type="hidden"> |
13关第5行变成了
1 | $str11=$_COOKIE["user"]; |
13行是
1 | <input name="t_cook" value="'.$str33.'" type="hidden"> |
其他都是一样的,其中$str11=$_SERVER[‘HTTP_REFERER’];这行代码说明11、12关考察的是http头部的xss注入,13关是cookie类型的xss注入,都需要进行抓包,可以使用burpsuite来抓。
11关是改Referer,12关改User-Agent,13关改cookie,payload(三关一样):
1 | " type="text" onclick="alert(1) |
11关


12关


13关


Level 14
这关看别人wp说的是通过修改图片的exif信息,造成解析图片exif触发XSS,利用工具推荐exiftool。但都没有这关的解析。这题跳过
Level 15

1 |
|
分析代码,ng-include有包含文件的意思,也就相当于php里面的include,所以可以包含第一关的页面,payload:
1 | src='level1.php?name=<img src=1 onerror=alert(1)>' |

Level 16

1 |
|
分析源码,有strtolower()函数不能大小写绕过,script、/、 、都被转换成了 ;,这时可以用其他符号绕过,比如%0a(换行)、%0d(回车)等,payload:
1 | <img%0a%0dsrc=x%0a%0donerror=alert(1)> |

Level 17、18
17关
1 |
|
18关
1 |
|
这两关是一个类型,看的其他人的wp说的放了个swf在页面但不是flash xss,只要在arg02后面加上onmouseover事件就行了,payload(两关一样):
1 | arg01=a&arg02=b onmouseover=alert(1) |
Level 19、20
这两关考察的就是flash xss了,这个现在不会还没学,找了找别人的wp这两关都没写,所以应该挺难的,不过找到了这两关的payload
19关
1 | http://localhost/xss_test/level19.php?arg01=version&arg02=<a href="javascript:alert(1)">123</a> |
20关
1 | http://localhost/xss_test/level20.php?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height |
参考文章:
https://www.cnblogs.com/bmjoker/p/9446472.html
https://www.jianshu.com/p/4e3a517bc4ea(他写了19关,不过我看不懂.......)