27017,27018 - Pentesting MongoDB

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

基本情報

MongoDBは、さまざまな形式のデータを処理するためにドキュメント指向データベースモデルを使用するオープンソースのデータベース管理システムです。ビッグデータ分析やコンテンツ管理などのアプリケーションで、非構造化または半構造化データを管理するための柔軟性とスケーラビリティを提供します。デフォルトポート: 27017, 27018

PORT      STATE SERVICE VERSION
27017/tcp open  mongodb MongoDB 2.6.9 2.6.9

列挙

手動

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コマンド:

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

自動的

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データベースです。

mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'

The nmap script: mongodb-brute は、認証情報が必要かどうかを確認します。

nmap -n -sV --script mongodb-brute -p 27017 <ip>

/opt/bitnami/mongodb/mongodb.conf を見て、認証情報が必要かどうかを確認します:

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 Predict

Example from here.

Mongo Object IDsは12バイトの16進数文字列です:

http://techidiocy.com/_id-objectid-in-mongodb/

例えば、アプリケーションから返された実際のObject IDを分解すると、次のようになります:5f2459ac9fa6dc2500314019

  1. 5f2459ac: 1596217772(10進数)= 2020年7月31日金曜日 17:49:32

  2. 9fa6dc: マシン識別子

  3. 2500: プロセスID

  4. 314019: 増分カウンター

上記の要素のうち、マシン識別子はデータベースが同じ物理/仮想マシンで実行されている限り同じままです。プロセスIDはMongoDBプロセスが再起動されない限り変更されません。タイムスタンプは毎秒更新されます。カウンターとタイムスタンプの値を単純に増加させてObject IDを推測する際の唯一の課題は、Mongo DBがObject IDを生成し、システムレベルでObject IDを割り当てるという事実です。

ツールhttps://github.com/andresriancho/mongo-objectid-predictは、開始Object IDを与えると(アカウントを作成して開始IDを取得できます)、次のオブジェクトに割り当てられる可能性のある約1000の推定Object IDを返しますので、それらをブルートフォースするだけです。

Post

もしあなたがrootであれば、mongodb.confファイルを修正して、認証情報が不要になるように(noauth = true)し、認証情報なしでログインできます。


経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために、HackenProof Discordサーバーに参加しましょう!

Hacking Insights ハッキングのスリルと課題に深く掘り下げたコンテンツに参加しましょう

Real-Time Hack News リアルタイムのニュースと洞察を通じて、急速に進化するハッキングの世界に遅れずについていきましょう

Latest Announcements 新しいバグバウンティの開始や重要なプラットフォームの更新について最新情報を得ましょう

Join us on Discord and start collaborating with top hackers today!

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated