环境搭建

将网站源码解压后拖入web根目录下

image

通过服务器ip进入网站,完成安装

image

漏洞复现

漏洞描述:

MetInfo 是一个专业的企业级CMS建站系统,它5.0.4 版本存文件包含漏洞

漏洞等级

高危

影响版本

metInfo5.04

代码审计

seay源码审计系统工具发现可疑漏洞点,接下来进行代码审计

image

可以看到这个 /about/index.php 文件里包含 "../include/module.php" 和 $mouble 这个变量,进行跟踪

image

打开 ../include/module.php,module.php里还包含着 "common.inc.php"

image

我们先对module.php进行代码审计,可以看到当fmodule这个变量不等于7时,它就会对$module进行验证
if($fmodule!=7){

点击查看代码
	if($fmodule!=7){
	if($mdle==100)$mdle=3;
	if($mdle==101)$mdle=5;
	$module = $modulefname[$mdle][$mdtp];
	if($module==NULL){okinfo('../404.html');exit();}
	if($mdle==2||$mdle==3||$mdle==4||$mdle==5||$mdle==6){
		if($fmodule==$mdle){
			$module = $modulefname[$mdle][$mdtp];
		}
		else{
			okinfo('../404.html');exit();
		}
	}
	else{
		if($list){
			okinfo('../404.html');exit();
		}
		else{
			$module = $modulefname[$mdle][$mdtp];
		}
	}
	if($mdle==8){
	if(!$id)$id=$class1;
	$module = '../feedback/index.php';
	}
}

接着对"common.inc.php"进行跟踪,发现common.inc.php的这段代码有漏洞点,这段代码意思是将GPC传过来的参数和值注册为变量,存在变量覆盖

点击查看代码
//common.inc.php
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
	foreach($$_request as $_key => $_value) {
		$_key{0} != '_' && $$_key = daddslashes($_value);
	}
}

更改一下"about/index.php"的代码,对$module这个变量输出

image

发现输出了show.php

image

我们要让fmodule=7,绕过对$module的验证

http://192.168.133.138/metinfo5.0.4/about/index.php?fmodule=7&module=77777

image

执行PHP 命令

利用条件:

利用php://input 执行PHP 命令;

远程文件包含开启。

用bp抓包,发现可以执行php文件

posted on 2023-07-25 15:37  zyl0106  阅读(183)  评论(0)    收藏  举报