渗透测试(第二章跨站脚本攻击实战)

前言:

大家好,上次我们介绍了跨站脚本攻击的一些基础知识,今天我们在靶场实战一下,来巩固我们学习的内容。

正文:

首先启动我们的PHPstudy,打开Apache2 和MySQL,在浏览器输入localhost/dvwa进入DVWA靶场,(如果不会搭建靶场的小伙伴可以去搜一下教程,或者上b站找一下视频,一步一步跟着做就可以了。)

反射型XSS:

我们现在将安全等级设置为:Low

在这里插入图片描述

打开反射型靶场界面,如下图:
在这里插入图片描述
我们在里面随便输入内容:我能突破限制,它会提示“ Hello 我能突破限制”。
在这里插入图片描述
那我们尝试一下输入XSS恶意代码

<script>alert(1)</script>

出现提示弹框,说明存在XSS漏洞
在这里插入图片描述
那么,我们查看一下该页面的源代码:
在这里插入图片描述
代码里面很简单,前端把输入的内容放到一个name的变量中,不经过任何处理,前端调用时,直接将name返回给前端,前端在HTML中以为是Script代码,所以弹出弹框。所以,我们可以使用恶意代码,直接获取用户的Cookie。

<script>alert(document.cookie)</script>

在这里插入图片描述

我们可以查看一下自己的Cookie,比对一下是否相同,点击F12,点网络,重新载入(或者Ctrl+R)得到Cookie
在这里插入图片描述
我们可以利用XSS漏洞制作钓鱼网站,提示用户用户名密码错误,重新输入密码,诱导用户在我们制作的钓鱼网站上输入密码,从而我们获取用户的密码。下面代码就可以让用户跳转到我们设计的页面上,由于我们是学习,所以我们跳转的页面就很随意,没有经过精心的设计,如果是真的实战,我们的页面需要与正规的网页一致。

<iframe src="https://blog.csdn.net/kun12343/article/details/140850779" name="kun12343" width="1500px" height="900px"></iframe> 

我们在输入框提交代码后,出现我们想让它出现的页面。
在这里插入图片描述

我们现在将安全等级设置为:Medium

我们再次使用我们之前测试注入点的代码尝试

<script>alert(1)</script>

发现它并不弹窗,并且提示“Hello alert(1) ”,我们可以思考一下,如果按照XSS攻击的话,它应该提示弹框,如果是正常当做名字的话,它应该提示:Hello < script >alert(1)< /script >。但是他都没有提示,而是提示:“Hello alert(1)”。说明它认识Script标签,并且把Script标签过滤掉了。

在这里插入图片描述
这个时候,我们应该考虑,它过滤掉的是什么,也就是猜它是怎么对name进行处理的(name变量保存的输入值),首先考虑大小写,过滤最简单的办法就是把 “< script >”替换成空。从而破坏 < script >标签。所以我们将恶意代码换成一部分大写或者双写:

<Script>alert(1)</Script>
<scr<script>ipt>alert(1)</script>

在这里插入图片描述
弹出提示框说明我们猜想正确,它仅仅是将 “< script >”替换成空。查看源代码。如下图:
在这里插入图片描述
剩下恶意代码均可执行,如果有< script >我们可以将标签换成大写或者双写,从而实现绕过。

我们现在将安全等级设置为:High

同样,我们使用恶意代码尝试一下:

<script>alert(1)</script>

得到提示如下,我们发现提示 “Hello >”,和上面理论一样,< script >一定是被过滤了,如果我们再用大小写和双写试一下,发现弹出提示和下面一致,我们可以得出,它是使用了正则表达式,不区分大小写。
在这里插入图片描述
我们可以查看一下源代码:
在这里插入图片描述
可以看到,现在< script >标签是用不了了,它用正则表达式限制的非常死,所有,我们可以使用其他HTML标签,例如

<img src=1 onerror=alert(1)>

这个代码的意思为:一个图片标签,路径为当前目录下文件为1,如果报错则弹出提示1。或者使用之前iframe标签也可以,只不过效果不同,根据所需功能,选择合适的标签。有时候标签过滤了,我们可以将标签编码,从而实现绕过。
在这里插入图片描述

存储型XSS:

我们现在将安全等级设置为:Low

打开存储型靶场界面,如下图:
在这里插入图片描述
我们正常输入信息,来观察一下是怎么输出的
在这里插入图片描述
我们可以看到,我们输入的内容在下面输出出来,并且我们是可以看到上一次的输入内容的。它的原理大概为:用户在留言框中输入留言,将留言作为数据保存在数据库中,当我们使用的时候,我们将数据库中的数据提取出来,放到我们的浏览器中。当我们在使用的时候,我们就可以将存入的恶意代码放到浏览器中,浏览器会自动识别该代码为HTML语言或是js语言,从而达到注入的目的。
同样,我们使用script标签来测试:

<script>alert(1)</script>

在这里插入图片描述

