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

相关推荐
deepseek2316 小时前
OpenAI 首次为自家模型踩刹车:Astra「无法排除关键网络能力」,Preparedness Framework 第一次真的咬人
人工智能·网络安全·ai agent
m0_5474866619 小时前
《网络协议安全》全套PPT课件(太原理工大学)
网络协议·安全·网络安全
txg6661 天前
VULOC:基于汇编切片的漏洞定位框架,精准锁定二进制中的危险代码
汇编·人工智能·深度学习·安全·网络安全
数据知道1 天前
IDOR 不安全的直接对象引用:API 越权实战检测
java·开发语言·网络·安全·网络安全
能年玲奈喝榴莲牛奶2 天前
使用AI编写-资产和漏洞管理系统
人工智能·python·网络安全·安全服务
菩提小狗2 天前
每日安全情报报告 · 2026-08-05
网络安全·漏洞·cve·安全情报·每日安全
Yan_chen6662 天前
CTFHub Web前置技能闯关
网络安全·漏洞·ctfhub web前置技能
00后程序员张3 天前
抓包鹰 电脑本机网络连接表怎么看?哪些程序在联网 进程归属与可疑 IP 追溯
网络协议·计算机网络·网络安全·ios·adb·https·udp
数据知道3 天前
SSRF 漏洞实战:内网探测、云元数据窃取一条龙
网络·安全·网络安全
Fnetlink13 天前
Fnet 云网安 260807
服务器·网络·人工智能·安全·网络安全