hacktricks/network-services-pentesting/27017-27018-mongodb.md

5.9 KiB
Raw Blame History

27017,27018 - MongoDBのペンテスト

ゼロからヒーローまでAWSハッキングを学ぶ htARTEHackTricks AWS Red Team Expert

HackTricksをサポートする他の方法:

経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るためにHackenProof Discordサーバーに参加しましょう!

ハッキングの洞察
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加する

リアルタイムハックニュース
リアルタイムのニュースと洞察を通じて、迅速なハッキングワールドを最新情報で追いかける

最新の発表
最新のバグバウンティの開始や重要なプラットフォームのアップデートに関する情報を入手する

**Discordに参加して、今日からトップハッカーと協力を始めましょう!

PORT      STATE SERVICE VERSION
27017/tcp open  mongodb MongoDB 2.6.9 2.6.9

列挙

マニュアル

from pymongo import MongoClient
client = MongoClient(host, port, username=username, password=password)
client.server_info() #Basic info
#If you have admin access you can obtain more info
admin = client.admin
admin_info = admin.command("serverStatus")
cursor = client.list_databases()
for db in cursor:
print(db)
print(client[db["name"]].list_collection_names())
#If admin access, you could dump the database also

いくつかのMongoDBコマンド:

show dbs
use <db>
show collections
db.<collection>.find()  #Dump the collection
db.<collection>.count() #Number of records of the collection
db.current.find({"username":"admin"})  #Find in current db the username admin

自動

nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used

Shodan

  • すべてのmongodb: "mongodb server information"
  • 完全に公開されたmongodbサーバーを検索: "mongodb server information" -"partially enabled"
  • 認証を部分的に有効にする場合: "mongodb server information" "partially enabled"

ログイン

デフォルトではmongoはパスワードを必要としません。
Admin は一般的なmongoデータベースです。

mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'

nmapスクリプト: mongodb-brute は、認証情報が必要かどうかをチェックします。

nmap -n -sV --script mongodb-brute -p 27017 <ip>

Brute force

/opt/bitnami/mongodb/mongodb.confを見て、資格情報が必要かどうかを確認します。

grep "noauth.*true" /opt/bitnami/mongodb/mongodb.conf | grep -v "^#" #Not needed
grep "auth.*true" /opt/bitnami/mongodb/mongodb.conf | grep -v "^#\|noauth" #Not needed

Mongo Objectid Predict

例はこちらから。

Mongo Object IDsは12バイトの16進数文字列です:

http://techidiocy.com/_id-objectid-in-mongodb/

例えば、アプリケーションによって返された実際のObject IDを分解する方法は次のとおりです5f2459ac9fa6dc2500314019

  1. 5f2459ac: 1596217772を10進数で表すと、2020年7月31日金曜日17:49:32
  2. 9fa6dc: マシン識別子
  3. 2500: プロセスID
  4. 314019: 増分カウンタ

上記の要素のうち、マシン識別子はデータベースが同じ物理/仮想マシンで実行されている限り同じままです。プロセスIDは、MongoDBプロセスが再起動された場合にのみ変更されます。タイムスタンプは毎秒更新されます。カウンタとタイムスタンプの値を単純に増分させてObject IDを推測する唯一の課題は、Mongo DBがObject IDを生成し、システムレベルでObject IDを割り当てるという事実です。

ツールhttps://github.com/andresriancho/mongo-objectid-predictは、開始Object IDアカウントを作成して開始IDを取得できますを指定すると、次のオブジェクトに割り当てられた可能性のある約1000のObject IDを返します。そのため、単にブルートフォースで推測する必要があります。

Post

rootユーザーであれば、mongodb.confファイルを変更して認証情報が不要になるようにできます(noauth = true)そして認証情報なしでログインできます。