level 1
查看第一关的源码,发现get方法直接输入的内容,可以直接构造payload
payload:<script>alert(/xss/)</script>

level 2
第二关和第一关有点不一样的地方在于传入的字符串多了一个单引号,应该先闭合单引号。
payload:"><script>alert(/xss/)</script>

level 3
观察源码,多了htmlspecialchars()函数,这个函数会将<>等一些字符进行实体化,但是单引号不会。这里利用onmouseover事件。
payload:' onmouseover='alert(/xss/) '

level 4
观察第四关源码,多了一个str_replace()函数,简单介绍一下,str_replace("123","789","123456"),将参数三中内容为参数一的内容换为参数二,这里是将123456中的123换为789。本题是将<>替换为空。这里利用oninput事件和onchange事件。
payload:" onchange=alert`xss` " " oninput=alert`xss` // "

level 5
观察源码,先是strtolower()将所有字母转换成小写。然后str_replace()将<script和on进行处理,所以改用a标签。
payload:"><a href=javascript:alert(/xss/)>aaa</a>

level 6
观察源码,多了几个匹配的函数,过滤的多了几个,但是少了一个strtolower()函数,课大写绕过,只要改成大写都会绕过。
payload:"><a HREF=javaSCRipt:alert(/xss/)>

level 7
观察源码,这次先是strtolower()将所有字母转换成小写,然后再str_replace()函数将字符串正则匹配为空,双写绕过就行了,不止一种。
payload:"><scrscriptipt>alert(/xss/)</scrscriptipt>

level 8
观察源码,strtolower()和str_replace()增加了更多过滤的,这里可以考虑编码绕过,而且输入框输入的内容添加到了下面友情链接的a标签里面,实体编码绕过,随意编码一个字母就好。
payload:javascript:alert(/xss/)

level 9
观察源码,这次和第8关比多了一个对添加链接的判断。strpos()函数,strpos(string,find,start),从string中查找find表示的字符串,start表示开始的位置不是必须的参数。注释依旧可以被检测到,利用注释。
payload:javascript:alert(1)/*http://www.baidu.com*/


level 10
观察源码,表单传入一个东西给t_link,t_history,t_sort三个赋值,但是不知道哪个有意义,所以都试试,这里用一个新事件就好,onclick,点击触发,然后将type改为test然后点击一下。
payload:&t_sort=123 " onclick="alert(1)"

level 11
观察源码,这次多了一个$str11=$_SERVER['HTTP_REFERER'];多了一个接收http请求头的字符串,过滤<>之后,当做t_ref的值输出。依旧利用11关的onclick,先用burp抓包,然后修改referer的值为 123 " onclick="alert(1) " 然后回到浏览器修改type点击过关。
payload:123 " onclick="alert(1) "

level 12
观察源码,和11关类似,不过这次接受的改为了user agent,老方法操作。
payload:123 " onclick="alert(1) "

level 13
观察源码,这关变成了修改cookie。
payload:123 " onclick="alert(1) "

level 14
14关失效。
level 15
观察源码,这里有个ng-include,这个的作用是包含外部的html文件,但是这里一直没搞懂。


到这里也就结束了,后面的有时间再学吧,毕竟是笔记,所以先消化一下。
靶场小链接
链接:https://pan.baidu.com/s/17h9YjABoop3SzfNoM10IxA
提取码:hx70