文:  西毒

欢迎大家到https://forum.90sec.org/  && http://www.linux520.com/bbs/

0x01 前沿

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

这套程序之前爆出来一个远程执行代码的漏洞之后,就没什么人去挖掘了。整套程序还是很多人用的,下图是查出来的结果

clip_image001

整个对这套cms审计花了我几天的时间,下面一一道来。

0x02 注入一

此次代码审计是官网最新版

在message/access.php中13行

clip_image002

大家应该看到了,这个$id是没过滤的,这里的$id是怎么来的呢?请看include/common.inc.php中

clip_image003

这个daddslashes()这个函数在global.func.php中

其实对传进来的值进行转义

clip_image004

所以这里可以无视了…

注入如下图所示

clip_image005

次漏洞影响2.0以上所有版本,在3.0中加入了一个防注入函数,但是可以绕过注入的

0x03 注入二

在about/show.php中8行

clip_image006

这里明显的也一样,但是这里是盲注,看看之后的? 这里的$show如果不存在或者是$show数组中isshow不存在就返回到错误页面,所以这是一个盲注了

注入结果如图

clip_image007

同样是可以获取我们的信息的…如果是手工来判断就很累了…

0x04 注入三

在member/feedback.php中的16行

clip_image008

这里的$serch_sql中的变量$met_fd_class是可控的

我们跟踪一下$serch_sql这个变量

在26行我们发现

clip_image009

执行了。所以同样存在上面的问题了

但是这里的前提是要登录状态,因为他验证了权限的问题

在feedback.php开头就包含了权限验证的

clip_image010

所以这里的注入必须是你注册一个用户,然后登录进行注入,注入结果如图

给出注入语句吧,首先必须闭合前面的)号,然后注释掉后面的语句

Exp:

http://localhost/member/feedback.php?&met_fd_classname=1&met_fd_class=99999)union select 1,2,3,4,5,user(),7,8,9,10-- a

clip_image011

0x05 注入四

这里是个鸡肋注入了..

既然是危险还是爆出来吧

在job/save.php 的73行,存在insert注入

clip_image012

这里的$jobid,是可控的,怎么可控不可控我就不说了,自己测试吧

为什么说它鸡肋呢? 一,这是一个insert语句,如果我们将jobid,后面的参数加进去,然后再注释掉组后的,如我们将$id = (select password from admin where id=1)#这样的语句插进去呢? 事实,是可以成功的,但是成功插入管理员的md5,但是得读出来吧,组后发现该met_cv这个表唯一读出来的就是时间,但是时间这个字段又不能插.所以直接插就没办法了,所以这里还是鸡肋的。

0x06 注入五

在member/cv_editor.php中的53行存在一个update注入

clip_image013

同样的问题了,我就不扯淡了

鸡肋

0x07 注入六

在member/fdeditor.php中的109行

clip_image014

同样验证了权限问题,必须注册用户然后注入的,工具是没办法了

注入如图

clip_image015

其中的各个细节,怎么测试的,我就不写了,实在是太累了,整个代码审计过程当中,需要对一些传进来的参数一步步来测试,也并不是那么容易一下就确定哪里有问题的。所以珍惜别人劳动成果。(转摘请注明作者 http://hi.baidu.com/sethc5/blog)

0x08 文件包含

在member/index.php中的8行

clip_image016

这里的$metid是外部传过来的,可控

如果不存在metid这个变量就将index赋给它

如果存在并不等于index的时候就包含$metid,’.php’这个文件,所以我们可以构造一个文件让它来包含

包含方式如下:

一、在gpc为off的情况下截断,如图

clip_image017

二、是超长字符截断了

此种情况并不受gpc影响

clip_image018

0x09 密码重置漏洞

在member/getpassword.php中

clip_image019

看到这里重置密码的代码

首先他先将用户名+密码的md5 ,然后对其md5赋给一个变量x

然后再将用户名.x连接,然后base64加密下,然后赋值给string,然后将这个string作为

找回密码的url,大家发现这里有问题没?

假设我们注入得到该cms的md5,然后解密不了?然后怎么办?没办法了吧,

如果我们通过这个url重置管理员密码呢?是不是可行了?因为要的用户名和密码的md5都具备,所以我们就可以重置密码了?

想想开发这个重置的功能的程序员,你应该多考虑一下这个问题了啦…..

下面我就给出这个exp

clip_image020

运行如下图

0x10 后台getshell

后台getshell其实有3种方法,我一一道来

方法一:

直接在这里添加php

clip_image021

然后再上传文件管理这里上传php的shell即可

方法二:

在上图位置添加asa文件,在前台上传asa文件,这里鸡肋的地方就是iis下利用了,

产生漏洞原因如图

在job/uploadfile_save.php中

clip_image022

这里的对一些常见的后缀名进行了处理

所以我们前台在应聘的链接里面可以直接上传asa了

方法三:

在后台这里添加新模板

clip_image023

将我们的php马打包成zip格式,然后上传

最后我们的马会解压到templates这个模板文件夹中

如图

clip_image024

访问

clip_image025

0x11 总结

整套cms我花了几天的时间来研究,只对前台进行挖掘,后台的话挖了也没多大价值。整体收获不少,0day,我就这么放出来了,如果有基友想一起学习的话,还是加群吧!

62512676

接下来我放出重置密码的exp,此exp只用于研究学习之用,通过此exp去非法入侵,与本人无关.

此exp只针对注射出来的管理员和密码(密码解不出来),然后密码会修改为x0h4ck3r

运行结果如图

clip_image026

exp的话,你们到https://forum.90sec.org/  && http://www.linux520.com/bbs/

去获取吧

源链接

Hacking more

...