事情起因#
持续整理笔记中
参考文章:
本来准备参考其他文章用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
数据库
本文完。