PHP代码审计 14 文件上传漏洞

本文记录 PHP 代码审计的学习过程,教程为暗月 2015 版的 PHP 代码审计课程

PHP 代码审计博客目录

1. 简介

  1. 审计函数

    move_uploaded_file()

    定义和用法:

    move_uploaded_file() 函数将上传的文件移动到新位置。
    若成功,则返回 true,否则返回 false。

    语法:
    move_uploaded_file(file,newloc)

    move_uploaded_file() 官方文档链接

  2. 超全局变量 $_FILES

    1. 后缀名是图片格式
    2. 前缀名不能是外部提交的
    3. 上传的目录不可以是获取外部提交的路径
  3. 防御

    1. 使用白名单方式检测文件后缀
    2. 上传之后按时间能算法生成文件名称
    3. 上传目录脚本文件不可执行
    4. 注意 %00 截断
    5. Content-Type 验证
  4. DVWA 中的源代码

     <?php 
         $file = $_GET['page']; //The page we wish to display  
     
         // Only allow include.php 
         if ( $file != "include.php" ) { 
             echo "ERROR: File not found!"; 
             exit; 
         } 
     ?>  
    

    DVWA 中防御方式是使用白名单机制

  5. move_uploaded_file() 函数示例:

    move_uploaded_file() 对安全模式和 open_basedir 都是敏感的。不过,限制只针对 destination 路径,因为允许移动上传的文件名 filename 可能会与这些限制产生冲突。move_uploaded_file() 仅作用于通过 PHP 上传的文件以确保这个操作的安全性。

     <html>
     <body>
         <!--上传表单,有一个上传文件域-->
         <form method="post" action="" enctype="multipart/form-data" name="form">
             <input type="file" name="up_file">
             <!-- 提交按钮-->
           <input type="submit" name="submit" value="上传">
     </form>
     </body>
     </html>
     <?php
     header("Content-Type:text/html; charset=utf-8");
     if(!empty($_FILES['up_file']['name'])){       //判断是否有文件
          $fileinfo = $_FILES['up_file'];      //将文件信息赋给变量$fileinfo
         if($fileinfo['size']<1000000 && $fileinfo['size']>0){    //判断文件大小
             move_uploaded_file($fileinfo['tmp_name'],$fileinfo['name']);  //上传文件
             echo "上传成功";
         }else{
             echo '文件太大或未知';
         }
     }
     ?>
    

    结果为

    在这里插入图片描述

    使用 move_uploaded_file()函数上传文件,在创建 form表单时,必须设置 form 表单的 enctype="multipart/form-data“。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值