14 KiB
27017,27018 - MongoDBのペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
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 Framework(OWTF)に含まれているスクリプトで、データベースの列挙を自動化します。
- 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
- 5f2459ac:1596217772を10進数に変換すると、2020年7月31日金曜日17:49:32です。
- 9fa6dc:マシン識別子
- 2500:プロセスID
- 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 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください、私たちの独占的なNFTのコレクションを。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦@carlospolopmをフォローしてください。
- ハッキングのトリックを共有するには、hacktricks repo と hacktricks-cloud repo にPRを提出してください。