mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
94 lines
4.3 KiB
Markdown
94 lines
4.3 KiB
Markdown
# 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進数**文字列です:
|
||
|
||

|
||
|
||
例えば、アプリケーションから返された実際のObject IDを分解すると、次のようになります:5f2459ac9fa6dc2500314019
|
||
|
||
1. 5f2459ac: 1596217772(10進数)= 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}}
|