level 1
我们可以看到在payload中可以看到参数name,值为text,字符的长度为4,参数name的返回值会出现在界面上。
查看源代码
我们可以看到,参数name插入到了标签< h2>< /h2>中,可以得出这是反射型XSS漏洞。
什么是反射型XSS?简单来说,就是当用户在网站的地址栏输入URL,从服务端获取到数据时,网站页面会根据返回的信息而呈现不同的返回页面,如果这个时候恶意用户在页面中输入的数据不经过验证且不经过超文本标记语言的编码就录入到脚本中,就会产生漏洞。
而且在源代码中我们还可以看到有一个关于窗口的语句,所以我们直接在name参数中赋值一个简单的弹窗来进行测试。即name=< script>alert(‘xss’)< /script>
我们可以看到js弹窗代码顺利执行了。这是因为服务器将我们的恶意代码原封不动的返回了,浏览器才能成功弹窗。(用view-source可以查看源码)
查看服务端的源码
我们可以看到服务器中参数name的值赋值给了str变量,并且此变量直接插入到了标签< h2>< /h2>之间,对参数name的值没有进行严格管理,所以存在反射型xss漏洞。
level 2
我们可以看到payload中有参数keyword,在界面中增加了输入框和搜索,同样有返回keyword的值和长度,所以应该是反射型XSS漏洞。
查看源码
从源码可以看到通过点击搜索通过get方式将输入框中的内容提交给level2.php,并且有与窗口有关的语句
查看level2.php源码
我们可以看到源码中将参数keyword的值插入了到了< h2>< /h2>标签中并且添加到了< input>标签中的value属性的值内。所以我们在输入框内输入恶意语句进行尝试。
我们发现报错了,查看源码
我们可以看到在< h2>< /h2>中恶意代码被编码成了html字符实体,这是因为在服务器端用htmlspecialchars()函数对keyword参数的值进行了处理。但是在value参数值中的恶意代码没有被编码,所以我们可以考虑从此处入手。因这里的js代码是在标签属性中的,浏览器无法执行,所以我们只需要将属性的引号和标签先闭合就可以执行了。即keyword=">< script>alert(‘xss’)< /script>//(">是闭合原先的",//是为了注释掉原先的">)
level 3
我们可以看到页面中只有一个输入框和搜索,payload长度也为0,我们输入‘111’进行测试
我们可以看到当输入‘111’之后页面返回与level 2类似,尝试在输入框输入恶意代码
报错了,查看源码
我们可以看不仅在< h2>< /h2>标签中的恶意代码被编码了,在< input>中的value值也被编码了,所以可能在这两处都用htmlspecialchars()函数进行了处理。查看level3.php源码
我们可以通过标签< input>的一些特殊时间来执行js代码。使用onfocus事件,该事件是在对象获得焦点时发生的,通常用于 < input>, < select>, 和< a>。即keyword='οnfοcus=javascript:alert(‘xss’) > //
发现此时没有弹窗出现,这是由于onfocus事件的特殊性造成的。当我们输入内容的时候此时就是输入框获得焦点的时候,所以此时输入框就会触发onfocus事件,即只要点击当前页面的输入框就可以完成弹框 了。
level 4
这一关看起来与前面两关都很相似,所以我们首先尝试在输入框中输入恶意代码
报错了,我们可以看到输入框中的<>这两个符号没有了,查看源码
我们可以看到标签< h2>< /h2>中的恶意代码被编码了,并且标签< input>中的value值的<>被删除了,查看level4.php的源代码
我们可以看到在源代码中这两个步骤对<>这两个符号进行了替代。
我们可以通过事件触发进行弹窗,因为事件触发不需要<>这两个符号。keyword="οnfοcus=javascript:alert(‘xss’)>//
同样通过点击输入框弹出弹窗
level 5
继续常规操作,先测试!
一如既往地报错啊,看看源码有啥问题。
我们可以看到标签< h2>< /h2>中的恶意代码被编码了,并且标签< input>中的value的值< scr_ipt>加了下划线。查看level5.php源码
从源码中我们可以看到不仅将< script>替换成了< scr_ipt>,还将on替换成了o_n,所以也不能用onfocus事件这种方法。那么我们尝试用其它标签来执行js代码。
采用链接的形式,即keyword="> <a href=javascript:alert(‘xss’) > xss< /a> //
这里就出现了名称为"xss"的链接形式。点击链接
level 6
与之前一样,这里直接尝试恶意代码
报错查看源码
与上一关一样,我们查看一下level6.php源码有什么不一样的地方。
这一关又增加了几个标签的替换,除了< script>、on以外又增加了src、data、herf在字符中间加入“_”,我们尝试一下能否通过大小写来进行绕过。即keyword=">< scRipt>alert(‘xss’)< /script>//
ps:
1.src字符是在< img>标签中的在js中如果src属性的值不正常或者无法访问到时就可以触发一个onerror事件来执行js代码。例如name=<img src=111 οnerrοr=alert(‘xss’)>。
2.data字符类似于对字符进行编码的一种设定。如果在实际情况中javascript、script等关键字被过滤掉了之后,可以用如下语句进行尝试data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=也可以达到同样的效果。与< script>alert(“xss”)</ script> 的作用是一样的。
level 7
尝试恶意代码
不出意外,报错了,我们看看源码。
可以看到在标签< h2>< /h2>的恶意代码被编码了,并且标签< input>中的value的值中< script>< /script>中的script被删除了。查看一下level 7.php源码
从源代码中,我们可以看到跟上一关不同的是,这一关将所有的字符都替换成空。
首先我们尝试一下可不可以通过大小写混写来进行绕过。
我们可以看到< scRipt>在标签< h2>中变成了< script>,在< input>中的value的值仍然被替换成空了。接下来我们尝试用双写关键字试试看能不能绕过。即keyword="oonnfocus=javascript:alert(‘xss’)//
双写关键字成功绕过。
level 8
我们发现这个页面上还有一个链接点击链接
发现什么都没有
我们输入111进行测试,查看源码
我们可以看到在输入框输入的值直接提交到了链接中
输入恶意代码
我们可以发现当提交到链接中时,< script>被替换成了< scr_ipt>,查看level9.php源码
我们可以看到跟之前一样对很多标签做了过滤,尝试大小写绕过。
我们可以发现用来闭合引号的引号也被编码了,所以onfocus事件也不能使用。我们尝试对js代码进行编码来进行绕过。
keyword=& #106;& #97;& #118;& #97;& #115;& #99;& #114;& #105;& #112;& #116;& #58;& #97;& #108;& #101;& #114;& #116;& #40;& #39;& #120;& #115;& #115;& #39;& #41;
点击链接
level 9
跟上一关类似,我们先测试一下,输入恶意代码,查看源码
我们可以发现在链接的地方出现了:您的链接不合法字样,查看level9.php源码
我们可以看到在过滤的同时,还增加了新的判断。需要输入包含正常的url地址才能够添加到href属性值中,所以我们需要构造一个有正常url地址的恶意代码。
keyword=< script>alert(‘xss’)< /script>http://www.baidu.com
我们可以看到已经成功地插入到链接中了,但是标签中的字符加了_,并且也将用来闭合引号的引号编码了。所以我们跟上一关一样将js代码进行编码。
所以keyword=& #106;& #97;& #118;& #97;& #115;& #99;& #114;& #105;& #112;& #116;& #58;& #97;& #108;& #101;& #114;& #116;& #40;& #39;& #120;& #115;& #115;& #39;& #41;//http://www.baidu.com("//"是为了注释掉http://www.baidu.com)
level 10
我们可以看到与之前几关不同的是 没有输入框了,直接在url上进行get传参,输入恶意代码。
我们可以看到除了在标签< h2>的恶意代码被编码之外,还有隐藏的表单,我们可以尝试改变它的状态看看可以利用哪一个参数来进行绕过。
令keyword=t_link=" type=“text”&t_history=" type=“text”&t_sort=" type=“text”
我们可以看到有一个表单的状态可以发生改变,那么就有一个 参数的value可以发生改变,查看源码找到是哪个参数
可以看到是参数t_sort,我们通过改变参数t_sort的值进行绕过。即keyword=< script>alert(“xss”)</ script>&t_sort=" type=“text” οnclick="alert(‘xss’)
onclicke事件会在元素被点击时发生。
所以点击表单即可