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 にユーザーを追加するまで、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.1 ビットコインを支払うよう要求しています。このデータベースの所有者に祝福を送りましょう。

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は、ローカルプロキシをバイパスする機能をサポートしています

古いバージョンをインストールしている場合は、これらの2つのコマンドでクリーンアップをダウンロードします
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です

私は Raspberry Pi を使用しており、ノートブックの小さな飛行機を使用しているため、ノートブックの 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に接続しており、localnetステートメントは直接localhostに接続するとエラーが発生します

私が使い方を見つけられなかった可能性もありますので、知っている方はコメントエリアで教えてください

ここでのポイントは、mmsfdb initを使用してmsfのデータベースを初期化する際に

デフォルトの生成場所は次のとおりです:

/usr/share/metasploit-framework/config/database.yml

image

接続先はlocalhostです

現在、proxychains4を使用してmsfをプロキシし、msfを正常に実行するためのソリューション

  • postgresqlの設定を変更して、localhostではなく127.0.0.1に接続するようにする
  • msfに手動で127.0.0.1データベースに接続する

以上です。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。