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}}
 |