MongoDB未授权访问
1、漏洞简介
MongoDB服务开启时不加任何参数,默认是没有开启认证的,攻击者通过默认端口,无需密码就能远程登录,连接数据库进行任何操作(增删改查高危动作)而且可以远程访问数据库。
造成未授权访问的根本原因就在于启动Mongodb的时候未设置-auth也很少会有人给数据库添加上账号密码(默认空口令)。使用默认空口令将导致恶意攻击者无需进行账号认证就可以登录到数据服务器。
2、漏洞验证
安装mongodb(默认端口27017),然后连接到服务。
yum install mongodb;
mongo --host IP --port PORT
3、漏洞修复方案
- 限制绑定IP,启动时加入参数--bind_ip 127.0.0.1,或在/etc/mongodb.conf文件中添加:bind_ip=127.0.0.1;
- 在admin.system.user中添加用户,启动认证;
- 设置防火墙策略,限定IP访问服务;
- 禁用HTTP和REST端口,修改配置文件或在启动的时候选择参数nohttpinterface=false;
4、启动基于角色的登录认证功能
MongoDB3.0及以上版本启动时添加--auth参数开启认证访问,此时若数据库中无账号,本地登录无权限进行任何操作,因此需要先以无认证的方式启动服务并创建系统用户管理员账号。
1)启动MongoDB
mongod --dbpath /data/db
2)登录数据库
mongo --host 127.0.0.1 --port 27017
3)创建系统用户管理员账号
use admin#切换admin库
db.createUser({
user:"myUserAdmin",
pwd:"PasswOrd"
roles:[{role:"userAdminAnyDatabase",db:"admin"}]
})#创建用户
ps:3.0之前版本使用db.addUser方法创建用户
4)重启MongoDB服务,开启访问认证
mongod --auth --port PORT --dbpath /tmp/test
或者:
配置文件mongod.conf添加如下内容
#securiity:
security:
authorzation:enabled
指定配置文件启动MongoDB
mongod --config /etc/mongod.conf
5)使用系统用户账号登录
mongo --port PORT -u "myUserAdmin" -p "PasswOrd" --authenticationDatabase "admin"
或者:
不指定认证信息登录,连接成功后
use admin
db.auth("myUserAdmin","PassWord")
6)给指定库创建用户管理员(事例库products,用户accountUser)
user products
db.createUser({
user:"accountUser",
pwd:"password",
roles:["readwrite","dbAdmin"]
})
7)使用数据库用户访问指定数据库
mongo --port PORT -u "accountUser" -p "password" --authenticatonDatabase "products"
浙公网安备 33010602011771号