xss脚本漏洞如何修复 (xss跨站脚本攻击漏洞危害)

前面几篇文章我们讲到了跨站脚本(XSS)漏洞的几种类型和验证方法以及防御措施,有兴趣的朋友可以到我的主页翻看文章《十大常见web漏洞——跨站脚本漏洞》和《实操web漏洞验证——跨站脚本漏洞》,今天我们由易到难实战演示一下跨站脚本漏洞的形成,以便更好地了解漏洞的产生原理,进一步做好防御。

首先我们使用的靶场环境为在线的,访问网址为:https://xss-quiz.int21h.jp/,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

XSS靶场

英文不好的朋友可以使用在线翻译工具,XSS挑战第一关,然后我们直接看“what you have to do”,你需要做的:注入JavaScript命令:alert(document.domain);,这个命令是在网页中弹出当前网页地址的也就是“xss-quiz.int21h.jp”,需要在搜索框里边构造语句来达到效果。

没有过滤的XSS漏洞

第一关非常简单,也就是我们打开靶场主页看到的那个那个页面,我们可以在搜索框中随便输入一些内容,点击搜索,然后按下F12键,在弹出的界面中点击左上角的箭头,然后选择输入的内容,在右侧代码栏里就会找到对应内容,可见靶场代码把搜索内容直接放到了<b>标签里,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

第一关

我们直接输入如下语句:

<script>alert(document.domaiin);</script>

点击“search”,就会弹出当前页面的域名,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

触发弹窗

当我们点击确认返回页面时,这时页面就会多了一条提示“Congratulation! Next stage stage2.php.”也就是说我们通过了第一关可以点击“stage2.php.”进入第二关了,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

通过第一关

属性中的XSS漏洞

到了第二关,再输入之前的“<script>alert(document.domaiin);</script>”就不会成功了,我们再按照之前的操作查看页面的代码,发现我们搜索的内容传到了“value”属性值中了,我们输入第一关的语句之后也会成为value的参数,从而无法执行。

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

第二关

这时我们只需要先闭合value标签,然后执行“<script>alert(document.domaiin);</script>”语句,就可以了,我们可以构造如下语句:

"><script>alert(document.domaiin);</script>

点击“search”就会弹出恭喜过关的提示,我们输入的“ "> ”首先闭合了value标签,后边的“<script>alert(document.domaiin);</script>”语句就不会当成是value的参数,所以语句就再次执行了,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

通过第二关

选择列表中的XSS

这一关由于注入点在选择列表中,我们需要借助抓包工具来修改列表中的参数了,这里不会使用抓包工具的,可以查看我的《抓包工具Burp Suite的安装与设置》一文来安装与配置抓包工具,进行数据包的抓取,我们抓取到POST数据包,将Japan参数改为:

Japan<script>alert(document.domain);</script>

点击Go,右边会提示“HTTP/1.1 200 OK”,右键选择“show response in browser”,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

然后点击“copy”按钮,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

在浏览器新建一个浏览页面,把刚才复制的链接拷贝到地址栏里回车,和前两关一样,在弹出有当前页面地址内容的弹窗后,页面会提示:“恭喜你!”然后你就可以进入下一关了,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

恭喜通关

隐藏参数中的XSS漏洞

前边两关造成XSS的注入点一个在输入框中,一个在下拉列表中,都是在页面中直观可见的,在第四关里的XSS注入点在页面里看不到,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

第四关

我们继续使用抓包工具抓取POST数据包,如下图所示,除了p1和p2两个参数外又多了一个p3参数。我们就用这个参数构造语句。

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

抓取数据包

这里构造语句时,也需要先闭合标签,和前边一样我们使用“ "> ”来闭合,我们可以构造p3参数值为:

backme"><script>alert(document.domain);</script>

如下图所示,点击Go,右边提示成功,和上边一样我们复制出该页面的链接,在浏览器地址栏中粘贴该链接访问。

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

修改参数

页面在弹出内容为当前页面域名的弹窗后,提示“恭喜!”,就可以进入下一关了,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

恭喜过关

限制输入长度的XSS漏洞

有一些输入栏限制了输入字符的长度,我们可以将语句尽量简化,例如:“<script>alert(1);</script>”也不能够满足长度限制,这时就需要我们突破页面输入框输入字符长度的限制。

第五关当我们输入语句“<script>alert(document.domain);</script>”时,但是输入到“<script>alert(d”时,就输入不进去了,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

字符长度限制

我们按“F12”按钮,找到输入框对应的代码,我们可以看到输入框最大输入字符长度“maxLength”参数值为15,正好是我们输入字符的最大长度。

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

maxLength参数限制

我们可以将maxLength参数值改为150,再次输入,发现可以输入了!

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

可以输入多于15个字符

我们可以构造语句:

"><script>alert(document.domain);</script>

点击“search”按钮时,页面在弹出内容为当前页面域名的弹窗后,提示“恭喜!”,就可以顺利进入下一关了,如下图所示:

跨站脚本攻击xss的处理方式,xss跨站脚本解决方案

恭喜通关

今天我们就讲到第五关,以后关卡我们有机会再继续介绍,以上就是跨站脚本(XSS)漏洞实战演示——由易到难第一部分的全部内容,希望对你了解XSS漏洞有所帮助,欢迎关注@科技兴了解更多科技尤其是网络安全方面的资讯和知识。