跨站点脚本编制(XSS)是web应用程序中常见的一种漏洞类型。这个漏洞使得攻击者有可能将恶意代码(如JavaScript程序)注入受害者的web浏览器。使用这种恶意代码,攻击者可以窃取受害者的凭证,比如cookie。的访问控制政策(即同源策略)使用浏览器来保护这些凭据可以通过利用XSS漏洞绕过。这类漏洞可能会导致大规模的攻击。
为了演示攻击者利用XSS漏洞可以做什么,我们设置了一个基于web的留言板使用phpBB。我们修改了软件,引入了一个XSS漏洞在mes-sage board;这个漏洞允许用户向board发布任意消息,包括JavaScript项目。学生需要利用这个漏洞发布一些恶意的消息到message board;看到这些恶意信息的用户将成为受害者。攻击者的目标是发布伪造给受害者的信息。
在这个实验室中,我们将需要三件东西:
对于浏览器,我们需要使用LiveHTTPHeaders exten-sion用于Firefox检查HTTP请求和响应。预先构建的Ubuntu VM映像提供给您已经安装了带有所需扩展的Firefox web浏览器。
启动Apache服务器。apache web服务器也包含在预构建的Ubuntu映像中。但是,默认情况下web服务器不会启动。您必须首先使用以下两个命令:
phpBB Web应用程序。phpBB web应用程序已经在预先构建的Ubuntu中设置好了。我们还在phpBB服务器中创建了几个用户帐户。密码信息可以从首页的文章中获得。您可以使用以下URL访问phpBB服务器(需要先启动apache服务器):
进入网页,点击首页的由admin发布的帖子可以看到每个用户的密码和用户名一样
配置DNS。这个URL只能从虚拟机内部访问,因为我们有修改/etc/hosts文件,将域名(www.xsslabphpbb.com)映射到虚拟中国本地IP地址(127.0.0.1)。您可以映射任何域名到一个特定的IP地址使用的/etc/hosts.例如,您可以将http://www.example.com映射到本地IP地址将以下条目附加到/etc/hosts文件
因此,如果您的web服务器和浏览器运行在两台不同的机器上,则需要修改/etc/在浏览器的机器上托管相应的文件,以将www.xsslabphpbb.com映射到web服务器的IP地址。
在预构建的VM映像中,我们使用Apache server托管所有web站点Apache中基于名称的虚拟主机特性可用于托管多个web站点(或url)在同一机器上。目录中名为default的配置文件"/etc/apache2/站点可用"包含必要的配置指令
一些实验任务需要对JavaScript有基本的了解。我们提供了一个JavaScript示例程序来帮助学生入门。完成任务3,同学们可能需要一个实用程序来监视特定TCP端口上的传入请求。我们提供了一个C程序,可以配置为侦听特定端口并显示传入的消息。C程序可以从这个实验室的网站下载。
此任务的目标是发布一个恶意消息,其中包含用于显示警告窗口的JavaScript。JavaScript应该与消息中的用户评论一起提供。以下JavaScript将显示一个警告窗口:
如果你把这个JavaScript连同你的评论一起贴在留言板上,那么任何浏览的用户将看到警告窗口的该注释。
首先,以alice的身份登入
发布一个恶意消息
接着打开这个帖子,可以发现如下信息
此任务的目标是在包含JavaScript代码的留言板上发布恶意消息,这样,每当用户查看此消息时,就会打印出用户的cookie。例如,考虑下面的消息包含一个JavaScript代码:
当用户查看此消息时,会弹出一个消息框,显示用户的cookie。
仍然使用alice的身份发布这个恶意消息
接着浏览这个帖子,就会发现弹出用户的ccokie信息
在上一个任务中,恶意的JavaScript代码可以打印出用户的cookie;在这个任务中,攻击者希望JavaScript代码发送cookie给自己。为了实现这一点,恶意的JavaScript代码可以向攻击者发送一个HTTP请求,并将cookie附加到请求中。我们可以做到通过让恶意JavaScript插入一个src设置为攻击者目的地URL的标记。当JavaScript插入img标记时,浏览器尝试从上述URL和加载图像在这个过程中,最终向攻击者的网站发送一个HTTP GET请求。下面给出的JavaScript将cookie发送到攻击者机器上提到的端口5555。在特定端口上,攻击者有一个TCP服务器,它只打印接收到的请求。TCP服务器程序将被提供给你(可以在这个实验室的网站上找到)。
首先编译echoserver获得可执行文件echoserv
以alice的身份发布恶意信息
查看帖子可以发现,我们向127.0.0.1的5555端口的地址请求一个名字为自己的cookie的图片,因为该图片不存在,所以显示不出图片信息
运行echoserv,并监听端口5555,同时以alice的身份浏览该帖子,可以发现显示了用户的cookie
在窃取了受害者的cookie之后,攻击者可以对phpBB web服务器执行受害者所能执行的任何操作,包括以受害人的名义发布新消息,删除受害人的帖子等。在这项任务中,我们会写一个程序来伪造一个代表受害者的消息。
要打造一个消息发布,我们首先应该分析phpBB是如何在发布消息方面工作的。更多的具体来说,我们的目标是找出用户发布消息时发送给服务器的内容。Firefox的LiveHTTPHeaders扩展可以帮助我们;它可以显示发送的任何HTTP请求消息的内容从浏览器。从内容中,我们可以识别消息的所有参数。以下内容的屏幕截图LiveHTTPHeaders在图1中给出。可以从下面下载LiveHTTPHeaders扩展http://livehttpheaders.mozdev.org/,它已经安装在预构建的Ubuntu虚拟机中的形象。
一旦我们理解了消息发布的HTTP请求是什么样子,我们就可以编写Java了程序发送相同的HTTP请求。phpBB服务器无法区分是否请求由用户的浏览器或攻击者的Java程序发送。只要我们设置了所有的参数正确地说,服务器将接受并处理消息发布HTTP请求。为了简化你的任务,我们为您提供一个示例java程序,执行以下操作:
首先打开Firefox的LiveHTTPHeaders插件
接着以alice的身份再发布一个帖子,以查看发帖的过程
接着LiveHTTPHeaders中获得的信息将Java程序中的addRequestProperty和data进行修改
接着编译运行java程序,可以发现多出了一个帖子
点开帖子可以发现帖子的内容就是我们代码中构造的内容
在前面的任务中,我们已经学习了如何从受害者那里窃取cookie,然后伪造HTTP请求使用偷来的cookie。在这个任务中,我们需要编写一个恶意的JavaScript来伪造一个HTTP请求直接从受害者的浏览器。这种攻击不需要攻击者的干预。能够实现这一点的JavaScript称为跨站点脚本蠕虫。对于这个web应用程序,蠕虫程序应该做以下工作:
以alice的身份发布一个消息,消息内容为蠕虫代码
具体代码如下(发帖时,代码之间不应该存在回车换行符)
接着以不同用户的身份浏览该帖子,可以发现,自动冒用浏览者的身份发帖
在前一个任务中内置的蠕虫只会伪造一个代表受害者的消息;它不会传播本身。因此,从技术上讲,它不是蠕虫。为了能够传播自己,伪造的信息还应该包括一个蠕虫,所以每当有人点击伪造的消息,一个新的伪造消息携带相同蠕虫的细胞将被创造出来。这样,蠕虫就可以繁殖了。点击的人越多伪造的信息,蠕虫传播得越快。
以alice的身份发布具有传染性的蠕虫消息task6