如何发起、防御和测试XSS攻击,我们用DVWA来学习(上)
XSS 全称Cross Site Scripting 即‘跨站脚本攻击’。 从其中文释义我们能直观的知道,这是一种对网站的攻击方式。
其原理在于,使用一切可能手段,将可执行脚本(scripting)植入被攻击页面中去,从而实现对目标网站的攻击。 本质上可以理解为‘让自己的代码在目标网站中运行’的一种技术。
一个系统对于XSS攻击的防御能力,是我们安全性测试的一个重要方面,也是我们软件测试团队在安全性测试领域内的一个重要度量。
本文我们希望就XSS测试方面进行一些探讨。
进入正题,本文的最终落脚点是我们怎么去测试一个系统对于XSS功能的防御能力,不过在落到我们最终的命题之前,我们要先来探讨XSS的原理。所谓知其然还要知其所以然!
最常见的XSS攻击有以下两种表现形式:
第一种是存储型攻击:将脚本注入进一段发布内容里面,当系统其他用户访问到(看到)这段发布内容,脚本便已被运行并且达成其目的。
存储型XSS的本质在于:提交的XSS代码会存储在服务端(不管是数据库,内存还是文件系统等),下次请求目标页面是不用再提交XSS代码。
比如用户在论坛里发布一个帖子,这个帖子里包含XSS代码。
第二种是反射型攻击:发出请求时,XSS代码出现在URL中,作为输入提交到服务端,服务端解析后响应,在响应内容中出现这段XSS代码,最后浏览器执行。这个过程就像一次反射,所以叫做反射型XSS。
反射型攻击的实现形式经常呈现以下图所示的方式:
黑客——发现存在反射XSS的URL——根据输出点的环境构造XSS代码——进行编码、缩短——发送给受害人——受害打开URL后,执行XSS代码——完成黑客想要的功能(获取cookies、url、浏览器信息、IP等等)。
最后一种是DOM型XSS攻击。他是一种web server不参与,仅仅涉及到浏览器的XSS。比如根据用户的输入来动态构造一个DOM节点,如果没有对用户的输入进行过滤,那么也就导致XSS攻击的产生。
光看理论用处不大,接下来我们自己来尝试实现XSS攻击。实现一个XSS攻击的前提是,我们要有一个可被攻击的对象--当然不推荐去攻击一个真实的系统,所以我们推荐大家搭建一个自己的网站去让我们自己折腾。
DVWA是一个很好的选择。DVWA- Damn voulnerable web application,是UK的一家安全性研究机构发布的一套网站系统,专门用来展示网站安全性问题和防御机制。对于我们学习web安全性相关知识是一个很好的工具。这套web项目可以在http://www.dvwa.co.uk/官网由github下载。下载完成以后,将这套网站部署在本地,我们就可以开始实现XSS攻击,从而掌握他的防御理念了。
要部署这套网站,可以考虑使用xampp这样的便捷建站集成软件包,xampp很方便使用,我们用他来实现DVWA所需要的中间件和数据库服务。将DVWA搭建在其htdocs目录下,就可以将网站运行起来。关于xampp的使用网上有诸多教程,这里就不再复述了。
DVWA运行起来登录以后,我们会看到如下的界面:
从红标部分我们可以看到,他提供了非常显眼的xss攻击试验场地。
Bravo,我们马上撸起袖子来对他进行XSS攻击:
首先,去到DVWA Security目录,将整个站点的安全级别调为‘LOW’,这样我们的攻击才会直观生效。
我们先来测试一个基本的反射型攻击:
去到XSS(Reflected)目录,可以看到这个在这个页面上我们可以输入一串字符,网页会将这串字符展示出来:
我们在这个输入框内输入以下脚本并提交:
<script>alert('xss');</script>
是不是看到,这个脚本被执行了!直观的结果就是,一个弹窗被触发了:
这就是一次成功的XSS攻击 -- 我们的脚本代码在对方的网站环境中被运行了。当然这个简单的XSS攻击充其量只是一个恶作剧级别的,还达不成恶性后果,我们后续会研究后果更坏的XSS攻击形式。
在此之前我们再来尝试存储式XSS攻击:
去到XSS(STORED)目录,可以看到这是一个留言板界面,我们可以在这个页面上进行留言发布。
我们在留言的内容中,插入一条脚本,看看会发生什么。这次我们尝试稍微复杂一点的脚本:
<script>alert(document.cookie)</script>
我们希望弹窗展示出当前用户的cookie内容。我们将这条脚本发布以后,可以看到如下现象:
每当这条发布的内容被访问到,当前用户的cookie信息就会被打印出来,我们接着去观察页面源代码,会发现:
我们刚才的脚本已经被写入到页面源码,成为页面的一部分了!
到此为止我们已经接触了XSS的原理,并用DVWA这个系统尝试了简单的XSS攻击,相信我们对于XSS攻击已经有了初步的认识。
在下一篇中我们会继续深入,使用XSS攻击实现盗取用户信息的罪恶目的,然后我们会学习XSS的防御方法以及怎么对网站防XSS能力进行测试!
- 软件测试技术交流:【939885326 】
- 个人工作qq:【2049427226】
- 功能测试,自动化测试,性能测试,测试开发,测试架构,测试管理方面的问题欢迎与加群与我交流,加群时请备注下:博客园-Vincent