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

94 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 27017,27018 - Pentesting MongoDB
{{#include ../banners/hacktricks-training.md}}
## 基本情報
**MongoDB****オープンソース** のデータベース管理システムで、**ドキュメント指向データベースモデル** を使用して多様なデータ形式を処理します。ビッグデータ分析やコンテンツ管理などのアプリケーションで、非構造化または半構造化データを管理するための柔軟性とスケーラビリティを提供します。**デフォルトポート:** 27017, 27018
```
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
```
## 列挙
### 手動
```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 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
```
### 自動
```bash
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データベースです。
```bash
mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'
```
nmapスクリプト: _**mongodb-brute**_ は、認証情報が必要かどうかを確認します。
```bash
nmap -n -sV --script mongodb-brute -p 27017 <ip>
```
### [**ブルートフォース**](../generic-hacking/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 予測
Example [from here](https://techkranti.com/idor-through-mongodb-object-ids-prediction/).
Mongo Object IDsは**12バイトの16進数**文字列です:
![http://techidiocy.com/_id-objectid-in-mongodb/](../images/id-and-ObjectIds-in-MongoDB.png)
例えば、アプリケーションから返された実際のObject IDを分解すると、次のようになります5f2459ac9fa6dc2500314019
1. 5f2459ac: 159621777210進数= 2020年7月31日金曜日 17:49:32
2. 9fa6dc: マシン識別子
3. 2500: プロセスID
4. 314019: インクリメンタルカウンター
上記の要素のうち、マシン識別子はデータベースが同じ物理/仮想マシンで実行されている限り同じままです。プロセスIDはMongoDBプロセスが再起動されるとのみ変更されます。タイムスタンプは毎秒更新されます。カウンターとタイムスタンプの値を単純にインクリメントしてObject IDsを推測する際の唯一の課題は、Mongo DBがObject IDsを生成し、システムレベルでObject IDsを割り当てるという事実です。
ツール[https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict)は、開始Object IDを与えるとアカウントを作成して開始IDを取得できます、次のオブジェクトに割り当てられる可能性のある約1000の推定Object IDsを返しますので、それらをブルートフォースするだけです。
## Post
もしあなたがrootであれば、**mongodb.conf**ファイルを**変更**して、認証情報が不要になるようにできます_noauth = true_そして**認証情報なしでログイン**できます。
---
{{#include ../banners/hacktricks-training.md}}