第六关:
看到第六关的页面:
我们输入一个字符看看页面的处理结果
可以看到跟前面的没什么区别,都是一个在
<h2>
标签内,一个在value属性值中。
接着提交
<script>alert(‘xss’)</script>
看看服务器端做了什么处理
可以看到上面的是将<、>进行编码了,而下面一个则是在script字符中插入_破坏语义
我们尝试进行触发尝试
http://192.168.89.139/xss/level6.php?keyword=' onclik=''alert('xss')
可以看到在on字符之间也插入了_来防止XSS的产生
这就有点过分了,还有什么办法能够成功执行js代码呐?
我们可以试试大小写混写来尝试能不能绕过。因为这里没有对<、>进行过滤,但是对script、on、href这样的字符应该是进行了字符替换。所以这里尝试构造如下语句
http://192.168.89.139/xss/level6.php?keyword="> <a hREF="javascript:alert('xss')">xss</a>//&submit=搜索
可以看到这一次点击页面响应中超链接成功弹窗了。这里值得一提的是因为我们改动的是标签中的href属性的大小写,而在html中对大小写是不敏感的。因此在浏览器端我们的恶意代码才能成功执行。
接着我们看看源文件的代码是怎样的
从源码来看服务器端做的防护措施比我们想象的要多得多
第七关:
看下第七关页面
我们用
<script>alert(‘xss’)</script
>进行测试
我们查看网页代码
可以看到上面的依然是进行编码处理,但是下面的则是把script字符直接删除了。接着再试试事件触发
http://192.168.89.139/xss/level7.php?keyword='' οnfοcus=javascript:alert('xss') > //&submit=搜索
以看到onfocus事件直接把on字符删除了,javascript中的script字符也被删除了。如果是这样的话就不需要再继续尝试新的标签了,看看前面的大小写能不能绕过
我们再尝试下双写绕过
查看网页源码发现通过双写关键字被服务器端删除之后成功保留了我们原本想要的恶意代码。在点击网页中的输入框后也确实能够成功弹窗
我们看下源代码
可以看到因为在箭头1处首先是对参数值转换成了小写,所以上一关的大小写绕过才没能奏效。而在箭头2处又将基本的关键字都删除了。但是这里的字符替换操作仅仅执行了一次,因为比如在javascrscriptipt中在匹配的时候仅仅匹配到了一个script字符,所以也就只是将中间该字符删除而并不会接着再对结果字符串进行同样的操作了
第八关
我们看到第八关的页面比以往差距还是挺大的
查看网页代码
以看到提交的参数值一个会插入到标签的value属性值中,一个会插入到下方
<a>
标签的href属性值中我们接着测试
<script>alert(‘xss’)</script>
可以看到在value属性值中的参数值被编码成了字符实体,在href属性值中script字符被插入了_字符破坏语义。
我们用之前的触发事件
http://192.168.89.139/xss/level8.php?keyword=" onfocus=javascript:alert(‘xss’)>\\&submit=添加友情链接
也没能幸免
我们在尝试大小写绕过
http://192.168.89.139/xss/level8.php?keyword=javaSCRIPt:alert(‘xss’)&submit=添加友情链接
还是不行,我们也不用进行双写绕过了,因为没有对关键字删除
有了之前的sql注入的经验,我们尝试编码
查看源代码
从箭头1处可以看到对参数值做了小写处理,在箭头2处对常见的关键字做了过滤处理,在箭头3处还将用来起闭合作用的引号做了字符实体替换
第九关
看下页面信息
页面的功能看起来跟上一关没有区别
一脸懵逼搞不清楚,那就构造语句来测试看看
不起作用,我们尝试触发条件
虽然关键字这些是没有过滤,但是闭合的引号被编码了,而且href属性值依然没有变化。
既然这里说链接不合法那么我们就提交一个合法的链接看看效果
可以看到这一次就正常了,猜测这里可能对url地址做了匹配
我们可以构造如下语句进行测试
http://192.168.89.139/xss/level9.php?keyword=javascript:alert('xss')http://www.baidu.com
可以看到语句虽然显示在了href属性值中,但是javascript字符被插入了_。
我们对关键字进行编码试试看
第10关
我们看下第十关页面
这一关和前面几关有所差异没有输入框,我们看下网页代码
代码中有个隐藏的表单,其中含有t_link、t_history、t_sort这样三个隐藏的标签。
既然只有一个显示位而且参数值是插入在
<h2>
标签之中的,那么就用之前的方法先测试一下
关键字符被字符编码了
既然这里有三个
<input>
标签的话,也就意味着是三个参数。那么看看能不能从此处下手
http://192.168.89.139/xss/level10.php?keyword=<script>alert('xss')</script>&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"
从页面响应来看,有一个
<input>
标签的状态可以被改变。这个标签就是名为t_sort的
<input>
标签,之前都是隐藏状态,但是通过构造参数响应发现只有它里面的值被改变了。因此可以从该标签进行突破,尝试能不能注入恶意代码进行弹窗
http://192.168.89.139/xss/level10.php?keyword=<script>alert('xss')</script>&t_sort=" type="text" οnclick="alert('xss')
查看源代码:
服务器端在箭头1处说明是接收t_sort参数值的。然后在箭头2处会删除t_sort参数值中的<、>。从这里来看的话这一关就只能是将js代码插入到标签的属性值中来执行而不能通过闭合
<input>
标签引入新的标签来触发XSS了
本文章为自己搭建实验环境做过的,参考过一些资料,希望对你有帮助