【ITニュース解説】Hack The Box — Mongod (MongoDB)
2025年09月07日に「Dev.to」が公開したITニュース「Hack The Box — Mongod (MongoDB)」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
MongoDBはNoSQLデータベースの一種。通常は認証が必要だが、設定ミスにより匿名でアクセス可能な場合がある。この演習では、古いバージョンのMongoDBに接続するため、対応するバージョンのMongo Shellを使用。`show dbs`でデータベース一覧を表示、`use`でデータベースを選択、`show collections`でコレクション一覧を表示、`db.collectionName.find()`でコレクション内のデータを表示し、フラグを発見する。
ITニュース解説
この解説では、"Hack The Box"というプラットフォーム上の"Mongod"という仮想マシンを攻略する手順を、システムエンジニアを目指す初心者にも理解できるように説明する。この仮想マシンは、MongoDBというデータベースの設定ミスを利用して侵入し、最終的にフラグと呼ばれる秘密の文字列を入手することを目的としている。
まず、MongoDBとは何かについて解説する。MongoDBは、従来のSQLデータベースとは異なるNoSQLデータベースの一種だ。SQLデータベースがテーブルと行でデータを管理するのに対し、MongoDBはコレクションとドキュメントという構造を使用する。データベース、コレクション、ドキュメントという階層構造でデータが整理されており、データベースは大きなファイルキャビネット、コレクションはキャビネット内のフォルダー、ドキュメントはフォルダー内のファイルに例えられる。ドキュメントはJSON形式でデータを保持し、キーと値のペアで情報を表現する。
通常、データベースへのアクセスにはユーザー名とパスワードが必要だが、設定が不適切なMongoDBサーバーでは、認証なしで誰でもログインできる場合がある。これを匿名ログインと呼ぶ。今回の仮想マシンでは、この匿名ログインが可能なMongoDBサーバーに接続し、情報を取得する。
MongoDBサーバーに接続するには、mongosh(Mongo Shell)というツールを使用する。これは、MongoDBを操作するためのコマンドラインインターフェースだ。mongoshを使用することで、データベースへの接続、データベースの一覧表示、コレクションへのアクセス、ドキュメントの閲覧などを行うことができる。
記事では、まず最新版のmongoshをインストールしようとしたが、サーバーのMongoDBのバージョンが古いため、互換性の問題が発生した。具体的には、サーバーがMongoDB 3.6を使用しているのに対し、最新版のmongoshはより新しいバージョンを必要としていた。
そこで、記事では古いバージョンのmongoshをインストールし、サーバーとの互換性を確保した。具体的には、MongoDB 2.3.2のmongoshをダウンロードし、展開して実行することで、MongoDBサーバーへの接続を確立した。
接続後、show dbsコマンドを使用して、サーバー上のデータベース一覧を表示した。次に、use sensitive_informationコマンドを使用して、"sensitive_information"という名前のデータベースに切り替えた。その後、show collectionsコマンドを使用して、データベース内のコレクション一覧を表示した。
コレクション内のドキュメントの内容を表示するには、db.collectionName.find()コマンドを使用する。ここで、"collectionName"は表示したいコレクションの名前に置き換える。記事では、"flag"という名前のコレクションの内容を表示するために、db.flag.find()コマンドを実行した。
記事では、仮想マシン攻略の準備段階として、nmapというツールを使用して、ターゲットマシンのポートスキャンを行った。nmap -p- --min-rate=1000 -sV <$IP>というコマンドを実行することで、すべてのTCPポートをスキャンし、実行されているサービスのバージョンを特定した。このスキャンにより、2つのTCPポートが開いており、そのうちの1つがMongoDB 3.6.8であることを確認した。
最後に、記事で言及されているタスクについて解説する。
- タスク1: マシン上で開いているTCPポートの数は2つ。
- タスク2: ポート27017で実行されているサービスはMongoDB 3.6.8。
- タスク3: MongoDBはNoSQLデータベース。
- タスク4: MongoDBシェルを起動するコマンドはmongosh。
- タスク5: データベース一覧を表示するコマンドはshow dbs。
- タスク6: コレクション一覧を表示するコマンドはshow collections。
- タスク7: "flag"コレクションの内容を表示するコマンドはdb.flag.find()。
db.flag.find()コマンドを実行することで、フラグが表示され、これを提出することで、仮想マシンの攻略が完了する。おめでとう。
この一連の手順を通して、MongoDBの基本的な操作、設定ミスを利用した侵入方法、およびnmapなどのツールを使ったポートスキャンについて学ぶことができる。これらの知識は、システムエンジニアとしてのスキルアップに役立つだろう。