xss-labs挑战(一)

前言:前一段时间我们已经研究了sqli-labs-master,现在我们挑战xss-labs,关于xss漏洞攻击我之前已经博客已经做了简单的讲解。我们开始吧

xss-labs的安装非常简单,由于我们之前有了环境直接把xss-labs的文件放在网站文件夹下
xss-labs挑战(一)_第1张图片
第一关
xss-labs挑战(一)_第2张图片
我们仔细观察一下url地址的构造就可以发现这里是向服务器提交了一个值为”test”的name参数。并且从页面回显可以看到不仅将name参数的值显示在了页面当中
我们看下网页源代码:
xss-labs挑战(一)_第3张图片从网页源码来看这里是将name参数的值直接插入到了

标签之中。那么这样看来这一关主要就是考察反射型XSS咯
所以这里直接在name参数中赋值一个简单的弹窗来进行测试。操作如下:
xss-labs挑战(一)_第4张图片
可以看到服务器是将我们提交的恶意代码原封不动的返回了,因此浏览器才能成功的弹窗
我们看下服务器源代码:
xss-labs挑战(一)_第5张图片红色箭头1处是服务器将通过get方式传递过来的name参数的值赋给了str变量,然后在箭头2处又将str变量直接插入在了

标签之中。因此服务器并没有对name参数的值进行严格处理,并且这个参数的值又是用户可控的,所以此处存在了反射型的XSS漏洞
小总结:

1、php的代码仅仅在服务器端解析执行
2、服务器将执行完成的最终网页代码(不包含源文件中属于php语言的 部分)返回给浏览器,然后浏览器对网页代码进行解释显示
3、在浏览器端查看源代码是无法看到对参数进行具体操作的php代码,只能看到结果

第二关
在第一关成功弹窗之后,点击“确定”按钮页面就会自动跳转到下一关的页面
xss-labs挑战(一)_第6张图片
从url地址来看,依然是get方式传递参数,所以猜测考察的还是反射型XSS
我们看下网页源代码:
xss-labs挑战(一)_第7张图片
从源码来看该页面大致的功能就是通过点击“搜索”按钮可以将填入输入框中的内容以get方式提交给服务器上的level2.php。经过服务器的动态处理之后又会将参数keyword的值插入到

标签之中以及添加到标签中的value属性的值内
我们用代码进行测试



但是并没有弹窗出现,我们在看下网页源代码:
xss-labs挑战(一)_第8张图片
可以看到在

标签之中的恶意代码被编码了。其中<、>都被编码成了html字符实体
看可以看到插入到value参数值中的恶意代码并没有被编码而是直接原样返回的。但是问题是这里的js代码在标签属性值中,浏览器是无法执行的

我们看下服务器源代码:
xss-labs挑战(一)_第9张图片
由上图可知

既然上面的恶意代码被编码了,那么只能从属性值中的恶意代码处进行突破了。要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合

http://192.168.89.139/xss/level2.php?keyword="> //

xss-labs挑战(一)_第10张图片
可以看到浏览器成功弹窗了,说明我们提交的恶意代码被浏览器执行了
在我们构造的恶意代码中最后的//是为了将后面的">注释掉。

第三关:
xss-labs挑战(一)_第11张图片
我们先输入test进行尝试
xss-labs挑战(一)_第12张图片
从这里我们并没有看出什么问题,继续看网页代码
xss-labs挑战(一)_第13张图片
看起来跟第二关时没什么区别,所以还无法确定在服务器端是否对敏感字符进行了过滤、编码等操作

http://192.168.89.139/xss/level3.php?keyword=&submit=搜索

但是浏览器并没有成功弹窗
xss-labs挑战(一)_第14张图片
原来这两处都将<、>这样的敏感字符编码成了html字符实体。猜测服务器端在这两处都用htmlspecialchars()函数进行了处理。既然关键的<、>字符被编码了
我也查阅了一些资料,这里可以通过标签的一些特殊事件来执行js代码

http://192.168.89.139/xss/level3.php?keyword='οnfοcus=javascript:alert('xss') > //&submit=搜索

xss-labs挑战(一)_第15张图片
发现并没有弹窗
onfocus是javascript中在对象获得焦点时发生的事件,最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此点击当前页面的输入框就可以完成弹框了

xss-labs挑战(一)_第16张图片
为了验证我们的猜想我们看下源代码:
xss-labs挑战(一)_第17张图片
可以看到服务器端在页面显示的位置对参数值都用htmlspecialchars()函数进行处理了

第四关
显示页面如下
xss-labs挑战(一)_第18张图片
可以看到这一关还是采用get方式传递参数,我们依然用弹窗代码进行测试
xss-labs挑战(一)_第19张图片
可以看到浏览器并没有成功弹窗,第一个显示位直接将参数值显示出来了,但是在输入框中显示却跟我们提交的参数值有点出入

我们还是看看网页代码
xss-labs挑战(一)_第20张图片
从上图不难看出在箭头处将参数值中的<、>字符进行编码显示了,在箭头2处直接将<、>字符给删除了
用上一关的事件触发弹窗代码测试看看,因为这里只是删除了<、>符号,事件触发却不需要使用这两个符号

http://192.168.89.139/xss/level4.php?keyword="οnfοcus=javascript:alert('xss') "

xss-labs挑战(一)_第21张图片
我最后还是看下源代码
xss-labs挑战(一)_第22张图片
第五关
看到第五关页面
xss-labs挑战(一)_第23张图片
同之前一样,这一关看起来还是反射型的XSS。但是由于不知道服务器端到底做了什么样的操作,所以用弹窗代码测试
xss-labs挑战(一)_第24张图片
我们还是看网页代码
xss-labs挑战(一)_第25张图片
从图中看到在第一处显示位应该还是被htmlspecialchars()函数处理过才返回到浏览器显示的。而在第二处显示位可以看到在第一个

你可能感兴趣的:(xss-labs挑战(一))