事情起因#
ノート整理を続けています。
参考記事:
最初は他の記事を参考にして、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
データベースを検索します:
msf スキャン#
use auxiliary/scanner/mongodb/mongodb_login
set rhosts xxx.xxx.xxx.xxx
set threads 20
exploit
図のように、スキャンされたサーバーが未承認であることがわかります。
そのため、navicat
などのツールを使用して接続することができます。
予想外にもハッキングされたデータベースで、ハッカーは 7 日以内に 0.1 ビットコインを支払うよう要求しています。このデータベースの所有者に祝福を送りましょう。
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
は、ローカルプロキシをバイパスする機能をサポートしています
古いバージョンをインストールしている場合は、これらの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 プロキシを削除します
指定した IP の 1080 ポートを追加します。ローカルの場合は127.0.0.1
です
私は Raspberry Pi を使用しており、ノートブックの小さな飛行機を使用しているため、ノートブックの 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
に接続しており、localnet
ステートメントは直接localhost
に接続するとエラーが発生します
私が使い方を見つけられなかった可能性もありますので、知っている方はコメントエリアで教えてください
ここでのポイントは、mmsfdb init
を使用してmsf
のデータベースを初期化する際に
デフォルトの生成場所は次のとおりです:
/usr/share/metasploit-framework/config/database.yml
接続先はlocalhost
です
現在、proxychains4
を使用してmsf
をプロキシし、msf
を正常に実行するためのソリューション
postgresql
の設定を変更して、localhost
ではなく127.0.0.1
に接続するようにするmsf
に手動で127.0.0.1
データベースに接続する
以上です。