banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

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數據庫

本文完。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。