MENU

MongoDB未授权访问漏洞复现

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担

事情起因

持续整理笔记中

参考文章:

本来准备参考其他文章用docker自己搭建一个测试了,结果竟然让我搜到了shodan关键词

::quyin:witty::

0x00简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

0x01漏洞危害

开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增删改高危动作)而且可以远程访问数据库。

0x02漏洞成因

在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时admin数据库是空的,没有记录权限相关的信息!当admin.system.users一个用户都没有时,即使mongod启动时添加了—auth参数,如果没有在admin数据库中添加用户,此时不进行任何认证还是可以做任何操作(不管是否是以—auth 参数启动),直到在admin.system.users中添加了一个用户。加固的核心是只有在admin.system.users中添加用户之后,mongodb的认证,授权服务才能生效

0x03漏洞复现

shodan搜索对应数据

搜素某关键词得到未授权的MongoDB数据库:

msf扫描

use auxiliary/scanner/mongodb/mongodb_login
set rhosts xxx.xxx.xxx.xxx
set threads 20
exploit

如图所示,可以看见扫描出来的服务器未授权

于是可以使用navicat等工具连接

没想到还是个被黑掉的数据库,黑客要求7天内支付0.1bit币,让我们祝福这个数据库持有人

0x04防御

  1. 修改默认端口
  2. 不要开放服务到公网
vim /etc/mongodb.conf
bind_ip = 127.0.0.1
  1. 禁用HTTP和REST端口

0x05使用proxychains代理

旧版proxychains使用命令

apt-get install proxychains -y

安装,版本目前为v3.1

新版本proxychains ng支持绕过本地代理功能

如果安装了旧版需要这两条命令下载干净
apt-get remove proxychains -y
rm /etc/proxychains.conf

git clone https://github.com/rofl0r/proxychains-ng
cd proxychains-ng
./configure --prefix=/usr --sysconfdir=/etc
make && make install
make install-config
cp proxychains-ng/src/proxychains.conf /etc/proxychains.conf

然后编辑配置文件,添加sock5代理(用小飞机)

vim /etc/proxychains.conf

vim在命令行状态下按GG跳转至末尾

删除原来的sock4代理

添加指定ip的1080端口,如果是本地就127.0.0.1

我是树莓派使用笔记本上的小飞机,所以用的是笔记本的ip

并且打开小飞机选项设置,允许来自局域网的连接:

此时你就可以在常用命令前加上proxychains4语句实现代理的效果

例如,访问google.com:proxychains4 curl https://www.google.com

ping`google`

使用proxychains代理msf遇到的问题

那么我们能不能直接代理msf呢?

首先,msf里面是能够直接设置socks5代理的:

set proxies socks5:192.168.1.7:1080

但是这种方式只限于反向代理,即使用reverse_tcp等连接时使用的

(理解可能有误,欢迎评论区指出)

那么,我们直接使用proxychains4 msfconsole会怎么样呢?

可以看到,我的老朋友postgresql5432端口被代理给代理了

并且直接导致连不上

而且我不使用proxychains而使用新版本就是看在新版本拥有代理本地的功能

继续编辑/etc/proxychains.conf文件

可以看到给我们举出了很多例子

最可能用得到的就是这条localnet 127.0.0.0/255.0.0.0

但是我删除这条的注释之后并没有改善问题,仔细看发现postgresql

连接的是localhost:5432而不是127.0.0.1:5432

而且localnet语句直接接localhost会报错

也可能是我没找到用法,有知道的大佬可以评论区告诉我

这里有一个知识点,我们在使用mmsfdb init初始化msf的数据库时

配置文件默认生成位置是:

/usr/share/metasploit-framework/config/database.yml

可以看到,里面连接的就是localhost

目前要使用proxychains4代理msf并且能让msf正常运行的方案

  • 要么修改postgresql配置,让它连接127.0.0.1而不是localhost
  • 要么进入msf手动连接127.0.0.1数据库

本文完。