本文是在工作后做项目后作为一个漏洞挖掘的小总结,所从事的工作为以类似于黑盒测试为主,所以代码会比较少,主要是总结一些触发的方法。

首先先了解下什么是xss,相关概念可以参考下之前的文章,这边只简要说下。xss漏洞即跨站脚本攻击,是web应用程序中最常见的漏洞之一,主要通过往web页面里插入恶意Script代码,当用户浏览时就可以触发脚本代码。所以xss漏洞的关键就是寻找参数未过滤的输出参数

以前没开始做项目的时候,以为xss的测试方式只有一种就是通过在页面内添加以下代码:

1
<script>alert(1)</script>

真的天真的以为只要能够通过输入框键入这个代码然后被网页执行就是存在注入漏洞。不行就没有该漏洞。现在想想好天真。

第一次知道通过url执行并且不是通过alert()函数,是公司导师在测试某系统时触发了,但是自己在测试的时候没有发现该漏洞,在看到项目报告的时候通过里面的方法进行复现。

如图,是当时项目的一个小截图,触发的方式为该url中的最后一个参数为定义页面上的一个名称并且是进行两次url编码的方式进行的,该参数值会原本的放入页面中去进行展示,并且是没有经过html标签直接进行显示的,所以在该参数值直接键入script语句就行。但是我复现的时候使用上述的代码发现是无法弹出来的,然后就参看导师的方法,发现是通过以下方式就行弹出弹框的。

1
<script>confirm(1)</script>

说实话以前没有接触到这个方法,于是就去百度了一下xss触发方式,发现常用的xss触发方式有三种,参考学习了一下。参考链接:https://blog.csdn.net/qq_33247435/article/details/85626051?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

alert()

alert方法有一个参数,就是弹出你想要弹出的内容,弹框比较简单就是一个显示的功能,可以点击确定进行关闭

使用方式为

1
alert(1)    //弹框即显示1

confirm()

confirm方法不仅是显示返回值为true或false(确定和取消各代表一个值)

使用方法为

1
confirm(1)

prompt()

prompt方法的弹框相对于上面两个弹框来说可以直接在弹框里面进行回复内容,回复内容为口令的值,取消则口令值为null

使用方法

1
prompt(1)

学习到三种方式之后的某个项目由我自己单独进行运维测试,在测试过程中我发现,是否可以通过用户输入框进行闭合标签然后键入脚本呢?答案是可以的。例如:

1
<input type="text"; name=....(标签的属性); value="1">

这时候我就想我们在输入框内输入了1,提交值后该文本框内仍然显示有1这个值,如果我们这样输入呢?

1
1"><script>alert(1)</script>

如果在前端没有将你所输入的值进行编译的时候发现是可以进行触发xss的,但是可以通过将双引号变为&quto;等方式将内容进行转义使其没法进行闭合。