首先,我们先来了解一下什么是xss漏洞吧!
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
XSS是web安全中最为常见的漏洞,XSS全称是Cross Site Script,他的中文名字是跨站脚本攻击。XSS攻击通常指黑客通过“HTML注入”篡改了网页,插入了恶意脚本,从而控制用户浏览的一种攻击,他分为三种形式,Persistent型(持久型也称存储型),Non-persistent(反射型)及Dom-based(DOM型)
- 反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
- 存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。
- DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。
今天我们就来使用XSS挑战之旅靶场进行一步一步的讲解怎么利用以及绕过过滤进行XSS的漏洞攻击吧!
我这里使用的是hack学习呀的在线靶场进行xss的靶场练习
首先我们打开靶场打开第一关
我们可以看到他的传参值点是test,而且传参值可以在页面中回显,下面又说了payload的长度为4,正好和上面的传参值字符长度对应上了
那么我们就可以得出结论了
现在开始进行xss测试,先使用最简单的不带任何绕过方式的js代码进行传参测试
发送进行测试
xss打入成功
我们接着看第二题
我们先传一段正常的字符进行搜索测试
我们先使用第一题的payload进行测试
利用失败,我们打开f12进行分析
我们发现他把传入的js代码直接嵌入到了input标签的value属性中
这个时候我们可以使用闭合input标签的方式进行绕过
好的,闭合成功,成功打入js代码
我们再来看一下第三题
输入1先测试一下
我们使用最开始的payload进行测试
显然是不行的,我们打开f12进行分析
我们看到他还是input标签,我们使用第二关的payload进行测试
很显然行不通的
我们这个时候想到了伪协议的方式进行绕过测试
我们可以把点击事件嵌入到了input当中,但是后面多出来了一个 " ,我们要把它也给闭合掉
很显然还是不行,经过测试我们的一些符号被过滤掉了,但是单引号没有被注释掉,那么我们使用单引号结合注释符号,直接把后面的东西给注释掉,我们学过前端的都知道,在html中的单行注释是 // 我们就直接利用单行注释的方法注释掉后面的内容
js代码打入成功
我们打开第四关,使用第三关的代码进行第一步的测试
发现单引号被过滤掉了,我们再试试双引号闭合进行测试
发现直接打入成功
我们打开第五关,使用第四关的payload先进行一次测试
发现不行,我们打开f12进行分析
我们发现onclick被转义了,那么就换一个事件来进行测试吧
发现还是不行
这个时候我们可以利用伪协议进行测试
注:一些常用的伪协议
这里只列举了一部分常用的,还有一些我没有列举了,请各位自行搜集吧!
那么我们来使用伪协议标签进行测试吧
我们首先闭合value的值然后嵌入一个伪协议标签
我们可以看到,在输入框后面插入了一个ifreme,当我们去点击这个图片的时候就会触发我们的js伪协议代码,从而达到触发js代码的效果
可是他虽然弹了js代码,但是没有显示通关的弹窗,我们只好再想其他伪协议标签的办法了
我们可以看到a标签的伪协议标签已经嵌入了进去,我们点击这个超链接即可触发js代码
打入成功,拿下第五关
我们接下来打开第六关
我们先随意输入一个xss payload进行测试分析
我们打开f12进行分析
看来还有可能是伪协议绕过
很显然他把href属性过滤掉了,我们只能换一个其他的伪协议进行绕过了
我们使用iframe伪协议在试一试
发现src属性也被转义过滤了
我突发奇想,之前几关都没出现过大小写绕过和双写绕过,这次我就来试试能不能在这关使用
完美绕过,嘿嘿嘿
我们接着打开第七关
发现他把script直接就给过滤掉了,这时我们还有一个法宝就是双写绕过
我们接下来测试一下看看
写入成功,成功触发js代码
我们继续前进到第八关
我们先来打开f12简单分析一下
我们可以看到在输入框里输入的东西会被当成链接添加到下面那个友情链接的超链接上面,那么我们可不可以使用伪协议直接把js代码嵌入这个超链接上呢?我们现在就来试试吧
我们可以看到嵌入成功了,这说明思路是正确的,但是javascript被转义过滤掉了,这个时候我们要想办法绕过他
这个时候要比上面几关难一点,我这个时候想到了编码绕过的方式,你不让我用明文形式,我编码一下你就不认识我了,从而达到了绕过过滤的方法
我这里使用的是HTML编码的方式进行绕过的
打入成功,拿下第八关
我们打开第九关
使用上一关的payload进行第一次测试
好的,插入成功
我们点击超链接试一下吧
what???
那既然这个编码不行我们再换一种编码试一下
这样不行我们就自己写一个携带js代码的html,然后嵌入到值的地方
有窗口弹出,并没有得到自己所要的答案。这个窗口属于自己所编写网页的窗口,并不是题目所属网页窗口。
这时经过分析得知,会不会是必须要有http://才会不提示链接不合法呢?
我带着这个思路测试了一下,发现我的思路是对的
下面讲一下通关思路
发现这次不提示链接不合法了,但是伪协议也不会被执行了,这个时候我想到了既然必须要有http://又要让伪协议代码执行,那就只能先写上http://然后再给他注释掉这种方法来绕过过滤喽
好的,过关成功
我们现在来到第十关进行测试
这次什么东西都不给了,我们先打开f12进行分析一波吧
我们发现input都变成了隐藏域,由于传参方式是GET方式,可以直接在url栏里面进行参数传递,那么这样的话我们可以把隐藏域中任何一个input的属性和值经过篡改直接发出去,从而达到xss攻击的目的
可是我们点击输入框并没有触发我们的js代码
我们继续f12进行分析
发现多出来了一个双引号,那么我们再加一个双引号,直接闭合掉那个单引号就可以了
完美闭合
点击输入框后触发js事件,所以我们打入xss成功,完美拿下第十关
这期教程到此就结束啦,我们下期见。
各位师傅们觉得还可以的话就留个关注,点个赞吧!!!