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

相关推荐
pencek6 小时前
HakcMyVM-Slackware
网络安全
X7x59 小时前
终端防护平台(EPP):企业安全的“数字护城河“
网络安全·网络攻击模型·安全威胁分析·安全架构·epp
汤愈韬10 小时前
防火墙主备备份的非VRRP的三种模式
网络·网络安全·security
Chockmans11 小时前
春秋云境CVE-2022-32991(手注和sqlmap)保姆级教学
数据库·安全·web安全·网络安全·oracle·春秋云境·cve-2022-32991
云安全助手14 小时前
中小企业上云指南:如何用云服务器搭建安全稳定的办公系统
网络安全
其实防守也摸鱼15 小时前
upload-labs靶场的pass-2~12的解题步骤及原理讲解
笔记·安全·web安全·网络安全·教程·web·工具
HackTwoHub15 小时前
网络设备基线检查AI工具、内置专业基线库批量配置合规检测、自动生成安全整改报告
人工智能·安全·web安全·网络安全·系统安全·安全架构
NOVAnet202315 小时前
SD-WAN 在芯片跨国研发场景中的技术能力与部署实践
分布式·网络安全·sd-wan·网络服务·全球组网
深邃-16 小时前
【Web安全】-计算机网络协议(2):请求方法,头部字段,DNS协议详解
linux·网络·网络协议·计算机网络·安全·web安全·网络安全