开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增、删、改、查高危动作)而且可以远程访问数据库。
漏洞原因
造成未授权访问的根本原因就在于启动 Mongodb 的时候未设置 --auth 也很少会有人会给数据库添加上账号密码(默认空口令),使用默认空口令这将导致恶意攻击者无需进行账号认证就可以登陆到数据服务器。
漏洞复现
步骤一:在Kali上执行以下命令搭建起MongoDB的漏洞环境...
拉取镜像:docker pull mongo
启动容器:docker run -d -p 27017:27017 --name mongodb mongo
查看容器:docker ps -a
步骤二:使用Nmap的插件脚本进行扫描...发现存在未授权访问漏洞...
#扫描命令
nmap -p 27017 --script mongodb-info 192.168.4.176
步骤三:也可尝试使用MSF中的模块进行漏洞测试....不需要认证即可直接连接...
use auxiliary/scanner/mongodb/mongodb_login
show options
set rhosts 192.168.4.128
set threads 15
exploit
步骤四:即存在未授权访问漏洞使用Navicat进行连接...
修复防御
- 为MongoDB添加认证:MongoDB启动时添加
--auth
参数、为MongoDB添加用户。 - MongoDB 自身带有一个HTTP服务和并支持REST接口。在2.6以后这些接口默认是关闭的。mongoDB默认会使用默认端口监听web服务,一般不需要通过web方式进行远程管理,建议禁用。修改配置文件或在启动的时候选择 –nohttpinterface 参数
nohttpinterface=false
。 - 启动时加入参数
--bind_ip 127.0.0.1
或在/etc/mongodb.conf
文件中添加以下内容:bind_ip = 127.0.0.1
。
product="MongoDB-数据库" && port="27017" && country!="CN"