首页 > 编程语言 >php文件上传之白名单00截断实验

php文件上传之白名单00截断实验

时间:2023-06-12 13:56:15浏览次数:52  
标签:FILES 00 name upload echo file 白名单 php

%00截断

介绍:

0x00,%00,/00 在url中 %00 表示ascll码中的 0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。但是所谓的if拦截仍会读取后面的后缀达到绕过白名单的效果。

当前版本环境:

PHP版本低于5.4.24,或者PHP版本在5.5.8到5.6.0之间,且GPC关闭(php.in中"magic.quotes gpc"选项设置为0ff) ,则可能存在PHP文件上传时被00截断的问题,此后的PHP版本中,该问题已经得到修复,同时不再需要关闭GPC

image-20230612103240511

前端界面:

image-20230612103000796

源码:

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);     // 获取文件后缀名

var_dump($extension);
var_dump($_FILES["file"]["name"]);


if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800000)
&& in_array($extension, $allowedExts))
{
        if ($_FILES["file"]["error"] > 0)
        {
                echo "错误:: " . $_FILES["file"]["error"] . "<br>";
        }
        else
        {
                echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
                echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
                echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
                echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";

                // 判断当期目录下的 upload 目录是否存在该文件
                // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
                if (file_exists("upload/" . $_FILES["file"]["name"]))
                {
                        echo $_FILES["file"]["name"] . " 文件已经存在。 ";
                }
                else
                {
                        // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
                        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
                        echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
                }
        }
}
else
{
        echo "非法的文件格式";
}
?>

源代码中:

正常%00截断上传流程:

image-20230612102615117

8635edd7df6153fdd97e13c36c90af4

获取的后缀是.php所以绕不过第一个if白名单的检测。

更改之后的代码:

<?php
// 允许上传的图片后
$savepath=$_GET["savepath"];
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $savepath);
echo $_FILES["file"]["size"];
var_dump($temp);
$extension = end($temp);     // 获取文件后缀名
echo $extension;
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800000)
&& in_array($extension, $allowedExts))
{
        if ($_FILES["file"]["error"] > 0)
        {
                echo "错误:: " . $_FILES["file"]["error"] . "<br>";
        }
        else
        {
                echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
                echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
                echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
                echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";

                // 判断当期目录下的 upload 目录是否存在该文件
                // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
                if (file_exists("upload/" . $_FILES["file"]["name"]))
                {
                        echo $_FILES["file"]["name"] . " 文件已经存在。 ";
                }
                else
                {
                        // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
                        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $savepath);
                        echo "文件存储在: " . "upload/" . $savepath;
                }
        }
}
else
{
        echo "非法的文件格式";
}
?>

使用$savepathPOST传递文件名称参数,$extension = end($temp)=123.php%00.jpg=jpg,从而绕过白名单的检测,最后的move_uploaded_file保存$_FILES["file"]["tmp_name"]使用截断绕过避免生成生成静态文件123.php%00.jpg。image-20230612103713065

结果:

image-20230612104400348

参考:

http://www.admintony.com/关于上传中的00截断分析.html

标签:FILES,00,name,upload,echo,file,白名单,php
From: https://www.cnblogs.com/via-liabs/p/17474709.html

相关文章

  • 代理IP出现错误代码300是什么意思
    HTTP代理是我们在使用网络时常用的工具之一,它可以帮助我们隐藏IP地址、加快请求响应速度等,但在使用HTTP代理时有时候会遇到各种错误码。其中,错误码300也是比较常见的一种。那么,这个错误码代表什么情况呢?本文将为您介绍相关内容。首先,HTTP错误码300属于重定向响应状态码。它......
  • BYC30W-600P-ASEMI代理NXP快恢复二极管BYC30W-600P
    编辑:llBYC30W-600P-ASEMI代理NXP快恢复二极管BYC30W-600P型号:BYC30W-600P品牌:NXP/恩智浦封装:TO-247-2L最大漏源电流:30A漏源击穿电压:600V引脚数量:2恢复时间:22ns正向压降:1.8V类型:快恢复二极管特性:超快恢复二极管、功率二极管工作温度:-65°C~175°CBYC30W-600P优势:低热......
  • 二叉搜索二叉搜索树-leetcode-700
    给定二叉搜索树(BST)的根节点root和一个整数值val。你需要在BST中找到节点值等于val的节点。返回以该节点为根的子树。如果节点不存在,则返回null。示例1:输入:root=[4,2,7,1,3],val=2输出:[2,1,3]示例2:输入:root=[4,2,7,1,3],val=5输出:[]提示:数中节点......
  • 0x00 Hello Go
    GO程序的基本结构Go语言的文件后缀是.go结尾,例如hello.goGo项目的文件目录通常是这样的:.└──src└──go_code└──learn项目名└──package1└──package2以下代码是一个helloworld程序的代码示例/***he......
  • 6A高低亮带爆闪车灯手电筒芯片 AP2400多功能LED降压型恒流芯片
    产品描述 AP2400是一款PWM工作模式,高效率、外围简单、外驱功率管,适用于输入的高精度降压LED恒流驱动芯片。外驱MOS,最大输出电流可达6A。AP2400可实现三段功能切换,通过MODE1/2/3切换三种功能模式:全亮,半亮,爆闪AP2400工作频率固定在150KHZ左右,同时内置抖频电路,......
  • Luogu P3435 [POI2006] OKR-Periods of Words
    [POI2006]OKR-PeriodsofWords题面翻译对于一个仅含小写字母的字符串\(a\),\(p\)为\(a\)的前缀且\(p\nea\),那么我们称\(p\)为\(a\)的proper前缀。规定字符串\(Q\)(可以是空串)表示\(a\)的周期,当且仅当\(Q\)是\(a\)的proper前缀且\(a\)是\(Q+Q\)的前缀......
  • 1009道面试题,想刷完,要多久?
    我的面试题网站,目前已更新到1009题了,今天对所有题目做一个汇总(后续还会继续优化,继续完善):Redis的数据类型有哪些?请简述一下JVM的内存模型说说堆和栈的区别说说你对CAP的理解你知道哪些分布式事务解决方案?什么是二阶段提交?什么是HTTP?HTTP的作用是什么?说说HTTP的优点和缺点什么是长......
  • 005_创建用户账户
     /*一:创建账户1登录2注销3注册二:用户数据1限制访问2关联用户*/ 一:创建账户1登录 2注销 3注册  二:用户数据1限制访问 2关联用户 ......
  • 使用外置存储设备扩展exroot(MT1300)
    环境说明:GL-INETMT1300设备一台8GU盘一个,已经格式化文件系统为EXT41.安装相关工具opkgupdateopkginstallblock-mountkmod-fs-ext4e2fsprogsfdisk 2.修改fstab配置文件,更改现有文件系统的挂载点DEVICE="$(sed-n-e"/\s\/overlay\s.*$/s///p"/etc/mtab)"uci-q......
  • 访问利用windows IIS 搭建的webdav出现500、403等代码的解决方案
    服务端在IIS中启用webDav添加创作规则(如第1张图)启用「身份验证」(如第2、3张图)防火墙设置将「在IIS中对该webDav站点设置的端口」设为「例外」或直接关闭防火墙重启该IIS站点(可选)客户端下载地址(选一即可):Windows64位https://www.123pan.com/s/FfztVv-DxNn3.html......