说明
仅供技术学习交流、请勿用于非法行为、否则后果自负
0x01 漏洞简述
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。MongoDB服务安装后,默认未开启权限验证。如果服务监听在0.0.0.0,则可远程无需授权访问数据库。
0x02 风险等级
严漏洞的评定结果如下:
评定方式 等级
威胁等级 严重
影响面 广泛
0x03 漏洞详情
开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,
登录的用户可以通过默认端口无需密码对数据库任意操作(增、删、改、查高危动作)而且可以远程访问数据库。
造成未授权访问的根本原因就在于启动 Mongodb 的时候未设置 --auth 也很少会有人会给数据库添加上账号密码(默认空口令
),使用默认空口令这将导致恶意攻击者无需进行账号认证就可以登陆到数据服务器。
0x04 影响版本
3.6.8之前版本
0x05 漏洞验证
安装环境
漏洞环境:Mongo 3.6.8
靶机:Ubantu 12.04 IP地址:172.16.16.212
攻击机:Ubantu 12.04 IP地址:172.16.16.254
安装搭建
- sudo apt-get install mongodb #下载mongodb
- 修改/etc/mongodb.conf,在前面加#号,注释掉,意思是让所有的端口都可以连接,或者增加bind_ip=0.0.0.0也可以。
- 为了防止空数据库不能正常运行Mongodb,在/var/log/mongodb/ 下创建目录data:
- 在data下创建目录db:
- 然后更改它的状态,可读可写可执行。
- 之后输入mongo开启试一下:
- 显示连接拒绝,是因为我们没有开启mongodb数据库,无法连接成功,我们输入命令
/etc/init.d/mongodb start,开启后,我们在输入/etc/init.d/mongodb status,开启成功:
- 现在我们再开启mongo,成功连接数据库:
- 我们打开本地IP:27017,看一下是否开启mongodb:
- 显示It looks like you are trying to access MongoDB over HTTP on the native driver port.则开启成功。
攻击复现
- 我们打开攻击机,查看IP 172.16.16.254
输入命令 sudo mongo 172.16.16.212,成功免密连接。
- 我们使用kali linux扫描端口:
- Msf成功扫描到,显示doesn’t use authentication,未授权。
0x06 可能遇到的问题
- 问题一:
输入命令mongod,显示正在开启,并且没有/data/db
- 解决办法:
我们再/var/log/mongodb/下,创建/data/db 目录,并且chmod 777 /db。
之后ps -aux | grep mongodb,kill -9 结束 mongo 进程。
我们靶机连接时,会出现拒绝连接。
- 说明靶机的mongodb服务没有开启成功,我们在靶机开启服务,并且修改/etc/mongodb.conf文件,修改bind_ip = 0.0.0.0,任何IP都可以连接,port = 27017,前把注释删掉。
- 之后/etc/init.d/mongodb start,开启后。
连接成功。
- 修改默认端口
修改默认的mongoDB端口(默认为: TCP 27017)为其他端口
- 不要开放服务到公网
vim /etc/mongodb.conf
bind_ip = 127.0.0.1
- 禁用HTTP和REST端口为MongoDB添加认证
- MongoDB启动时添加--auth参数、为MongoDB添加用户