XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过

说在开头:文章是我通过查询资料后按照自己的理解总结出来的,所以如果有说法不对的地方,欢迎大佬指正~


DVWA是一款非常好的web漏洞练习平台,也是一款非常好的学习php代码审计的一个平台。我们可以利用它来学习XSS漏洞。

安装环境
平台搭建好以后,登录账号:admin,密码:password。

设置安全级别

一共有四个级别:Low、Medium、High、impossible。
我们依次测试每个级别,先从Low开始。
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第1张图片

1.反射型

1.安全级别:Low
  • 哈哈哈本来想打一下payload的,结果会被过滤掉,显示不出来那就只能放截图了
    在这里插入图片描述
  • script是一个HTML标签,用于定义在HTML页面中插入一段JavaScript脚本
  • alert() 方法用于显示带有一条指定消息和一个OK按钮的警告框。
    alert括号里的参数是要在window上弹出的对话框中显示的纯文本(而非 HTML 文本)。
    参数是数字时可以直接写,是字符时要加单引号,是字符串时要加双引号。

我们输入上面的payload,可以看到出现弹窗,说明存在反射型XSS漏洞:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第2张图片
我们查看一下源码,可以看到它对输入没有任何过滤:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第3张图片
因此,在Low下执行XSS 漏洞非常简单,无需绕过。

2.安全级别:Medium

在Medium下在执行上面的payload,会发现没有出现弹窗, 而是直接把弹窗语句输出了出来:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第4张图片
我们查看源码,可以看到,它将< script >替换成空了,即过滤掉了< script >标签:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第5张图片
绕过方法:

1.双写绕过:
在这里插入图片描述
2.大小写绕过:
在这里插入图片描述
出现弹窗,弹窗内容显示的是cookie:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第6张图片

3.安全级别:High

前面两种绕过方法都还是被拦截:
在这里插入图片描述
于是我们看一下源码,发现这里使用了正则表达式:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第7张图片
我上网查了一下正则表达式的语法,试着来分析一下这个过滤语句的的含义:

  • . 代表的是任意字符;* 代表的是取0至无限长度;/i 代表忽略大小写
  • 按我的理解翻译一下这个过滤语句的作用:
    XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第8张图片
    从结果也能看出来过滤后只剩下一个>:
    在这里插入图片描述

绕过方法:
插入一种HTML标签绕过:
在这里插入图片描述
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第9张图片
成功绕过!

4.安全级别:impossible

查看源码:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第10张图片
htmlspecialchars( $_GET[ ‘name’ ] ) : 最安全的防护,将所有的输入全部转化为HTML的静态文本,不做执行。

2.存储型

1.安全级别:Low

在上一篇的原理讲解中,我们已经知道存储型的攻击方式多见于论坛博客和留言板。
所以这里也可以看出,有一个可以留言的地方,我们在其中输入payload:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第11张图片
成功出现带有cookie的弹窗:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第12张图片
这一条留言就是刚才我们添加的,可以看到由于我们的留言内容是payload,所以它就不能像上面那条正常留言一样显示出来:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第13张图片
这种存储型XSS,只要你一去访问,都会被执行一次。

2.安全级别:Medium

设置完安全级别再点回XSS(Stored)页面,先执行刚才存储在数据库中的XSS,即弹出带有cookie的弹出,将弹窗关闭以后,才会显示正常页面。
为了避免对本次实验结果的影响,我们可以去数据库里把刚才那条留言删除:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第14张图片
为了和刚才区别,我们这次让它弹出111:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第15张图片
但结果发现并没有出现弹窗,留言信息也被正常打印出来了:
在这里插入图片描述
查看源码:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第16张图片

  • name的过滤机制和和反射型的是一样的。
  • message的过滤机制:

message值的处理中,在其第二次调用trim()函数时还内嵌了两个函数,先是使用addslashes()
函数、返回在预定义字符之前添加反斜杠的字符串,然后调用strip_tags()函数来剥去字符串中的HTML、XML 以及 PHP的标签,在最后再调用htmlspecialchars() 函数、把预定义的字符转换为 HTML实体,对输入的内容先进行HTML的编码然后再存储进服务器中,从而使message的SQL和XSS漏洞几乎不存在。

