2023-07-07 23:42:27 +00:00
# 27017,27018 - MongoDBのペンテスト
2022-04-28 16:01:33 +00:00
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
* **サイバーセキュリティ企業**で働いていますか? **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 ) **に提出してください。**
2022-04-28 16:01:33 +00:00
< / details >
2023-07-14 16:20:47 +00:00
< figure > < img src = "../../.gitbook/assets/image (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-11-05 09:07:43 +00:00
2023-07-14 16:20:47 +00:00
**HackenProofはすべての暗号バグバウンティの場所です。**
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**遅延なしで報酬を受け取る**\
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**Web3ペンテストの経験を積む**\
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです! 上昇期のweb3セキュリティをマスターしましょう。
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**Web3ハッカーレジェンドになる**\
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
[**HackenProofでサインアップ** ](https://hackenproof.com/register )して、ハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
2022-11-05 09:07:43 +00:00
2023-07-07 23:42:27 +00:00
## 基本情報
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
MongoDBは、さまざまな形式のデータをサポートするドキュメント指向のデータベースモデルを使用する[オープンソース](https://whatis.techtarget.com/definition/open-source)のデータベース管理システム( DBMS) です。( [ここから](https://searchdatamanagement.techtarget.com/definition/MongoDB))
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
**デフォルトポート:** 27017、27018
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
```
2023-07-07 23:42:27 +00:00
## 列挙
### 手動
2023-07-14 16:20:47 +00:00
MongoDBは、デフォルトでポート27017で動作します。ポート27018は、セカンダリレプリカセットのメンバーとして使用されることがあります。MongoDBの手動列挙には、以下の手順を実行します。
2023-07-07 23:42:27 +00:00
2023-07-14 16:20:47 +00:00
1. ポートスキャンツールを使用して、ターゲットシステム上のポート27017および27018が開いているかどうかを確認します。
2023-07-07 23:42:27 +00:00
2023-07-14 16:20:47 +00:00
2. MongoDBクライアントを使用して、ターゲットシステムに接続します。
2023-07-07 23:42:27 +00:00
```
2023-07-14 16:20:47 +00:00
mongo --host < target_ip > --port 27017
2023-07-07 23:42:27 +00:00
```
2023-07-14 16:20:47 +00:00
3. 接続が成功した場合、以下のコマンドを使用してデータベースのリストを取得します。
2023-07-07 23:42:27 +00:00
```
2023-07-14 16:20:47 +00:00
show dbs
2023-07-07 23:42:27 +00:00
```
2023-07-14 16:20:47 +00:00
4. データベースを選択し、コレクションのリストを取得します。
2023-07-07 23:42:27 +00:00
2023-07-14 16:20:47 +00:00
```
use < database_name >
show collections
```
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
5. 必要に応じて、コレクション内のドキュメントを表示します。
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
```
db.< collection_name > .find()
```
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
6. 列挙が完了したら、MongoDBクライアントからログアウトします。
2023-07-07 23:42:27 +00:00
2023-07-14 16:20:47 +00:00
```
exit
```
2020-07-15 15:43:14 +00:00
```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:
2023-07-07 23:42:27 +00:00
print(db)
print(client[db["name"]].list_collection_names())
2020-07-15 15:43:14 +00:00
#If admin access, you could dump the database also
```
2023-07-07 23:42:27 +00:00
**いくつかのMongoDBコマンド:**
2023-07-14 16:20:47 +00:00
```bash
# 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 > })
2023-07-07 23:42:27 +00:00
```
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
**いくつかのMongoDBコマンド:**
```bash
# すべてのデータベースを表示する
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 > })
```
2020-07-15 15:43:14 +00:00
```bash
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
```
2023-07-07 23:42:27 +00:00
### 自動
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
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.
During a penetration test, it is important to check if MongoDB is properly secured and not exposed to unauthorized access. One common misconfiguration is leaving the default ports open to the public internet, which can lead to unauthorized access and potential data leaks.
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
To automatically check if MongoDB is running on ports 27017 and 27018, you can use a port scanning tool like Nmap. Nmap is a powerful network scanning tool that can be used to discover open ports on a target system.
Here is an example command to scan for open MongoDB ports using Nmap:
```
nmap -p 27017,27018 < target_ip >
```
Replace `<target_ip>` with the IP address of the target system. This command will scan for open ports 27017 and 27018 on the target system.
If Nmap reports that the ports are open, it indicates that MongoDB is running on those ports. This could be a potential security risk if the MongoDB instance is not properly secured.
To further investigate the MongoDB instance, you can use tools like MongoDB Compass or the MongoDB shell. These tools allow you to connect to the MongoDB server and perform various operations, such as querying the database, inserting data, and modifying documents.
It is important to note that during a penetration test, you should only perform authorized actions and respect the boundaries set by the client. Unauthorized access or data leakage can have serious legal and ethical consequences. Always obtain proper authorization and follow the rules of engagement before conducting any penetration testing activities.
2020-07-15 15:43:14 +00:00
```bash
nmap -sV --script "mongo* and default" -p 27017 < IP > #By default all the nmap mongo enumerate scripts are used
```
2022-05-01 13:25:53 +00:00
### Shodan
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
* 全てのmongodb: `"mongodb server information"`
* 完全にオープンなmongodbサーバーを検索: `"mongodb server information" -"partially enabled"`
* 認証が部分的に有効な場合: `"mongodb server information" "partially enabled"`
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
## ログイン
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
デフォルトでは、mongoはパスワードを必要としません。\
**Admin**は一般的なmongoデータベースです。
2020-07-15 15:43:14 +00:00
```bash
mongo < HOST >
mongo < HOST > :< PORT >
mongo < HOST > :< PORT > /< DB >
mongo < database > -u < username > -p '< password > '
```
2023-07-07 23:42:27 +00:00
以下のnmapスクリプト: _**mongodb-brute**_は、認証情報が必要かどうかをチェックします。
2020-07-15 15:43:14 +00:00
```bash
nmap -n -sV --script mongodb-brute -p 27017 < ip >
```
2023-07-07 23:42:27 +00:00
### [**ブルートフォース**](../generic-methodologies-and-resources/brute-force.md#mongo)
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
認証情報が必要かどうかを知るために、_/opt/bitnami/mongodb/mongodb.conf_を確認してください。
2020-07-15 15:43:14 +00:00
```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
```
2023-07-07 23:42:27 +00:00
## Mongo Objectidの予測
2020-07-15 15:43:14 +00:00
2023-07-07 23:42:27 +00:00
Mongo Object IDは**12バイトの16進数**文字列です:
2020-09-16 10:00:23 +00:00
2023-06-06 22:57:49 +00:00
![](../.gitbook/assets/id-and-objectids-in-mongodb.png)
2020-09-16 10:00:23 +00:00
2023-07-14 16:20:47 +00:00
例えば、アプリケーションから返された実際のObject IDを分解する方法は次のとおりです: 5f2459ac9fa6dc2500314019
2020-09-16 10:00:23 +00:00
2023-07-14 16:20:47 +00:00
1. 5f2459ac: 1596217772を10進数に変換すると、2020年7月31日金曜日17:49:32です。
2. 9fa6dc: マシン識別子
3. 2500: プロセスID
4. 314019: 増分カウンタ
2020-09-16 10:00:23 +00:00
2023-07-14 16:20:47 +00:00
上記の要素のうち、マシン識別子はデータベースが同じ物理/仮想マシンで実行されている限り変わりません。MongoDBプロセスが再起動された場合にのみ、プロセスIDが変更されます。タイムスタンプは毎秒更新されます。カウンタとタイムスタンプの値を単純に増やしてObject IDを推測する唯一の課題は、MongoDBがObject IDを生成し、システムレベルでObject IDを割り当てるという事実です。
2020-09-16 10:00:23 +00:00
2023-07-07 23:42:27 +00:00
ツール[https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict)は、開始Object ID( アカウントを作成して開始IDを取得できます) を指定すると、次のオブジェクトに割り当てられた可能性のある約1000のObject IDを返しますので、ブルートフォースで試すだけです。
2020-09-16 10:00:23 +00:00
2023-07-07 23:42:27 +00:00
## 投稿
2020-07-15 15:43:14 +00:00
2023-07-14 16:20:47 +00:00
rootであれば、**mongodb.conf**ファイルを**変更**して認証情報が不要になるようにする( _noauth = true_) ことができ、**認証情報なしでログイン**できます。
< figure > < img src = "../../.gitbook/assets/image (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2022-04-28 16:01:33 +00:00
2023-07-14 16:20:47 +00:00
**HackenProofはすべての暗号バグ報奨金の場所です。**
2023-03-05 19:54:13 +00:00
2023-07-14 16:20:47 +00:00
**遅延なしで報奨金を受け取る**\
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報奨金を受け取ることができます。
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**Web3ペントestingの経験を積む**\
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです! その成長期におけるweb3セキュリティをマスターしましょう。
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
**Web3ハッカーレジェンドになる**\
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
2023-02-27 09:28:45 +00:00
2023-07-14 16:20:47 +00:00
[**HackenProofでサインアップ** ](https://hackenproof.com/register )してハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
2022-11-05 09:07:43 +00:00
2022-04-28 16:01:33 +00:00
< details >
2023-04-25 18:35:28 +00:00
< summary > < a href = "https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology" > < strong > ☁️ HackTricks Cloud ☁️< / strong > < / a > -< a href = "https://twitter.com/hacktricks_live" > < strong > 🐦 Twitter 🐦< / strong > < / a > - < a href = "https://www.twitch.tv/hacktricks_live/schedule" > < strong > 🎙️ Twitch 🎙️< / strong > < / a > - < a href = "https://www.youtube.com/@hacktricks_LIVE" > < strong > 🎥 Youtube 🎥< / strong > < / a > < / summary >
2022-04-28 16:01:33 +00:00
2023-07-14 16:20:47 +00:00
* **サイバーセキュリティ企業で働いていますか?** **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を提出**してください。
2022-04-28 16:01:33 +00:00
< / details >