L003001020HTTP攻击与防范文件上传攻击.docx

上传人:b****9 文档编号:25432862 上传时间:2023-06-08 格式:DOCX 页数:25 大小:858.53KB
下载 相关 举报
L003001020HTTP攻击与防范文件上传攻击.docx_第1页
第1页 / 共25页
L003001020HTTP攻击与防范文件上传攻击.docx_第2页
第2页 / 共25页
L003001020HTTP攻击与防范文件上传攻击.docx_第3页
第3页 / 共25页
L003001020HTTP攻击与防范文件上传攻击.docx_第4页
第4页 / 共25页
L003001020HTTP攻击与防范文件上传攻击.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

L003001020HTTP攻击与防范文件上传攻击.docx

《L003001020HTTP攻击与防范文件上传攻击.docx》由会员分享,可在线阅读,更多相关《L003001020HTTP攻击与防范文件上传攻击.docx(25页珍藏版)》请在冰豆网上搜索。

L003001020HTTP攻击与防范文件上传攻击.docx

L003001020HTTP攻击与防范文件上传攻击

课程编写

类别

内容

实验课题名称

文件上传攻击

实验目的与要求

1.理解文件上传的概念

2.了解文件上传攻击的方式

3.掌握防范攻击的方法

实验环境

VPC1(虚拟PC)

Windowsserver2003

VPC1连接要求

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

软件描述

1、学生机要求安装java环境

2、vpc安装windwos系统

实验环境描述

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

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

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

预备知识

有时候需要让来访者能够上传文件,例如在邮件服务中上传附件,在博客中上传图片,或是提供PHP+MySQL网页空间来让来访者上传文件。

在PHP中,文件的交换与表单数据传递的方式不同,在标签中必须指定enctype属性值是multipart/form-data:

当同时传递文件与表单数据时,HTTP请求会有特殊的格式。

因此在标签中指定enctype属性值是multipart/form-data时,才能让文件正确上传。

设置上传文件的类型,需要设置type属性值为file的input标签:

实验内容

1.理解文件上传的概念

2.了解文件上传攻击的方式

3.掌握防范攻击的方法

实验步骤

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

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

3.打开浏览器,输入http:

//localhost:

8080/example_code/如图:

4、找到“(10)文件上传攻击(FileUploadAttack)”项,并点击打开。

4、现在我们来看一下,一个简单形式的文件上传表单:

(程序代码请看:

C:

\xampp\htdocs\example_code\source\code10\ex9-1.php)

点击“演示一”

类型用来指定上传文件的路径。

MAX_FILE_SIZE隐藏类型用来设置能够允许上传的最大文件大小是40106字节。

类型用来激活一个上传文件的操作。

点击“演示2”文件是一个一般形式的文件上传表单,如图:

图文件上传

6、上传文件的大小

在PHP的配置文件php.ini中,上传文件的大小默认值是2MB。

也可以编辑这个数值,来修改允许上传的文件大小。

打开“C:

\xampp\php\php.ini"文件找到“upload_max_filesize”字段的位置,如图:

修改可以上传文件的大小

上传文件的大小默认值是128MB,可以更改这个数值来修改可以上传文件的大小,更改后保存php.ini文件,并且重新启动Apache服务器使修改的数据生效。

另外一种设置上传文件大小的方式,是在表单内加入一个隐藏按钮:

隐藏按钮的名称必须是“MAX_FILE_SIZE”,而且必须放在所有上传文件类型的前面。

“MAX_FILE_SIZE”隐藏按钮的value属性值,就是允许上传文件的最大大小。

注意浏览器不一定会按照“MAX_FILE_SIZE”隐藏按钮的设置值,使用php.ini文件来设置是最保险的方式。

7、$FILES数组变量

PHP使用变量$_FILES来上传文件,$_FILES是一个数组。

如果上传test.txt文件,那么使用:

print_r($_FIIES);

来显示$_FILES数组的内容,将会得到:

$_FILES

Array

[file]=>Array

[name]=>test.txt

[type]=>text/plam

[tmp_name]=>C:

\WINDOWS\TEMP\php5D.tmp

[error]=>0

[size]=>1662

●['name']:

这是在客户端的原始上传文件的名称,不包含路径。

●['type']:

上传文件的MIME类型。

●['tmp_name']:

服务器端用来保存上传文件的临时文件路径。

●['error']:

上传文件时的错误信息。

●['size']:

上传文件的大小,单位是字节。

其中,name与type是由来访者提供,tmpname、error与size则是由PHP系统提供。

如果“上传文件”按钮的name属性值是file:

那么使用$_FILES['file']['name']来取得客户端的上传文件名称,不包含路径。

