27017,27018 - Pentesting MongoDB
Reading time: 6 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報
MongoDB は オープンソース のデータベース管理システムで、ドキュメント指向データベースモデル を使用して多様なデータ形式を処理します。ビッグデータ分析やコンテンツ管理などのアプリケーションで、非構造化または半構造化データを管理するための柔軟性とスケーラビリティを提供します。デフォルトポート: 27017, 27018
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"
Login
デフォルトでは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>
ブルートフォース
/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 予測
Example from here.
Mongo Object IDsは12バイトの16進数文字列です:
例えば、アプリケーションから返された実際のObject IDを分解すると、次のようになります:5f2459ac9fa6dc2500314019
- 5f2459ac: 1596217772(10進数)= 2020年7月31日金曜日 17:49:32
- 9fa6dc: マシン識別子
- 2500: プロセスID
- 314019: インクリメンタルカウンター
上記の要素のうち、マシン識別子はデータベースが同じ物理/仮想マシンで実行されている限り同じままです。プロセスIDはMongoDBプロセスが再起動されるとのみ変更されます。タイムスタンプは毎秒更新されます。カウンターとタイムスタンプの値を単純にインクリメントしてObject IDsを推測する際の唯一の課題は、Mongo DBがObject IDsを生成し、システムレベルでObject IDsを割り当てるという事実です。
ツールhttps://github.com/andresriancho/mongo-objectid-predictは、開始Object IDを与えると(アカウントを作成して開始IDを取得できます)、次のオブジェクトに割り当てられる可能性のある約1000の推定Object IDsを返しますので、それらをブルートフォースするだけです。
Post
もしあなたがrootであれば、mongodb.confファイルを変更して、認証情報が不要になるようにできます(noauth = true)そして認証情報なしでログインできます。
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。