注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

K8拉登哥哥's Blog

K8搞基大队[K8team] 信息安全 网络安全 0day漏洞 渗透测试 黑客

 
 
 

日志

 
 

PHP漏洞全解(九)-文件上传漏洞  

2011-03-18 11:18:38|  分类: 渗透测试 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

PHP漏洞全解(九)-文件上传漏洞

一套web应用程序,一般都会提供文件上传的功能,方便来访者上传一些文件。

下面是一个简单的文件上传表单

1<form action="upload.php" method="post" enctype="multipart/form-data" name="form1">
2<input type="file" name="file1" /><br />
3<input type="submit" value="上传文件" />
4<input type="hidden" name="MAX_FILE_SIZE" value="1024" />
5</form>


php的配置文件php.ini,其中选项upload_max_filesize指定允许上传的文件大小,默认是2M

$_FILES数组变量

PHP使用变量$_FILES来上传文件,$_FILES是一个数组。如果上传test.txt,那么$_FILES数组的内容为:

01$FILES
02 
03Array
04 
05{
06 
07[file] => Array
08 
09{
10 
11[name] => test.txt                //文件名称
12 
13[type] => text/plain                //MIME类型
14 
15[tmp_name] => /tmp/php5D.tmp        //临时文件
16 
17[error] => 0                //错误信息
18 
19[size] => 536                //文件大小,单位字节
20 
21}
22 
23}

如果上传文件按钮的name属性值为file

<input type=”file” name=”file” />

那么使用$_FILES['file']['name']来获得客户端上传文件名称,不包含路径。使用$_FILES['file']['tmp_name']来获得服务端保存上传文件的临时文件路径

存放上传文件的文件夹

PHP不会直接将上传文件放到网站根目录中,而是保存为一个临时文件,名称就是$_FILES['file']['tmp_name']的值,开发者必须把这个临时文件复制到存放的网站文件夹中。

$_FILES['file']['tmp_name']的值是由PHP设置的,与文件原始名称不一样,开发者必须使用$_FILES['file']['name']来取得上传文件的原始名称。

上传文件时的错误信息

$_FILES['file']['error']变量用来保存上传文件时的错误信息,它的值如下:

错误信息 数值 说 明
UPLOAD_ERR_OK 0 没有错误
UPLOAD_ERR_INI_SIZE 1 上传文件的大小超过php.ini的设置
UPLOAD_ERR_FROM_SIZE 2 上传文件的大小超过HTML表单中MAX_FILE_SIZE的值
UPLOAD_ERR_PARTIAL 3 只上传部分的文件
UPLOAD_ERR_NO_FILE 4 没有文件上传

文件上传漏洞

如果提供给网站访问者上传图片的功能,那必须小心访问者上传的实际可能不是图片,而是可以指定的PHP程序。如果存放图片的目录是一个开放的文件夹,则入侵者就可以远程执行上传的PHP文件来进行攻击。

下面是一个简单的文件上传例子:

01<?php
02// 设置上传文件的目录
03$uploaddir = "D:/www/images/";
04 
05// 检查file是否存在
06if (isset($_FILES['file1']))
07{
08// 要放在网站目录中的完整路径,包含文件名
09$uploadfile = $uploaddir . $_FILES['file1']['name'];
10// 将服务器存放的路径,移动到真实文件名
11move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile);
12}
13?>
14......
15<form method="post" enctype="multipart/form-data" name="form1">
16<input type="file" name="file1" /><br />
17<input type="submit" value="上传文件" />
18<input type="hidden" name="MAX_FILE_SIZE" value="1024" />
19</form>

这个例子没有检验文件后缀,可以上传任意文件,很明显的上传漏洞

文章来源:DoDo’s Blog

  评论这张
 
阅读(788)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016