赞
踩
漏洞原理,看这里哇
文章所用的xss-labs靶场的项目地址:https://github.com/do0dl3/xss-labs
然后开始通关
仔细观察三处箭头,可以发现它是向服务器提交了一个name参数,值为“test”,从页面
回显来看,将neme参数的值显示在了页面上,并且显示了name参数值的字符长度
接下来,查看源码
从这里我们可以看到它将name的参数值,插入到了<h2>
</h2>
标签之间
那么 就很明显,这一关主要就是考察反射型xss
但是由于不知道服务器端对于提交的敏感字符有没有过滤,所以这里直接在name参数
中赋值一个简单的弹窗来进行测试。
操作如下:
将name参数重新赋值:<script>alert('xss')</script>
我们可以看到用于js弹窗的代码顺利执行了
那么这段代码在网页中如何显示的 呢
可以看到服务器是将我们的恶意代码原封不动的返回了,浏览器才能成功弹窗
可以去看看服务器端的level1.php
如何对参数操作的
从源码可以看出,箭头1将从服务器获得的name参数的值赋值给str变量,箭头二又将
str变量直接插入到<h2> </h2>
标签之间
因此服务器并没有对name参数的值进行严格的管理,并且这个值还是用户可控的,所
以存在反射型xss漏洞
点击确定可以来到第二关
从url入手开始看,依然是get方式传递参数,应该还是反射型xss
只不过这一关加入了“输入框”和“搜索”
接下来查看网页源码
从源码来看,它的功能就是通过点击“搜索”按钮,将输入框内的内容以get方式提交给
服务器上的level2.php
经过服务器的动态处理之后又会将参数keyword的值插入到<h2> </h2>
标签之中以及
添加到<input>
标签中的value属性的值内。
尝试使用上一关的恶意语句操作进行弹窗
但是报错了
我们继续查看网页源码
可以看到在<h2> </h2>
标签之中的恶意代码被编码了。
其中<
和>
都被编码成了html字符实体。
猜测在服务器端用htmlspecialchars()函数
对keyword参数的值进行了处理。
接着往下看可以看到插入到value参数值中的恶意代码并没有被编码而是直接原样返回
但是问题是这里的js代码在标签属性值中,浏览器是无法执行的。
既然上面的恶意代码被编码了,那么只能从属性值中的恶意代码处进行突破了。
要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合就可以了。
将keyword的参数值重新赋值"><script>alert('xss')</script>//
左边的">去闭合原先的"
右边的//去注释原先的">
可以看到浏览器成功弹窗了,说明我们提交的恶意代码被浏览器执行了。
去服务器端看看level2.php
代码
箭头1处将get方式传递到服务器端的keyword参数的值赋给str变量。
在箭头2处是用htmlspecialchars()函数
对变量str进行处理之后显示到网页上。
在箭头3处却是直接将变量值插入到了<input>
标签的value属性值中
因为这里并没有对敏感字符进行编码和过滤,所以可以通过构造实现XSS攻击。
在输入框输入“test” 进行尝试一下
看看网页源码
与第二关相似
但是还不确定有没有敏感字符过滤,编码等操作
构造弹窗测试一下
报错了
继续看看网页源码
这两处都将<
和>
这样的敏感字符编码成了html字符实体。
猜测服务器端在这两处都用htmlspecialchars()
函数进行了处理。
去服务器端看看level3.php
代码
确认我们的猜测
这里可以通过<input>
标签的一些特殊事件来执行js代码
构造代码:level3.php?keyword='onfocus=javascript:alert('xss') > //&submit=搜索
发现没有直接弹窗,这是因为onfocus事件的特殊性造成的
onfocus 事件在对象获得焦点时发生。
onfocus 通常用于 <input>, <select>, 和<a>.
最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以
输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此
点击当前页面的输入框就可以完成弹框了。
这一关很明显还是用的get方式请求参数
并且该参数值在页面上有两处显示
上弹窗代码测试一下
输入框中与我们提交的参数值有出入,<
和>
没有了
看看网页源码
箭头1处直接将<
和>
编码转换了
箭头2处却是把<
和>
删除了
但是,事件触发却不需要使用这两个符号。
用上一关的代码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。