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

14 KiB
Raw Blame History

27017,27018 - MongoDBのペンテスト

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

HackenProofはすべての暗号バグバウンティの場所です。

遅延なしで報酬を受け取る
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。

Web3ペンテストの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです上昇期のweb3セキュリティをマスターしましょう。

Web3ハッカーレジェンドになる
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。

HackenProofでサインアップして、ハッキングから報酬を得ましょう!

{% embed url="https://hackenproof.com/register" %}

基本情報

MongoDBは、さまざまな形式のデータをサポートするドキュメント指向のデータベースモデルを使用するオープンソースのデータベース管理システムDBMSです。ここから

デフォルトポート: 27017、27018

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

列挙

手動

MongoDBは、デフォルトでポート27017で動作します。したがって、まずはこのポートをスキャンして、MongoDBサーバーが稼働しているかどうかを確認します。

nmap -p 27017 <target>

もしポートが開いている場合、次にMongoDBクライアントを使用して接続を試みます。

mongo --host <target> --port 27017

接続が成功した場合、以下のコマンドを使用してデータベースのリストを取得します。

show dbs

データベースが表示された場合、次にデータベースを選択します。

use <database>

選択したデータベースのコレクションを表示するには、次のコマンドを使用します。

show collections

コレクションが表示された場合、次にコレクション内のドキュメントを表示します。

db.<collection>.find()

これにより、データベース内の情報を取得することができます。

自動化

MongoDBの自動化された列挙には、以下のツールが使用されます。

  • MongoDB Enumeration Script: OWASP Testing FrameworkOWTFに含まれているスクリプトで、データベースの列挙を自動化します。
  • MongoDB Compass: MongoDBの公式クライアントツールで、データベースの視覚化と操作を行うことができます。

これらのツールを使用することで、より効率的にMongoDBの列挙を行うことができます。

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 all databases
show dbs

# Switch to a specific database
use <database_name>

# Show all collections in the current database
show collections

# Insert a document into a collection
db.<collection_name>.insertOne({<document>})

# Find all documents in a collection
db.<collection_name>.find()

# Find documents that match a specific condition
db.<collection_name>.find({<condition>})

# Update documents in a collection
db.<collection_name>.updateOne({<filter>}, {<update>})

# Delete documents from a collection
db.<collection_name>.deleteOne({<filter>})

いくつかのMongoDBコマンド:

# すべてのデータベースを表示する
show dbs

# 特定のデータベースに切り替える
use <database_name>

# 現在のデータベース内のすべてのコレクションを表示する
show collections

# コレクションにドキュメントを挿入する
db.<collection_name>.insertOne({<document>})

# コレクション内のすべてのドキュメントを検索する
db.<collection_name>.find()

# 特定の条件に一致するドキュメントを検索する
db.<collection_name>.find({<condition>})

# コレクション内のドキュメントを更新する
db.<collection_name>.updateOne({<filter>}, {<update>})

# コレクションからドキュメントを削除する
db.<collection_name>.deleteOne({<filter>})
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

自動

MongoDB is a popular NoSQL database that is widely used in web applications. It uses a binary protocol for communication between the client and the server. By default, MongoDB listens on port 27017 for client connections and on port 27018 for internal cluster communication.

Automatic enumeration of MongoDB instances can be done using tools like Nmap or Metasploit. Nmap can be used to scan for open MongoDB ports on a target system using the following command:

nmap -p 27017,27018 <target_ip>

Metasploit, on the other hand, provides a module called mongodb_enum that can be used to automatically enumerate MongoDB instances. This module can be loaded in Metasploit using the following command:

use auxiliary/scanner/mongodb/mongodb_enum

Once the module is loaded, you can set the target IP address and run the enumeration using the run command.

During the enumeration process, the tool will attempt to connect to the MongoDB instances and gather information such as the version, databases, collections, and users. This information can be useful for further exploitation or vulnerability assessment.

It is important to note that automatic enumeration of MongoDB instances should only be performed on systems that you have proper authorization to test. Unauthorized scanning or exploitation of MongoDB instances can lead to legal consequences. Always ensure that you have permission from the system owner before conducting any security assessments.

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>

ブルートフォース

認証情報が必要かどうかを知るために、_/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の予測

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

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

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

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

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

投稿

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

HackenProofはすべての暗号バグ報奨金の場所です。

遅延なしで報奨金を受け取る
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報奨金を受け取ることができます。

Web3ペントestingの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットですその成長期におけるweb3セキュリティをマスターしましょう。

Web3ハッカーレジェンドになる
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。

HackenProofでサインアップしてハッキングから報酬を得ましょう!

{% embed url="https://hackenproof.com/register" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