漏洞介绍
- 开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增删改高危动作)而且可以远程访问数据库
- 造成未授权访问的根本原因就在于启动 Mongodb 的时候未设置 --auth 也很少会有人会给数据库添加上账号密码(
默认空口令
),使用默认空口令这将导致恶意攻击者无需进行账号认证就可以登陆到数据服务器。
漏洞环境搭建
攻击机:kali
靶机:Ubuntu18.0.4
Mongodb:使用docker搭建
1.从镜像仓库中获取指定镜像
docker pull mongo
2.列出本机主机中的mongo镜像
docker images mongo
3.创建一个新的容器
docker run -d -p 27017:27017 -name mongodb mongo
列出包括已经运行的所有容器
docker ps -a
Mongodb一般的端口为27017,不过我们这里是在docker下运行的mongodb,如果我们需要访问docker中的mongodb,我们就需要将docker中的27017端口映射到靶机的端口上,这里我们首先查看运行mongodb的ip地址:
docker inspect mongodb | grep IPAddress
然后使用如下命令进行端口映射
iptables -t nat -A DOCKER -p tcp --dport 27917 -j DNAT --to-destination 172.17.0.2:27017
接着我们在攻击机中测试映射端口的连通性
nmap -p 27917 192.168.252.170
端口已经映射成功。
漏洞复现
MongoDB的默认端口一般是27017,当配置成无需验证的情况下就会产生未授权访问漏洞。
接下来我们在攻击机中进行漏洞复现,我们首先配置msf
set rhosts 192.168.252.170
set rport 27917
set threads 10
exploit
我们可以其已经发现其没有使用身份验证。
我们继续在NoSQLBoosterMongoDB
中测试
我们可以看到直接连接到数据库,已经看到了数据:
漏洞修复
1.修改默认端口
由于默认的Mongodb的端口为27017,所以又被其他攻击者使用工具扫描以及爆破的可能,所以我们可修改端口。
2.不将服务开放到公网
我们在Mongodb配置文件中修改,使其只能在本地使用
gedit /etc/mongodb.conf
bind_ip 127.0.0.1
3.禁用HTTP和REST端口
4.为Mongodb添加认证
Mongodb启动时添加--auth参数、为Mongodb添加用户