1、什么是XSS
XSS***全称跨站脚本***,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
XSS***分成两类:
(1)、一类是来自内部的***,主要指的是利用程序自身的漏洞,构造跨站语句。
(2)、另一类则是来自外部的***,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。
如当我们要***一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。
XSS分为:存储型和反射型
存储型XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中。这种XSS比较危险,容易造成蠕虫,盗窃cookie(虽然还有种DOM型XSS 但是也还是包括在存储型XSS内)
反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容) 一般容易出现在搜索页面
开始我们的实验
Low级别
1、构造我们常用的payload:<scrpit>alert(1)</script>
获得弹框。不仅仅要做到***,分析一下原理
2、这里可以直接查看源码,点击右下角的view source。查看源码
源码里存在一个判断语句,arrary_key_exists()函数判断$_GET的值中是否存在“name”键名。并且$_GET[‘name’]的值是不是不为空,满足这些条件,直接输出下面的输出语句。
这串源码没有特别的地方,不存在其他处理函数,典型的xss可***源码。所以可以直接用我们的payload***
Medium级别
1、尝试用第一种方法,看看有什么不同
发现我们输入进去的<script></script>标签被过滤掉了,猜测利用了什么过滤函数。既然它能够将这个标签过滤,我们就构造一个不用这个标签的payload试一试。
2、构造payload:<img src=1 onerror=alert(1)>。
解释:<img ..>标签是添加一个图片,src,指定图片的url,onerror是指定加载图片时如果出现错误则要执行的事件
这里我们的图片url肯定是错误的,这个弹框事件也必定会执行
使用我们的payload***一下试一试。
发生了弹框,可以看出,后台处理的时候应该只过滤了<script>标签
3、我们查看一下源码:
我们可以看到,在将获取到的name值得时候,经过str_replace()函数过滤,将name值中的<script>标签转化为空。然后在将name值的结果输出。
所以当我们使用low级别的payload的时候我们的<script>标签被过滤掉。
4、特别注意的是这个函数也不太完美,因为它区分大小写。所以当我们使用low级别中的payload大写的时候,一样可以绕过它的过滤。我们试一下
Payload:<SCRIPT>alert(1)</SCRIPT>
一样可以弹框,当然绕过的还有很多方式。
处理这样的paylaod的时候最好再在前面加一个strtolower()函数,将传递的name值得字符统统改为小写。这样就可以不管大小写都能逃不出去。(只针对这一个payload)
High级别
1、当我们输入带有<script>标签的payload的时候,不管大小写,过滤的什么都不剩只有>,这是什么情况,我们查看一下源码:
这里利用了preg_replace()函数,将包含<script的字符,不管大小写,不管后面跟着1个或多个与之相同的字符都转换为空。
2、既然它过滤这样的字符串,那我们就用<img >标签。
Payload:<img src=1 onerror=alert(1)>
出现了弹框。
Impossible级别
1、正如级别含义,不可能的,这个很难做到弹框
查看源码
2、里面处理$_GET[‘name’]的值得时候利用了函数htmlspecialchars(),将值里面的预定义函数,都变成html实体
所以我们以上的payload都带有<>,这个经过转换之后是不会起作用的,也就不能够造成弹框。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。