5-.点+空格+点绕过 || .user.ini绕过

5-.点+空格+点绕过 || .user.ini绕过

php 复制代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空
        
        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

‍

三种绕过方法

  1. 这里的绕过方法利用了Windows系统的特性。尽管源码做了去空格、去点等处理,但对于. .这种特殊格式的清理并不彻底,导致文件名在检测后从shell.php. .变为shell.php.。Windows系统在保存文件时,会自动去掉文件名末尾的点和不影响识别的空格,最终保存为shell.php,从而实现了绕过。

  1. 如果Apache版本较老(1.x-2.x) ,还存在一个解析漏洞:当遇到无法识别的后缀时,会从右向左解析,直到识别出.php​后缀。你可以上传一个像shell.php.unknown这样的文件,利用这个解析漏洞来执行。

    复制代码
     **经过测试Apache 2.4.39版本不存在这个解析漏洞**

  1. 利用 ​.user.ini​ 动态包含 :.user.ini是PHP支持的配置文件,可以自动包含其他文件。但这也要求上传目录下必须有.php文件(例如readme.php)来触发包含,这是一种隐蔽性和成功率都较高的方法。

在操作前,需要确认环境是否满足以下条件:

  • ​PHP 运行模式必须为 CGI / FastCGI ​:。phpinfo()​ 中的 Server API 值可以确认这一点。

  • ​目标路径下已存在一个正常的 PHP 文件 ​:readme.php。

  • PHP 版本需为 5.3.0 或更高 :这是 .user.ini 支持的最低版本。

  • ​ ​.user.ini​ ​ 文件本身 ​:上传时后缀名必须是 .ini​,并且该文件在黑/白名单之外(在upload-labs Pass-05中,.ini 后缀不在黑名单内,因此允许上传)。

  • PHP 配置相关 :php.ini​ 中 user_ini.filename​ 未被设置为空字符串,user_ini.cache_ttl 未设置为0。

    • 当 user_ini.filename​ 指令被注释或未显式设置时,PHP 会使用​默认值:

      ​​user_ini.filename = ".user.ini"

      ​user_ini.cache_ttl = 300(缓存 300 秒,即 5 分钟)

  • 拥有足够的文件系统权限 :Web 服务器用户需要对目录有写入 .user.ini 的权限

‍

下面就是具体的操作了:

  1. 制作 ​.user.ini​ ​ 文件 :创建一个名为 .user.ini​ 的文本文件,内容如下,它告诉 PHP 去包含一个叫做 shell.jpg 的文件。

    复制代码
    auto_prepend_file = shell.jpg

    或者使用 auto_append_file 指令,功能类似。

  2. 制作图片木马文件 :创建一个图片木马,比如 shell.jpg。用文本编辑器打开,在图片文件尾写入 PHP 代码。

  3. ​依次上传文件 ​:先上传 .user.ini​ 文件。上传成功后,再上传图片木马 shell.jpg。

  4. 触发 Webshell :访问该目录下的 readme.php

‍

相关推荐
白帽攻防录2 小时前
SRC 挖洞:Apache APISIX 非规范路径授权绕过深度复盘,CVE-2026-94269 怎么绕过网关访问后端
网络安全·apache·src漏洞挖掘
学逆向的12 小时前
win32注入代码
开发语言·网络安全·api·win32
Web Security Loop13 小时前
MAC安装最新Burpsuite pro详细步骤教程
web安全·macos·网络安全·安全性测试
墨云安全19 小时前
红队评估和渗透测试的区别是什么?2026 年从目标、方法到交付物的对比
网络·安全·web安全·网络安全·渗透测试
刘婉晴1 天前
【APP安全测试】Frida 基础
网络安全
科技象限1 天前
数据防泄密系统怎么选?看它怎么把几道防线叠成网
运维·安全·网络安全·安企神
sbjdhjd1 天前
云安全 | 从特权容器到旧版 runC:Docker 宿主机访问与运行时缺陷复盘
运维·网络安全·docker·云原生·kubernetes·云计算·云安全
sbjdhjd2 天前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
Dachui_11222 天前
内网穿透如何限制访问地区?ZeroNews Geo Location 区域访问控制实践
运维·网络安全·内网穿透·访问控制·远程办公·api安全·ip白名单
HackTwoHub2 天前
DeepSeek Harness 红队破甲插件|适配 SRC 挖掘场景,区分平台拦截与模型原生输出,用于大模型安全边界合规测评研究
安全·web安全·网络安全·系统安全·密码学·网络攻击模型·安全架构