PHP漏洞全解—————9、文件上传漏洞

时间:2022-05-17 02:22:47

本文主要介绍针对PHP网站文件上传漏洞。由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP解释器,就可以在远程服务器上执行任意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数组的内容为:

  1.  
    $FILES
  2.  
    Array
  3.  
    {
  4.  
    [file] => Array
  5.  
    {
  6.  
    [name] => test.txt //文件名称
  7.  
    [type] => text/plain //MIME类型
  8.  
    [tmp_name] => /tmp/php5D.tmp //临时文件
  9.  
    [error] => 0 //错误信息
  10.  
    [size] => 536 //文件大小,单位字节
  11.  
    }
  12.  
    }

如果上传文件按钮的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']变量用来保存上传文件时的错误信息,它的值如下:

PHP漏洞全解—————9、文件上传漏洞

文件上传漏洞

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

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

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

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

PHP漏洞全解—————9、文件上传漏洞的更多相关文章

  1. PHP漏洞全解&lpar;九&rpar;-文件上传漏洞

    本文主要介绍针对PHP网站文件上传漏洞.由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 P ...

  2. Web应用安全之文件上传漏洞详解

    什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这 ...

  3. DVWA 黑客攻防演练(五)文件上传漏洞 File Upload

    说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映 ...

  4. web安全之文件上传漏洞攻击与防范方法

    一. 文件上传漏洞与WebShell的关系 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等.这种攻击方式是最为直接和有效 ...

  5. phpcms v9&period;6&period;0任意文件上传漏洞&lpar;CVE-2018-14399&rpar;

    phpcms v9.6.0任意文件上传漏洞(CVE-2018-14399) 一.漏洞描述 PHPCMS 9.6.0版本中的libs/classes/attachment.class.php文件存在漏洞 ...

  6. 【原创】JEECMS v6~v7任意文件上传漏洞(1)

    文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定 ...

  7. web安全之文件上传漏洞

    成因: 当文件上传时,若服务端脚本语言未对上传的文件进行严格验证和过滤,若恶意用户上传恶意的 脚本文件时,就有可能控制整个网站甚至是服务器,这就是文件上传漏洞. 权限: 1. 后台权限:登陆了后台,可 ...

  8. 文件上传漏洞演示脚本之js验证

    文件上传漏洞演示脚本之js验证 0 0       716   关于文件上传漏洞,想必玩web安全的同学们都有接触,之前本站也发布过一篇文章介绍文件上传漏洞的各种绕过方法,但是只是有文档却没有演示代码 ...

  9. 中国电信某站点JBOSS任意文件上传漏洞

    1.目标站点 http://125.69.112.239/login.jsp 2.简单测试 发现是jboss,HEAD请求头绕过失败,猜测弱口令失败,发现没有删除 http://125.69.112. ...

随机推荐

  1. centos编译安装mysql

    groupadd mysql #添加mysql组useradd -g mysql -s /sbin/nologin mysql #创建用户mysql并加入到mysql组,不允许mysql用户直接登录系 ...

  2. debain 8安装为知笔记&lpar;how to install wiznote in debain 8&rpar;

    刚装了debain8后想安装为知笔记,百度之后发现为知笔记原来是开源软件.代码托管在github上:https://github.com/WizTeam/WizQTClient 但是上面只有Ubunt ...

  3. jquery事件委托遇到的小坑记录

    <script type="text/javascript" src="../../lib/jquery-1.11.2.min.js"></s ...

  4. 安装Symfony2

    我就不明白这个框架明明很小就几M,为什么这么难下载. 他们为什么不把文件打包好?非要搞得这么复杂. 一开始我在Linux ubuntu下载没有成功 然后想在win10上试试 到www.apache.o ...

  5. Eclipse 常用插件

    /* ===================== Eclipse Color Theme 语法高亮 ======================== */ 安装方法同上,软件安装URL http:// ...

  6. js修改样式表规则

    <div>adasfsfs</div> <div id="div">adasfsfs</div> <div>adasfs ...

  7. luoguP1886 滑动窗口 &lbrack;单调队列&rsqb;

    题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...

  8. Linux 开启echo等服务

    第一步: 需要安装xinetd服务(其实daytime就包含在xinetd服务中),安装就直接在"新立得软件管理器"里搜索,安装. sudo apt-get install xin ...

  9. sql with as 用法-Z

    以下内容转自:http:.com/ 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个 ...

  10. spring【一】 学习

    Spring 源码学习 通过注解的形式注入IOC 简单的创建一个maven的项目的 下载指定的spring的核心jar包(https://mvnrepository.com/artifact/org. ...