前言:前一段时间我们已经研究了sqli-labs-master,现在我们挑战xss-labs,关于xss漏洞攻击我之前已经博客已经做了简单的讲解。我们开始吧
xss-labs的安装非常简单,由于我们之前有了环境直接把xss-labs的文件放在网站文件夹下
第一关
我们仔细观察一下url地址的构造就可以发现这里是向服务器提交了一个值为”test”的name参数。并且从页面回显可以看到不仅将name参数的值显示在了页面当中
我们看下网页源代码:
从网页源码来看这里是将name参数的值直接插入到了标签之中。那么这样看来这一关主要就是考察反射型XSS咯
所以这里直接在name参数中赋值一个简单的弹窗来进行测试。操作如下:
可以看到服务器是将我们提交的恶意代码原封不动的返回了,因此浏览器才能成功的弹窗
我们看下服务器源代码:
红色箭头1处是服务器将通过get方式传递过来的name参数的值赋给了str变量,然后在箭头2处又将str变量直接插入在了标签之中。因此服务器并没有对name参数的值进行严格处理,并且这个参数的值又是用户可控的,所以此处存在了反射型的XSS漏洞
小总结:
1、php的代码仅仅在服务器端解析执行
2、服务器将执行完成的最终网页代码(不包含源文件中属于php语言的 部分)返回给浏览器,然后浏览器对网页代码进行解释显示
3、在浏览器端查看源代码是无法看到对参数进行具体操作的php代码,只能看到结果
第二关
在第一关成功弹窗之后,点击“确定”按钮页面就会自动跳转到下一关的页面
从url地址来看,依然是get方式传递参数,所以猜测考察的还是反射型XSS
我们看下网页源代码:
从源码来看该页面大致的功能就是通过点击“搜索”按钮可以将填入输入框中的内容以get方式提交给服务器上的level2.php。经过服务器的动态处理之后又会将参数keyword的值插入到
标签之中的恶意代码被编码了。其中<、>都被编码成了html字符实体
既然上面的恶意代码被编码了,那么只能从属性值中的恶意代码处进行突破了。要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合
http://192.168.89.139/xss/level2.php?keyword="> //
可以看到浏览器成功弹窗了,说明我们提交的恶意代码被浏览器执行了
在我们构造的恶意代码中最后的//是为了将后面的">注释掉。
第三关:
我们先输入test进行尝试
从这里我们并没有看出什么问题,继续看网页代码
看起来跟第二关时没什么区别,所以还无法确定在服务器端是否对敏感字符进行了过滤、编码等操作
http://192.168.89.139/xss/level3.php?keyword=&submit=搜索
但是浏览器并没有成功弹窗
原来这两处都将<、>这样的敏感字符编码成了html字符实体。猜测服务器端在这两处都用htmlspecialchars()函数进行了处理。既然关键的<、>字符被编码了
我也查阅了一些资料,这里可以通过标签的一些特殊事件来执行js代码
http://192.168.89.139/xss/level3.php?keyword='οnfοcus=javascript:alert('xss') > //&submit=搜索
发现并没有弹窗
onfocus是javascript中在对象获得焦点时发生的事件,最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此点击当前页面的输入框就可以完成弹框了
为了验证我们的猜想我们看下源代码:
可以看到服务器端在页面显示的位置对参数值都用htmlspecialchars()函数进行处理了
第四关
显示页面如下
可以看到这一关还是采用get方式传递参数,我们依然用弹窗代码进行测试
可以看到浏览器并没有成功弹窗,第一个显示位直接将参数值显示出来了,但是在输入框中显示却跟我们提交的参数值有点出入
我们还是看看网页代码
从上图不难看出在箭头处将参数值中的<、>字符进行编码显示了,在箭头2处直接将<、>字符给删除了
用上一关的事件触发弹窗代码测试看看,因为这里只是删除了<、>符号,事件触发却不需要使用这两个符号
http://192.168.89.139/xss/level4.php?keyword="οnfοcus=javascript:alert('xss') "
我最后还是看下源代码
第五关
看到第五关页面
同之前一样,这一关看起来还是反射型的XSS。但是由于不知道服务器端到底做了什么样的操作,所以用弹窗代码测试
我们还是看网页代码
从图中看到在第一处显示位应该还是被htmlspecialchars()函数处理过才返回到浏览器显示的。而在第二处显示位可以看到在第一个字符中插入了一个_符号。
从这么来看的话,之前通过事件触发的代码应该依然可以奏效,测试一下看看
http://192.168.89.139/xss/level5.phpkeyword="οnfοcus=javascript:alert('xss') "
但是这一次并没有成功触发弹窗。看看网页源码
果然没有那么简单,这里居然对onfocus这一类的事件字符也进行了防范
从刚才的响应来看提交的javascript字符并没有被过滤或者转义等,所以此处既然无法通过标签或触发事件来执行js代码的话,那么可以换一个标签来执行js代码。我们可以构造如下
我们点击xss字样链接
最后看下源代码
从源码来看,服务器端先是将传递过来的参数值转换为全小写之后赋值给变量str,接着就是通过str_replace()函数来破坏变量值中的敏感字符的语义。最后在箭头4处通过htmlspecialchars()函数处理之后显示到网页上,在箭头5处直接将进行敏感字符处理之后的变量值插入到标签的value属性值中。
本文章为自己搭建实验环境做过的,参考过一些资料,希望对你有帮助