banner
soapffz

soapffz

github
steam
bilibili
douban
twitter

MongoDB未授权访问漏洞复现

事情起因

持续整理笔记中

参考文章:

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

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数据库:

image

msf 扫描

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

image

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

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

image

没想到还是个被黑掉的数据库,黑客要求 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代理

image

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

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

image

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

image

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

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

image

ping``google

image

使用 proxychains 代理 msf 遇到的问题

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

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

set proxies socks5:192.168.1.7:1080

image

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

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

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

image

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

并且直接导致连不上

image

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

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

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

image

最可能用得到的就是这条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

image

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

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

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

本文完。

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.