一.漏洞简介
MetInfo是一套使用PHP和Mysql开发的内容管理系统。 MetInfo 6.0.0~6.1.0版本中的 old_thumb.class.php文件存在任意文件读取漏洞。攻击者可利用漏洞读取网站上的敏感文件。
二.漏洞影响
MetInfo 6.0.0
MetInfo 6.1.0
三.漏洞分析
在\MetInfo6.0.0\app\system\include\module\的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\..\..\config\config_db.php
文件读取成功!!!!