可以看出,我们在这里,只能对name进行利用和绕过,方法和反射型一样。

  • 需要注意的一点是,name框的输入长度有限制,只能输入10个字符,所以我们需要去页面源码修改一下maxlength:
    XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第17张图片
    然后可以看到出现弹窗111:
    XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第18张图片
3.安全级别:High

查看源码:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第19张图片
方法和上面一样,修改maxlength,然后在name处插入一种HTML标签绕过:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第20张图片

4.安全级别:impossible

XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第21张图片
impossible级别的name和message的过滤机制都是绝对安全的了。

3.DOM型

我目前知道的有两种场景的DOM型XSS漏洞,一种是在页面的输入框中输入payload、一种是在URL上进行传参,看起来和反射型XSS很像,但它其实并没有把数据传递到后台数据库,只是在前端页面显示。

这里演示的在DVWA中,我们使用的是在URL中进行传参。

1.安全级别:Low

当我们直接点击【Select】,它就会选择默认选项English,然后可以看到在URL的末尾自动传参“default=English”:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第22张图片
我们修改default后面的值,改为payload,出现弹窗:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第23张图片
查看源码,发现没有做任何过滤:
在这里插入图片描述

2.安全级别:Medium

我们来看一下它的源码:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第24张图片

  • “Is there any input?”:首先检查了default参数是否为空,如果不为空则将default等于获取到的default值;
  • “Do not allow script tags”:是过滤机制,不允许出现script标签,它的判断语句是应该是这个意思:
    stripos()是一个查找字符串的函数,且不区分大小写,如果查到了就是true,没查到就是false。
    这里的条件判断是不等于false时执行下面的语句,意思就是找到了“

通过查看源码,我们就能知道大小写绕过和双写绕过都会被过滤掉,于是我们来试一下插入一种HTML标签绕过,结果发现不能执行成功。
既然跟过滤规则没关系,那我们考虑有可能跟源代码有关,比如语句没有闭合之类的。

我们按F12查看源码,可以看到我们输入的payload出现在这个位置:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第25张图片
我经过了种种尝试,下面讲一下结论:
我们的目的是要使img标签成为一条独立的语句,这样才能执行我们的弹窗命令,所以,我们需要做的是把其他的标签依次闭合。

根据源码,依次闭合" 、 < option >标签的后面那个>、< /option >、< /script >:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第26张图片
然后可以看到成功执行弹窗命令:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第27张图片
绕过成功!

3.安全级别:High

查看源码,可以看到它的过滤机制变成了用switch匹配,只允许传的值为固定的几个,也就是我们所说的白名单:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第28张图片
然后我百度了一下,网上是这样说的:

由于 form表单提交的数据 想经过JS 过滤 所以注释部分的javascript 代码 不会被传到服务器端(也就符合了白名单的要求)

所以根据源码构造payload:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第29张图片
出现弹窗:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第30张图片
成功绕过。

4.安全级别:impossible

查看源码:
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第31张图片
注释的意思是:不需要做任何事情,保护机制在客户端处理。

  • 我的环境出问题了,impossible的测试效果和Low一样,所以下面借用一下别人的图。

输入payload进行测试,发现它会把我们输入的任何参数进行URL编码:
在这里插入图片描述
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第32张图片
所有的输入全部转化为URL编码而不会执行,这样就是非常安全的了。

绕过方法总结

1.双写绕过:ipt> alert(document.cookie)ript>
2.大小写绕过:< ScriPt >alert(document.cookie)< /sCripT >
3.插入一种HTML标签绕过:< img src=xx οnerrοr=alert(1) >
4.当然,还有其他的paylaod攻击,在后续学习中遇到了会来补充
5.补充:οnclick=‘alert(document.cookie)’
6.补充:javascript:alert(1)


最后想说几句:
1.我没有学过PHP语言,本文里对源码的分析,是基于我边百度边理解而分析出来的,如果有说的不对的地方,请指正。
2.其实我这里展示的都是最最基础的利用和绕过,真正实战的XSS漏洞的利用和绕过,会复杂得多得多!等我遇到了再深入学习。
3.然后说一句题外话,今天还学会了一个小技巧:设置CSDN的字体颜色。
4.这两天混了一个萌新群,结果发现比我小两级的学弟们不知道比我强多少倍……
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第33张图片
XSS跨站脚本攻击漏洞之2DVWA中的利用和绕过_第34张图片

你可能感兴趣的:(XSS,DVWA,web安全攻防)