
自動化されたNoSQLデータベース列挙およびWebアプリケーションエクスプロイトツール。
NoSQLMapは、NoSQLデータベースやNoSQLを使用するWebアプリケーションにおいて、インジェクション攻撃を自動化し、デフォルト設定の脆弱性を悪用して、データベースからデータを開示またはクローンするために設計されたオープンソースのPythonツールです。
元々は@tcsstoolによって作成され、現在は@codingo_によってメンテナンスされているNoSQLMapは、Bernardo DameleとMiroslav Stamparの人気SQLインジェクションツールsqlmapへのオマージュとして名付けられました。その概念は、Ming Chow氏がDefcon 21で行った優れたプレゼンテーション"Abusing NoSQL Databases"(NoSQLデータベースの悪用)に基づいており、それを拡張したものです。

NoSQL(元々は「non SQL」、「non relational」、または「not only SQL」を指す)データベースは、リレーショナルデータベースで使用されるテーブル関係以外の方法でデータの保存と検索を実現するメカニズムを提供します。このようなデータベースは1960年代後半から存在していましたが、Web 2.0企業(Facebook、Google、Amazon.comなど)のニーズにより21世紀初頭に人気が急上昇するまで「NoSQL」という名称は使われていませんでした。NoSQLデータベースは、ビッグデータやリアルタイムWebアプリケーションでますます使用されています。NoSQLシステムは、SQLに似た問い合わせ言語をサポートする可能性があることを強調するため、「Not only SQL」と呼ばれることもあります。
現在、このツールのエクスプロイトは主にMongoDBとCouchDBに焦点を当てていますが、RedisやCassandraなどの他のNoSQLプラットフォームへの追加サポートは将来のリリースで計画されています。
DebianまたはRed Hat系システムでは、setup.shスクリプトをrootで実行してNoSQLMapの依存関係を自動インストールできます。
使用する機能によって異なります:
通常のPythonインストールで利用可能なその他のライブラリもいくつか必要です。環境によって異なる場合があるので、スクリプトを確認してください。
python setup.py install
または、以下のコマンドでDockerイメージをビルドすることもできます:
docker build -t nosqlmap .
または、Docker-composeを使用してNosqlmapを実行することもできます:
docker-compose build
docker-compose run nosqlmap
以下のコマンドで開始します:
python NoSQLMap
NoSQLMapはメニューベースのシステムを採用して攻撃を構築します。NoSQLMapを起動すると、以下のメインメニューが表示されます:
1-Set options (do this first)
2-NoSQL DB Access Attacks
3-NoSQL Web App attacks
4-Scan for Anonymous MongoDB Access
x-Exit
各オプションの説明:
1. Set target host/IP-攻撃対象のWebサーバー(例:www.google.com)またはMongoDBサーバーを設定します。
2. Set web app port-Webアプリケーションがターゲットの場合、そのTCPポートを設定します。
3. Set URI Path-ホスト名を除いたURIのうち、ページ名とパラメータを含む部分を設定します(例:/app/acct.php?acctid=102)。
4. Set HTTP Request Method (GET/POST)-リクエストメソッドをGETまたはPOSTに設定します。現時点ではGETのみ実装されていますが、BurpからエクスポートしたPOSTリクエストの実装を進めています。
5. Set my local Mongo/Shell IP-MongoDBインスタンスを直接攻撃する場合、ターゲットのMongoインストール先IPを設定し、被害者のデータベースをクローンしたりMeterpreterシェルを開いたりします。
6. Set shell listener port-Meterpreterシェルを開く場合、ポートを指定します。
7. Load options file-以前に保存した設定(1~6)を読み込みます。
8. Load options from saved Burp request-Burp Suiteから保存したリクエストを解析し、Webアプリケーションのオプションを設定します。
9. Save options file-設定(1~6)を将来使用するために保存します。
x. Back to main menu-オプションを設定したらここに戻り、攻撃を開始します。
オプションを設定したら、メインメニューに戻り、NoSQL管理ポートを攻撃するのかWebアプリケーションを攻撃するのかに応じて、DBアクセス攻撃またはWebアプリ攻撃を選択します。ツールの残りの部分は「ウィザード」形式で、かなり自明です。質問や提案があれば、[email protected]にメールを送るか、Twitterで@codingo_までご連絡ください。
このリポジトリには、NoSQLMapをテストするための意図的に脆弱なWebアプリケーションも含まれています。このアプリケーションを実行するには、Dockerがインストールされている必要があります。その後、/vuln_appsディレクトリから以下のコマンドを実行してください。
docker-compose build && docker-compose up
完了すると、https://127.0.0.1:8080/index.html にアクセスして脆弱なアプリケーションを利用できるようになります。
CLIはスクリプトからも使用できます。以下は、NoSQLMapを使用してvuln_appsの脆弱性を検出するスクリプトの例です:
$ echo "1. Account Lookup (acct.php)"
$ docker-compose run --remove-orphans nosqlmap \
--attack 2 \
--victim host.docker.internal \
--webPort 8080 \
--uri "/acct.php?acctid=test" \
--httpMethod GET \
--params 1 \
--injectSize 4 \
--injectFormat 2 \
--doTimeAttack n
$ echo "2. User Data Lookup (userdata.php) - JavaScript Injection"
$ docker-compose run --remove-orphans nosqlmap \
--attack 2 \
--victim host.docker.internal \
--webPort 8080 \
--uri "/userdata.php?usersearch=test" \
--httpMethod GET \
--params 1 \
--injectSize 4 \
--injectFormat 2 \
--doTimeAttack n
$ echo "3. Order Data Lookup (orderdata.php) - JavaScript Injection"
$ docker-compose run --remove-orphans nosqlmap \
--attack 2 \
--victim host.docker.internal \
--webPort 8080 \
--uri "/orderdata.php?ordersearch=test" \
--httpMethod GET \
--params 1 \
--injectSize 4 \
--injectFormat 2 \
--doTimeAttack n