使用$_FILES['file'][’tmp_name']来取得服务器端用来保存上传文件的临时文件路径。

8、存放上传文件的文件夹

PHP不会直接将上传文件放在网站的根目录中,而是保存为一个临时文件,这个临时文件的名称就是$_FILES['file']['tmp_name']的值。

用户必须将这个临时文件复制到存放的网站文件夹中。

$_FILES['file']['tmp_name']的临时文件名称是由PHP设置的,与上传文件的原始名称不一样。

用户必须使用$_FILES['file']['name']来取得上传文件的原始名称。

存放上传文件的文件夹路径是由php.ini文件的upload_tmp_dir来设置的,如图10-2所示。

10.1.4上传文件时的错误信息

$_FILES['file']['error']变量用来保存上传文件时的错误信息,它的数值如表10-1所示。

9、文件上传攻击

黑客能发动的文件上传攻击包括以下几个方面。

(1)黑客将可执行的PHP文件上传到网站的公共文件夹内,然后执行这个PHP文件来进行攻击。

(2)如果黑客了解您的网站的文件结构,他就可以上传与您的网站文件有相同名称的文件来覆盖您网站内的原有文件。

(3)黑客可以连续不断地上传文件,使您的Web应用程序没有更多的资源处理其他来访者的请求,由此来瘫痪您的网站,发动阻断服务攻击。

(4)上传的文件会保存到一个临时的文件夹,默认值的位置是系统的文件夹。

如果黑客有权限存取这个文件夹,就可以在文件上传期间在PHP还没有移动到目的文件夹之前读取上传的文件数据。

10.上传可执行文件

如果网站提供来访者上传图片的功能,那么必须小心来访者上传的实际上可能并不是图片,而是可以执行的PHP程序。

如果存放图片的是一个公开的文件夹,黑客就可以远程执行上传的PHP文件来进行攻击。

上传的文件名称是在表单内指定,然后经由浏览器传递给服务器的,如ex10-3.php(详细代码请打开C:

\xampp\htdocs\example_code\source\code10\ex10-3.php)

假设现在我们打开“演示2”,单击浏览按钮,然后上传C:

\xampp\htdocs\example_code\source\code10\ex10-3-attack.php文件,

上传ex9-3-attack.php文件

然后点击上传,此时你将会看到ex9-3-attack.php文件上传成功:

这时我们就可以在远程执行下列HTTP请求,点击“攻击2”

ex10-3-attack.php文件只是显示一行文字:

Hello!

我是黑客

如果ex9-3-attack.php文件中的代码具有删除目录/文件或其他攻击性的程序代码,那么就会对网站造成极大的伤害。

现在来看打开ex10-4-attack.php文件的例子:

详细代码请查阅:

C:

\xampp\htdocs\example_code\source\code10\ex9-4-attack.php

ex10-4-attack.php文件会执行外部的程序,例如:

这会显示网站的C:

/xampp/htdocs/example_code/source/code10/image文件夹的信息。

11.覆盖原有文件

如果黑客了解网站的目录结构,他就可以上传与网站文件有相同名称的文件。

黑客可以藉此来覆盖网站内的原有文件,可以是系统文件、PHP文件,或是Web应用程序所使用的文件。

12.瘫痪网站

黑客可以连续不断地上传文件,或上传极大的文件,使Web应用程序无暇处理其他来访者的请求,借此来瘫痪网站,发动阻断服务(DenialofService)攻击。

13.存取上传的文件数据

上传的文件会保存到一个临时的文件夹,默认值的位置是系统文件夹,在Windows上就是C:

\WINDOWS\TEMP。

这个上传文件的临时文件夹通常是所有来访者都可以读取的。

在文件土传期间,在PHP还没有将上传的文件移动到目的文件夹之前,任何来访者都可能存取上传的文件数据。

14.防范的方法

在防范文件上传攻击时,可以使用下列方法。

(1)如果您的Web应用程序不需要上传文件的功能就将它关掉。

(2)限制能够上传的文件大小。

(3)检查是否真的是上传的文件。

(4)更改保存上传临时文件目录的路径。

(5)读取上传文件的绝对路径与文件名称。

(6)隐藏文件的路径。

15.关掉上传文件的功能

如果Web应用程序不需要上传文件的功能,则可以直接将上传文件的功能关闭来避免不必要的麻烦。

打开“C:

\xampp\php\php.ini”文件,找到file_uploads的位置,将file_uploads设置成Off。

图关闭文件上传的功能

16.限制允许上传的文件大小

如果黑客采取连续不断地上传文件,或是上传极大的文件,来使您的Web应用程序没有更多资源来处理其他来访者的请求,黑客就可以借此来瘫痪您的网站。

PHP的限制机制可以让您限制允许上传文件体积的最大值,来避免来访者上传太大的文件。

单独POST请求的最大值,可以使用php.ini文件的upload_max_size来设置。

打开“C:

\xampp\php\php.ini”文件,找到upload_max_size的位置,将upload_max_size设置成您想要的值,如图。

图限制单独POST请求的最大值

upload_max_size的默认值是8M,表示整个POST请求的最大值是8MB。

注意,upload_max_size的数值并不是单一上传文件的最大值,而是整个POST请求的最大值。

整个POST请求包括上传的文件、表头、其他表单类型。

如果上传的文件有10个,那么这10个上传文件的大小总和不能够超过8MB。

上传文件的最大值可以用php.ini文件中的upload_max_filesize来设置。

upload_max_filesize的默认值是2M,表示所有上传文件的最大值是2MB。

注意,upload_max_filesize的数值并不是单一上传文件的最大值,而是所有上传文件的最大值。

upload_max_filesize的设置值会比post_max_size的设置值小,这是因为post_max_size还包含了表头及其他的表单类型。

更改post_max_size与upload_max_filesize的设置值,来符合网站的需求。

因为黑客可以上传极大的图片或文件来占用服务器的处理时间。

如果服务器只处理这些上传的图片或文件,就无法提供服务给其他的来访者。

将post_max_size与upload_max_filesize的设置值设置得小些,具体的值就要视网站的需求而定。

17.检查是否真的是上传的文件

黑客会在上传的类型中输入类似:

../../etc/password

的路径字符串,来显示网站内其他文件夹的文件,尤其是存放账号与密码的文件。

PHP提供两个函数is_uploaded_file和move_uploaded_file,来检查是否是真正的上传文件。

(1)如果要检查$_FILES变量中tmp_name所表示的是否是一个上传的文件,可以使用is_uploaded_file函数。

is_uploaded_file函数的用法如下:

boolis_uploaded_file(stringfilename)

filename是上传文件的路径

如果filename是使用HTTP的POST方法来上传的,那么is_uploaded_file函数会返回TRUE,请参考ex10-5.php文件。

源代码:

C:

\xampp\php\php.ini

(2)如果要将上传的文件移动到某个文件夹,可以使用move_uploaded_file函数。

move_uploaded_file函数的用法如下:

boolmove_uploaded_file(stringfilename,stringdestination)

●filename是上传文件的路径。

●destination是要移动的目的路径。

如果filename是使用HTTP的POST方法来上传的,那么move_uploaded_file函数会返回TRUE。

如果filename不是上传的文件,或是无法移动到目的路径,那么move_uploaded_file函数会返回FALSE。

请参考ex10-6.php文件。

源码详细请看:

C:

/xampp/htdocs/example_code/source/code10/ex9-6.php

(3)另外还可以使用filesize函数,来检查上传文件的大小是否正确。

源码详细请看:

C:

/xampp/htdocs/example_code/source/code10/ex9-5.php

(4)如果上传的是图片文件,您可以使用getimagesize函数来检查上传图片的大小。

getimagesize函数的用法如下:

arraygetimagesize(stringfilename[,array&imageinfo])

filename是上传图片文件的路径

getimagesize函数会返回一个数组,包含以下5个元素。

●图片的高度。

●图片的宽度。

●图片的类型。

●height="yyy"width="xxx"的字符串。

●图片的MIME类型。

18.更改临时文件夹的路径

上传的文件会保存到一个临时的文件夹,在Windows上,PHP默认值的位置是在C:

\xampp\tmp。

这个临时文件夹通常是所有的来访者都可以读取的,因此建立一个只有网站管理员可以存取的文件夹来存放上传的临时文件,对于维护上传文件的安全会有很大的帮助。

PHP的上传文件的临时文件夹是在php.ini文件中的upload_tmp_dir设置的。

打开“C:

\xampp\php\php.ini”文件,找到upload_tmp_dir的位置。

将upload_tmp_dir设置成您要的路径,例如:

upload_tmp_dir=C:

\my_upload_dir\temp

如图所示:

另外还可以使用chown函数来指定文件的所有者。

chown函数的用法如下:

boolchown(stringfilename,mixeduser)

●filename是上传文件的路径。

●user是文件的所有者,可以是名称或数字。

19.读取上传文件的绝对路径与文件名称

如果上传文件的路径中包含有“./”或“../”等可疑的路径字符,有可能就是黑客在使用目录切换攻击。

黑客的目的是为了获取目录中的重要文件,例如包含账号与密码的文件。

您可以使用realpath和basename两个函数来确保上传文件的路径中不会出现“./”或“../”等可疑的路径字符。

浏览器提供的上传文件的路径,应该使用realpath函数返回规范化的绝对路径名,以及使用basename函数来返回不包含路径的文件名称。

(1)realpath函数用来展开文件路径中的“"./"”、“"../"”及“"/"”等字符,然后返回绝对的路径名称。

realpath函数的用法如下:

stringrealpath(stringpath)

path是浏览器提供的上传文件的路径。

下列范例:

php

chdir('/var/www/');

echorealpath('./../../etc/passwd');

?

>

会得到:

/etc/passwd

(2)basename函数用来返回不包含路径的文件名称,用法如下:

stringbasename(stringpath[,stringsuffi_x])

●path是浏览器提供的上传文件的路径。

●suffix用来指定扩展名。

单击“防护4”你将会看到值为index

20.隐藏文件的路径

上传的文件不要保存在公开的文件夹内,以避免被黑客直接读取。

另外将文件的路径隐藏起来,或是将文件名称改成没有扩展名的随机文件名,都可以增加上传文件的安全性。

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1