在这里插入图片描述
剩下的就和反射型XSS注入手段差不多,这里就不赘述了。

我们现在将安全等级设置为:Medium

我们再次使用我们之前测试注入点的代码尝试

<script>alert(1)</script>

在这里插入图片描述
可以看到,和反射型XSS中等难度时一致,我们可以使用大小写或者双写来注入:

<Script>alert(1)</Script>
<scr<script>ipt>alert(1)</script>

在这里插入图片描述
我们发现,无论是大小写还是双写,都不行。那我们猜测,Message部分没有注入点,先放弃。Name字段我们还没有进行测试,所以我们可以测试Name字段,在输入测试代码时,发现有字段限制。如下图:

<script>alert(1)</script>

在这里插入图片描述
我们点击F12,查看代码,找到Name所处字段,发现最大字符为10;我们可以将数字改大一点。然后再提交测试代码:
在这里插入图片描述
得到结果如下图(最后一个留言):
在这里插入图片描述
然后使用大小写或者双写来注入,就可以成功注入了。
在这里插入图片描述

在这里插入图片描述
至于为什么Message部分不能注入,我们可以查看源代码
在这里插入图片描述
我们可以看到Message部分限制的很死,Name部分仅仅只是过滤了< script >标签,连大小写都没有限制。所以我们注入得以成功。

我们现在将安全等级设置为:High

正常测试注入点和之前一样,这里就不赘述了,我直接使用最后注入,看一下效果。

<img src=1 onerror=alert(1)>

在这里插入图片描述
有一个问题:我们使用上面代码分别在Name和Message部分注入,在Name部分注入是成功的,在Message部分注入是失败的。(小伙伴们可以试一下再看下文,并想一下是为什么)
在这里插入图片描述
想找到问题答案的方式就是:查看源代码;我们可以看到,Message部分使用了strip_tags()函数,该函数是去除字符串中的HTML、XML和PHP标签。而Name字段仅仅使用了正则表达式来去除标签。所以Name部分注入是成功的,在Message部分注入是失败的。
在这里插入图片描述

DOM型XSS:

我们现在将安全等级设置为:Low

打开DOM靶场界面,如下图:
在这里插入图片描述

看到这个界面,我们有的小伙伴会疑惑,没有输入框怎么利用XSS攻击。实际上,无论是输入框还是单选框,最后都是通过URL返回给服务器,所以当我们随便选择一个选项时,URL会改变,如下图:
在这里插入图片描述

这时,我们可以将代码放入URL进行注入。

http://localhost/dvwa/vulnerabilities/xss_d/?default=<script>alert(1)</script>

在这里插入图片描述
获取Cookie:

http://localhost/dvwa/vulnerabilities/xss_d/?default=<script>alert(document.cookie)</script>

在这里插入图片描述
这里和反射型XSS差不多,可以自行练习。

我们现在将安全等级设置为:Medium

我们用一开始的方法在测试一下,发现并没有反应,这个时候,我们如果再用之前的方法,无论是双写还是大小写都是没有办法成功的。所以我们换一个思路。我们打开F12看一下源代码:

<select name="default" data-immersive-translate-walked="c51ce30c-822f-4c2e-a3b9-92601c9b1233">
	<option value="English" data-immersive-translate-walked="c51ce30c-822f-4c2e-a3b9-92601c9b1233" data-immersive-translate-paragraph="1">English</option>

	<option value="" disabled="disabled" data-immersive-translate-walked="c51ce30c-822f-4c2e-a3b9-92601c9b1233">----</option>

	<option value="English" data-immersive-translate-walked="c51ce30c-822f-4c2e-a3b9-92601c9b1233" data-immersive-translate-paragraph="1">English</option>
				
	<option value="French" data-immersive-translate-walked="c51ce30c-822f-4c2e-a3b9-92601c9b1233" data-immersive-translate-paragraph="1">French</option>
	
	<option value="Spanish" data-immersive-translate-walked="c51ce30c-822f-4c2e-a3b9-92601c9b1233" data-immersive-translate-paragraph="1">Spanish</option>

	<option value="German" data-immersive-translate-walked="c51ce30c-822f-4c2e-a3b9-92601c9b1233" data-immersive-translate-paragraph="1">German</option>
</select>

我们使用拼接,我们输入的值存在value变量里,如果把下面代码放到value里面

></option></select><iframe onload=alert(1)>
></option></select><img src=1 onerror=alert(1)>

注入前:
在这里插入图片描述
注入后:
在这里插入图片描述
成功效果图:
在这里插入图片描述

源代码如下:
在这里插入图片描述

我们现在将安全等级设置为:High

使用注释绕过后端代码,不经过服务器直接在浏览器执行注释内容。

default=English#</option><select><iframe onload=alert(10)></option>
default=English#<script>alert(10)</script>

在这里插入图片描述
以上就是我们XSS漏洞的全部内容,希望大家喜欢,接下来我们学习SQL注入。敬请期待。拜拜!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我能突破限制.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值