# 27017,27018 - MongoDBのペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
**HackenProofはすべての暗号バグバウンティの場所です。**
**遅延なしで報酬を受け取る**\
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
**Web3ペンテストの経験を積む**\
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!上昇期のweb3セキュリティをマスターしましょう。
**Web3ハッカーレジェンドになる**\
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
[**HackenProofでサインアップ**](https://hackenproof.com/register)して、ハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
## 基本情報
MongoDBは、さまざまな形式のデータをサポートするドキュメント指向のデータベースモデルを使用する[オープンソース](https://whatis.techtarget.com/definition/open-source)のデータベース管理システム(DBMS)です。([ここから](https://searchdatamanagement.techtarget.com/definition/MongoDB))
**デフォルトポート:** 27017、27018
```
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
```
## 列挙
### 手動
MongoDBは、デフォルトでポート27017で動作します。したがって、まずはこのポートをスキャンして、MongoDBサーバーが稼働しているかどうかを確認します。
```
nmap -p 27017
```
もしポートが開いている場合、次にMongoDBクライアントを使用して接続を試みます。
```
mongo --host --port 27017
```
接続が成功した場合、以下のコマンドを使用してデータベースのリストを取得します。
```
show dbs
```
データベースが表示された場合、次にデータベースを選択します。
```
use
```
選択したデータベースのコレクションを表示するには、次のコマンドを使用します。
```
show collections
```
コレクションが表示された場合、次にコレクション内のドキュメントを表示します。
```
db..find()
```
これにより、データベース内の情報を取得することができます。
### 自動化
MongoDBの自動化された列挙には、以下のツールが使用されます。
- [MongoDB Enumeration Script](https://github.com/owtf/mongodb-enumeration-script): OWASP Testing Framework(OWTF)に含まれているスクリプトで、データベースの列挙を自動化します。
- [MongoDB Compass](https://www.mongodb.com/products/compass): MongoDBの公式クライアントツールで、データベースの視覚化と操作を行うことができます。
これらのツールを使用することで、より効率的にMongoDBの列挙を行うことができます。
```python
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コマンド:**
```bash
# Show all databases
show dbs
# Switch to a specific database
use
# Show all collections in the current database
show collections
# Insert a document into a collection
db..insertOne({})
# Find all documents in a collection
db..find()
# Find documents that match a specific condition
db..find({})
# Update documents in a collection
db..updateOne({}, {})
# Delete documents from a collection
db..deleteOne({})
```
**いくつかのMongoDBコマンド:**
```bash
# すべてのデータベースを表示する
show dbs
# 特定のデータベースに切り替える
use
# 現在のデータベース内のすべてのコレクションを表示する
show collections
# コレクションにドキュメントを挿入する
db..insertOne({})
# コレクション内のすべてのドキュメントを検索する
db..find()
# 特定の条件に一致するドキュメントを検索する
db..find({})
# コレクション内のドキュメントを更新する
db..updateOne({}, {})
# コレクションからドキュメントを削除する
db..deleteOne({})
```
```bash
show dbs
use
show collections
db..find() #Dump the collection
db..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
```
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.
```bash
nmap -sV --script "mongo* and default" -p 27017 #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データベースです。
```bash
mongo
mongo :
mongo :/
mongo -u -p ''
```
以下のnmapスクリプト:_**mongodb-brute**_は、認証情報が必要かどうかをチェックします。
```bash
nmap -n -sV --script mongodb-brute -p 27017
```
### [**ブルートフォース**](../generic-methodologies-and-resources/brute-force.md#mongo)
認証情報が必要かどうかを知るために、_/opt/bitnami/mongodb/mongodb.conf_を確認してください。
```bash
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進数**文字列です:
![](../.gitbook/assets/id-and-objectids-in-mongodb.png)
例えば、アプリケーションから返された実際のObject IDを分解する方法は次のとおりです:5f2459ac9fa6dc2500314019
1. 5f2459ac:1596217772を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](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でサインアップ**](https://hackenproof.com/register)してハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを。
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* **ハッキングのトリックを共有するには、**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出**してください。