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

相关推荐
零零信安10 天前
零零信安荣登数世咨询《新质·数字安全专精百强(2026)》暗网情报领域,彰显专业实力与创新引领
安全·网络安全·数据泄露·暗网·零零信安
憧憬成为web高手10 天前
l33t-hoster
学习·web安全·网络安全
HackTwoHub10 天前
Sqli-Scanner SQL注入SKILL自动化挖掘SQL注入,零依赖自动化SQL注入挖掘,赏金猎人
数据库·人工智能·sql·web安全·网络安全·自动化·系统安全
爱网络爱Linux10 天前
网络安全与渗透测试实用工具大全
web安全·网络安全·信息安全·cisp-pte·cisp·cissp
xsc-xyc10 天前
用 Tailscale + Syncthing 实现手机、电脑与 NAS 的跨网络文件同步
linux·网络·网络安全·智能手机·电脑
持敬chijing10 天前
Web渗透之SQL注入-常用sql语句
sql·安全·web安全·网络安全
Chengbei1110 天前
AISec真正拟人化全自动渗透工具!支持浏览器交互全自动化挖掘,SQL注入、XSS、越权等。
sql·安全·web安全·网络安全·自动化·系统安全·xss
X7x510 天前
深度拆解网络安全“闭环”之王——APPDRR模型
网络安全·网络攻击模型·安全威胁分析·安全架构·appdrr模型
Inhand陈工10 天前
污水泵站PLC数据上云实战:西门子PLC + 映翰通IG502 + DM平台全流程
人工智能·物联网·网络安全·阿里云·信息与通信·iot
X7x510 天前
一文讲透PADIMEE模型
网络安全·网络攻击模型·安全威胁分析·安全架构·padimee模型