5984,6984 - Pentesting CouchDB
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
CouchDBは、データをキー-バリュー マップ構造を使用して各ドキュメント内で整理する多用途で強力なドキュメント指向データベースです。ドキュメント内のフィールドは、キー/バリュー ペア、リスト、またはマップとして表現でき、データの保存と取得に柔軟性を提供します。
CouchDBに保存されている各ドキュメントには、ドキュメントレベルで一意の識別子(_id
)が割り当てられます。さらに、データベースに対して行われ、保存された各変更にはリビジョン番号(_rev
)が割り当てられます。このリビジョン番号は、変更の効率的な追跡と管理を可能にし、データベース内のデータの簡単な取得と同期を促進します。
デフォルトポート: 5984(http)、6984(https)
これは、インストールされたCouchDBインスタンスにGETリクエストを発行します。返信は次のいずれかのようになります:
CouchDBのルートにアクセスすると、{"error":"unauthorized","reason":"Authentication required."}
のような401 Unauthorized
が返される場合、バナーや他のエンドポイントにはアクセスできません。
これらは、GETリクエストでアクセスし、興味深い情報を抽出できるエンドポイントです。 CouchDBのドキュメントにもっと多くのエンドポイントと詳細な説明があります。
/_active_tasks
実行中のタスクのリスト。タスクの種類、名前、ステータス、プロセスIDを含みます。
/_all_dbs
CouchDBインスタンス内のすべてのデータベースのリストを返します。
**/_cluster_setup
**ノードまたはクラスターのステータスを、クラスターセットアップウィザードに従って返します。
/_db_updates
CouchDBインスタンス内のすべてのデータベースイベントのリストを返します。このエンドポイントを使用するには、_global_changes
データベースの存在が必要です。
/_membership
クラスターの一部であるノードをcluster_nodes
として表示します。フィールドall_nodes
は、このノードが知っているすべてのノードを表示し、クラスターの一部であるノードも含まれます。
/_scheduler/jobs
レプリケーションジョブのリスト。各ジョブの説明には、ソースとターゲットの情報、レプリケーションID、最近のイベントの履歴、その他いくつかの情報が含まれます。
/_scheduler/docs
レプリケーションドキュメントの状態のリスト。completed
およびfailed
状態のすべてのドキュメントに関する情報を含みます。各ドキュメントについて、ドキュメントID、データベース、レプリケーションID、ソースとターゲット、その他の情報を返します。
/_scheduler/docs/{replicator_db}
/_scheduler/docs/{replicator_db}/{docid}
/_node/{node-name}
/_node/{node-name}
エンドポイントは、リクエストを処理するサーバーのErlangノード名を確認するために使用できます。これは、/_node/_local
にアクセスしてこの情報を取得する際に最も便利です。
/_node/{node-name}/_stats
_stats
リソースは、実行中のサーバーの統計を含むJSONオブジェクトを返します。リテラル文字列_local
はローカルノード名のエイリアスとして機能するため、すべての統計URLで{node-name}
を_local
に置き換えて、ローカルノードの統計と対話できます。
/_node/{node-name}/_system
_system
リソースは、実行中のサーバーのさまざまなシステムレベルの統計を含むJSONオブジェクトを返します。現在のノード情報を取得するために、{node-name}
として_local
を使用できます。
/_node/{node-name}/_restart
/_up
サーバーが稼働中で、リクエストに応答する準備ができていることを確認します。 maintenance_mode
がtrue
またはnolb
の場合、エンドポイントは404レスポンスを返します。
**/_uuids
**CouchDBインスタンスから1つ以上のユニバーサルユニーク識別子(UUID)を要求します。
**/_reshard
**完了、失敗、実行中、停止中、合計のジョブのカウントと、クラスターのリシャーディングの状態を返します。
ここで説明されているように、さらに興味深い情報を抽出できます: https://lzone.de/cheat-sheet/CouchDB
そのリクエストが401 Unauthorizedで応答する場合、データベースにアクセスするために有効な資格情報が必要です:
有効な資格情報を見つけるために、サービスをブルートフォースすることを試みることができます bruteforce the service。
これは、データベースをリストするのに十分な権限があるときのcouchdbのレスポンスの例です(単なるデータベースのリストです):
データベース名にアクセスすることで、いくつかのデータベース情報(ファイルの数やサイズなど)を取得できます:
データベース内の各エントリをリストします
データベース内のドキュメントの内容を読む:
Erlang と JavaScript の JSON パーサーの違いのおかげで、次のリクエストを使用して資格情報 hacktricks:hacktricks
を持つ 管理ユーザーを作成 することができます:
例 こちらから。
CouchDBのドキュメント、特にクラスタ設定に関するセクション(リンク)では、クラスタモードにおけるCouchDBのポートの使用について説明されています。スタンドアロンモードと同様に、ポート 5984
が使用されることが言及されています。さらに、ポート 5986
はノードローカルAPI用であり、重要なことに、ErlangはErlang Port Mapper Daemon (EPMD) のためにTCPポート 4369
を必要とし、Erlangクラスタ内でのノード間通信を促進します。この設定は、各ノードが他のすべてのノードと相互接続されるネットワークを形成します。
ポート 4369
に関する重要なセキュリティアドバイザリーが強調されています。このポートがインターネットまたは信頼できないネットワーク上でアクセス可能にされると、システムのセキュリティは「クッキー」として知られるユニークな識別子に大きく依存します。このクッキーは保護手段として機能します。例えば、特定のプロセスリストにおいて、「monster」という名前のクッキーが観察されることがあり、これはシステムのセキュリティフレームワークにおけるその運用役割を示しています。
リモートコード実行(RCE)の文脈において、この「クッキー」がどのように悪用されるかを理解したい方のために、さらなる読み物のための専用セクションがあります。これは、システムを制御するためにErlangクッキーを不正に利用する方法論を詳述しています。 ここでErlangクッキーをRCEのために悪用する詳細ガイドを探ることができます。
例 こちらから。
最近公開された脆弱性CVE-2018-8007は、Apache CouchDBに影響を与え、悪用にはlocal.ini
ファイルへの書き込み権限が必要であることが明らかになりました。セキュリティ制限により最初のターゲットシステムには直接適用できませんが、探索目的のためにlocal.ini
ファイルへの書き込みアクセスを付与するために変更が行われました。以下に、プロセスを示す詳細な手順とコード例が提供されています。
まず、local.ini
ファイルが書き込み可能であることを確認し、権限をリストすることで検証します:
脆弱性を悪用するために、local.ini
のcors/origins
設定をターゲットにしたcurlコマンドが実行されます。これにより、任意のコードを実行することを目的として、[os_daemons]
セクションの下に新しいオリジンと追加のコマンドが注入されます:
その後の検証により、local.ini
に注入された設定が確認され、バックアップと対比して変更点が強調されます:
最初に、期待されるファイル(/tmp/0xdf
)は存在せず、注入されたコマンドがまだ実行されていないことを示しています。さらなる調査により、CouchDBに関連するプロセスが実行されており、その中には注入されたコマンドを実行する可能性のあるプロセスが含まれています:
特定されたCouchDBプロセスを終了させ、システムが自動的に再起動することを許可することにより、注入されたコマンドの実行がトリガーされ、以前は存在しなかったファイルの存在によって確認されます:
この探索は、特定の条件下でのCVE-2018-8007の悪用の実行可能性を確認します。特に、local.ini
ファイルへの書き込みアクセスが必要です。提供されたコード例と手順は、制御された環境でのエクスプロイトの再現に関する明確なガイドを提供します。
CVE-2018-8007の詳細については、mdsecのアドバイザリーを参照してください: CVE-2018-8007。
例 こちらから。
CVE-2017-12636として知られる脆弱性が探求され、CouchDBプロセスを介してコード実行を可能にしますが、特定の構成がその悪用を妨げる場合があります。オンラインで利用可能な多数のPoC参照があるにもかかわらず、CouchDBバージョン2で脆弱性を悪用するには調整が必要であり、一般的に標的とされるバージョン1.xとは異なります。最初のステップは、CouchDBのバージョンを確認し、期待されるクエリサーバーパスが存在しないことを確認することです。
CouchDBバージョン2.0に対応するために、新しいパスが利用されます:
新しいクエリサーバーを追加して呼び出そうとしたところ、以下の出力に示されるように、権限に関連するエラーが発生しました:
さらなる調査により、書き込み可能でないlocal.ini
ファイルに関する権限の問題が明らかになりました。rootまたはhomerアクセスでファイルの権限を変更することで、進行することが可能になりました:
その後、クエリサーバーを追加する試みは成功し、レスポンスにエラーメッセージがないことから確認されました。local.ini
ファイルの成功した修正は、ファイル比較を通じて確認されました:
プロセスは、データベースとドキュメントの作成を続け、新しく追加されたクエリサーバーにマッピングされたカスタムビューを介してコードを実行しようとする試みが行われました:
A summary with an alternative payload provides further insights into exploiting CVE-2017-12636 under specific conditions. Useful resources for exploiting this vulnerability include:
port:5984 couchdb
AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、練習する:HackTricks Training GCP Red Team Expert (GRTE)