事情起因
持续整理笔记中
参考文章:
本来准备参考其他文章用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
数据库:
msf 扫描
use auxiliary/scanner/mongodb/mongodb_login
set rhosts xxx.xxx.xxx.xxx
set threads 20
exploit
如图所示,可以看见扫描出来的服务器未授权
于是可以使用navicat
等工具连接
没想到还是个被黑掉的数据库,黑客要求 7 天内支付 0.1bit 币,让我们祝福这个数据库持有人
0x04 防御
- 修改默认端口
- 不要开放服务到公网
vim /etc/mongodb.conf
bind_ip = 127.0.0.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
代理
添加指定ip
的 1080 端口,如果是本地就127.0.0.1
我是树莓派使用笔记本上的小飞机,所以用的是笔记本的ip
并且打开小飞机选项设置,允许来自局域网的连接:
此时你就可以在常用命令前加上proxychains4
语句实现代理的效果
例如,访问google.com
:proxychains4 curl https://www.google.com
ping``google
使用 proxychains 代理 msf 遇到的问题
那么我们能不能直接代理 msf 呢?
首先,msf
里面是能够直接设置socks5
代理的:
set proxies socks5:192.168.1.7:1080
但是这种方式只限于反向代理,即使用reverse_tcp
等连接时使用的
(理解可能有误,欢迎评论区指出)
那么,我们直接使用proxychains4 msfconsole
会怎么样呢?
可以看到,我的老朋友postgresql
的5432
端口被代理给代理了
并且直接导致连不上
而且我不使用proxychains
而使用新版本就是看在新版本拥有代理本地的功能
继续编辑/etc/proxychains.conf
文件
可以看到给我们举出了很多例子
最可能用得到的就是这条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
可以看到,里面连接的就是localhost
目前要使用proxychains4
代理msf
并且能让msf
正常运行的方案
- 要么修改
postgresql
配置,让它连接127.0.0.1
而不是localhost
- 要么进入
msf
手动连接127.0.0.1
数据库
本文完。