文: 西毒
欢迎大家到https://forum.90sec.org/ && http://www.linux520.com/bbs/
0x01 前沿
MetInfo企业网站管理系统:采用PHP+Mysql架构,全站内置了SEO搜索引擎优化机制,支持用户自定义界面语言(全球各种语言),拥有企业网站常用的模块功能(企业简介模块、新闻模块、产品模块、下载模块、图片模块、招聘模块、在线留言、反馈系统、在线交流、友情链接、网站地图、会员与权限管理)。强大灵活的后台管理功能、静态页面生成功能、个性化模块添加功能、不同栏目自定义FLASH样式功能等可为企业打造出大气漂亮且具有营销力的精品网站。
这套程序之前爆出来一个远程执行代码的漏洞之后,就没什么人去挖掘了。整套程序还是很多人用的,下图是查出来的结果
整个对这套cms审计花了我几天的时间,下面一一道来。
0x02 注入一
此次代码审计是官网最新版
在message/access.php中13行
大家应该看到了,这个$id是没过滤的,这里的$id是怎么来的呢?请看include/common.inc.php中
这个daddslashes()这个函数在global.func.php中
其实对传进来的值进行转义
所以这里可以无视了…
注入如下图所示
次漏洞影响2.0以上所有版本,在3.0中加入了一个防注入函数,但是可以绕过注入的
0x03 注入二
在about/show.php中8行
这里明显的也一样,但是这里是盲注,看看之后的? 这里的$show如果不存在或者是$show数组中isshow不存在就返回到错误页面,所以这是一个盲注了
注入结果如图
同样是可以获取我们的信息的…如果是手工来判断就很累了…
0x04 注入三
在member/feedback.php中的16行
这里的$serch_sql中的变量$met_fd_class是可控的
我们跟踪一下$serch_sql这个变量
在26行我们发现
执行了。所以同样存在上面的问题了
但是这里的前提是要登录状态,因为他验证了权限的问题
在feedback.php开头就包含了权限验证的
所以这里的注入必须是你注册一个用户,然后登录进行注入,注入结果如图
给出注入语句吧,首先必须闭合前面的)号,然后注释掉后面的语句
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
0x05 注入四
这里是个鸡肋注入了..
既然是危险还是爆出来吧
在job/save.php 的73行,存在insert注入
这里的$jobid,是可控的,怎么可控不可控我就不说了,自己测试吧
为什么说它鸡肋呢? 一,这是一个insert语句,如果我们将jobid,后面的参数加进去,然后再注释掉组后的,如我们将$id = (select password from admin where id=1)#这样的语句插进去呢? 事实,是可以成功的,但是成功插入管理员的md5,但是得读出来吧,组后发现该met_cv这个表唯一读出来的就是时间,但是时间这个字段又不能插.所以直接插就没办法了,所以这里还是鸡肋的。
0x06 注入五
在member/cv_editor.php中的53行存在一个update注入
同样的问题了,我就不扯淡了
鸡肋
0x07 注入六
在member/fdeditor.php中的109行
同样验证了权限问题,必须注册用户然后注入的,工具是没办法了
注入如图
其中的各个细节,怎么测试的,我就不写了,实在是太累了,整个代码审计过程当中,需要对一些传进来的参数一步步来测试,也并不是那么容易一下就确定哪里有问题的。所以珍惜别人劳动成果。(转摘请注明作者 http://hi.baidu.com/sethc5/blog)
0x08 文件包含
在member/index.php中的8行
这里的$metid是外部传过来的,可控
如果不存在metid这个变量就将index赋给它
如果存在并不等于index的时候就包含$metid,’.php’这个文件,所以我们可以构造一个文件让它来包含
包含方式如下:
一、在gpc为off的情况下截断,如图
二、是超长字符截断了
此种情况并不受gpc影响
0x09 密码重置漏洞
在member/getpassword.php中
看到这里重置密码的代码
首先他先将用户名+密码的md5 ,然后对其md5赋给一个变量x
然后再将用户名.x连接,然后base64加密下,然后赋值给string,然后将这个string作为
找回密码的url,大家发现这里有问题没?
假设我们注入得到该cms的md5,然后解密不了?然后怎么办?没办法了吧,
如果我们通过这个url重置管理员密码呢?是不是可行了?因为要的用户名和密码的md5都具备,所以我们就可以重置密码了?
想想开发这个重置的功能的程序员,你应该多考虑一下这个问题了啦…..
下面我就给出这个exp
运行如下图
0x10 后台getshell
后台getshell其实有3种方法,我一一道来
方法一:
直接在这里添加php
然后再上传文件管理这里上传php的shell即可
方法二:
在上图位置添加asa文件,在前台上传asa文件,这里鸡肋的地方就是iis下利用了,
产生漏洞原因如图
在job/uploadfile_save.php中
这里的对一些常见的后缀名进行了处理
所以我们前台在应聘的链接里面可以直接上传asa了
方法三:
在后台这里添加新模板
将我们的php马打包成zip格式,然后上传
最后我们的马会解压到templates这个模板文件夹中
如图
访问
0x11 总结
整套cms我花了几天的时间来研究,只对前台进行挖掘,后台的话挖了也没多大价值。整体收获不少,0day,我就这么放出来了,如果有基友想一起学习的话,还是加群吧!
62512676
接下来我放出重置密码的exp,此exp只用于研究学习之用,通过此exp去非法入侵,与本人无关.
此exp只针对注射出来的管理员和密码(密码解不出来),然后密码会修改为x0h4ck3r
运行结果如图
exp的话,你们到https://forum.90sec.org/ && http://www.linux520.com/bbs/
去获取吧