关注这个漏洞的其他相关笔记:XSS 漏洞 - 学习手册-CSDN博客
0x01:XSS 漏洞简介
跨站脚本(Cross-Site Scripting,简称为 XSS)攻击,是一种针对网站应用程序的安全漏洞进行攻击的技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响。 这些恶意网页程序通常是 JavaScript,但实际上也可以包括 Java、VBScript、ActiveX、Flash 或者甚至是普通的 HTML。恶意用户利用 XSS 代码攻击后成功后,可能得到很高的权限(如执行一些操作)、私密网页内容、会话和 Cookie 等各种内容。
0x0101:XSS 漏洞演示
实验工具准备
PHP 运行环境:phpstudy_x64_8.1.1.3.zip(Apache2.4.39 + PHP 5.3.29nts)
实验源码包(附配置流程):SessionLab01.zip
实验环境的搭建流程我一起放在了 SessionLab01.zip 中了,这里就不多说了,下面直接开始演示。
访问实验地址,可以看到我们当前是处于一个未登录的状态(页面显示 Password Login):
随便输入一个用户名和密码进行登录:
可以看到,页面显示 “HI,Blue17”,证明它认识我们了,OK,这是正常用户的正常操作,没问题。
我们不一样,我们喜欢搞骚操作,右击查看网页源码:
可以发现,“Blue17” 回显在了 HTML 标签中。我们是否可以推断,服务器会将我们的用户名回显回页面。
理解了这一点,我们是否可以尝试,使用 HTML 标签或者 JavaScript 代码块作为我们的用户名传递给后端,看看它是不是依旧会回显。
接下来,我们在 UserName 字段中输入下面的内容,并点击 LOGIN(如果你不认识下面的内容,可能得先去了解一下 JavaScript 这门编程语言了):
<script> alert(/WhoAMI!!/) </script>
可以看到,页面弹窗了,证明我们传入的 JavaScript 脚本被浏览器解析并且执行了。至此,一次反射型 XSS 攻击结束。
点击 “确定” 按钮后,回归正常页面:
可以看到,本应该回显姓名的地方是空的,但是查看网页源码,可以发现,姓名的位置对应的是一个 JavaScript 脚本。至此,XSS 攻击,演示结束。
0x02:XSS 漏洞详解
0x0201:XSS 漏洞产生原因
XSS 漏洞产生的主要原因是因为程序员在开发 Web 站点时对用户输入的内容没有进行过滤或者过滤不严,导致恶意用户可以将恶意代码插入到网页中,当其他用户访问该页面时,恶意代码就会在他们的浏览器中运行,从而可能盗取这些用户的信息或者进行其他不当行为。
0x0202:XSS 漏洞分类
XSS 攻击可以分为三种类型,分别是反射型、存储型和 DOM 型。其中 DOM 型是一种特殊的反射型 XSS(具体怎么个特殊法后面会讲)。
该部分,主要是简单了解一下三种不同类型的 XSS 漏洞原理及其特点,后面我会针对每一种类型的漏洞都举一个实例来进行详解。
1. 反射型 XSS
反射型 XSS 又称非持久型 XSS,这种攻击方式往往具有一次性。
常见的攻击方式: 攻击者通过电子邮件等方式将包含 XSS 代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有 XSS 代码的数据发送给目标用户的浏览器,浏览器解析这段带有 XSS 代码的恶意脚本后,就会触发 XSS 攻击。
其攻击流程如下图所示:
看完了攻击流程,很多人会抱有侥幸,说幸好我比较聪明,异常链接从不点。但是倘若攻击者,给你这样的链接呢:美女图片!(链接放这里了,点不点看你)。是的,挑逗的话语加上自定义的吸引性文字(链接的文字自己是可以定义的,不会还有人不知道吧),你说,会不会有人上当?
2. 存储型 XSS
存储型 XSS 又称持久型 XSS,攻击脚本将被永久的存放在目标服务器的数据库或文件中,具有很高的隐蔽性。
常见的攻击方式: 这种攻击多见于论坛、博客、留言板,攻击者在发帖过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。
其攻击流程如下图所示:
从上面的攻击流程中,我们可以看到,存储型 XSS 的攻击方式能将恶意代码永久的嵌入一个页面中,所有访问这个页面的用户都将成为受害者。如果我们能够谨慎对待不明链接,那么反射型 XSS 攻击将没有多大作为,而存储型 XSS 则不同,由于它注入在一些我们信任的页面,因此无论我们多么小心,都难免会受到攻击(谁会一直打开浏览器的源码模式抓包呀)。
3. DOM 型 XSS
DOM 全称 Document Object Model,使用 DOM 可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。DOM 型 XSS 是一种特殊类型的反射型 XSS,它是基于 DOM 文档对象模型的一种漏洞。
常见的攻击方式: 用户请求一个经过专门设计的 URL,它由攻击者发布,而且其中包含 XSS 代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM 对象就会处理 XSS 代码,导致存在 XSS 漏洞。
其攻击流程如下图所示:
其整体攻击流程与反射型 XSS 很相似,只不过是因为 DOM 型 XSS 形成的原因比较特别,发现它的安全专家专门提出了这种类型的 XSS。处于历史原因,就把它单独作为一个分类了。
0x03:参考文献
-
《白帽子讲 Web 安全》 ISBN 978-7-121-16072-1
-
《Web 安全攻防:渗透测试实战指南》 ISBN 978-7-121-34283-7