事情起因#
持續整理筆記中
參考文章:
本來準備參考其他文章用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
數據庫
本文完。