9200 - Pentesting Elasticsearch
基本情報
Elasticsearchは、分散型、オープンソースの検索および分析エンジンで、あらゆる種類のデータに対応しています。速度、スケーラビリティ、およびシンプルなREST APIで知られています。Apache Luceneの上に構築され、2010年にElasticsearch N.V.(現在はElasticとして知られる)によって最初にリリースされました。Elasticsearchは、データの取り込み、強化、保存、分析、視覚化のためのオープンソースツールのコレクションであるElastic Stackのコアコンポーネントです。このスタックは一般にELKスタックと呼ばれ、LogstashやKibanaも含まれ、現在はBeatsと呼ばれる軽量データ送信エージェントがあります。
Elasticsearchインデックスとは?
Elasticsearchのインデックスは、関連するドキュメントのコレクションで、JSONとして保存されています。各ドキュメントは、キーとそれに対応する値(文字列、数値、ブール値、日付、配列、地理位置情報など)で構成されています。
Elasticsearchは、効率的なデータ構造である逆インデックスを使用して、高速な全文検索を実現しています。このインデックスは、ドキュメント内のすべてのユニークな単語をリストし、各単語が出現するドキュメントを特定します。
インデックス作成プロセス中に、Elasticsearchはドキュメントを保存し、逆インデックスを構築し、ほぼリアルタイムでの検索を可能にします。インデックスAPIは、特定のインデックス内のJSONドキュメントを追加または更新するために使用されます。
デフォルトポート: 9200/tcp
手動列挙
バナー
Elasticsearchにアクセスするために使用されるプロトコルはHTTPです。HTTP経由でアクセスすると、いくつかの興味深い情報が見つかります: http://10.10.10.115:9200/
/
にアクセスしてその応答が見えない場合は、次のセクションを参照してください。
認証
デフォルトではElasticsearchには認証が有効になっていませんので、デフォルトでは資格情報を使用せずにデータベース内のすべてにアクセスできます。
認証が無効になっていることを確認するには、次のリクエストを行います:
しかし、/
にリクエストを送信し、次のようなレスポンスを受け取った場合:
それは、認証が設定されており、有効な資格情報が必要であることを意味します。次に、ブルートフォース攻撃を試みることができます(HTTP基本認証を使用しているため、HTTP基本認証をブルートフォース攻撃するための任意の方法が使用できます)。 ここにデフォルトのユーザー名のリストがあります:elastic(スーパーユーザー)、remote_monitoring_user、beats_system、logstash_system、kibana、kibana_system、apm_system、 _anonymous_。_ Elasticsearchの古いバージョンでは、このユーザーのデフォルトパスワードはchangemeです。
基本的なユーザー列挙
Elastic Info
以下は、elasticsearchに関する情報を取得するためにGETでアクセスできるいくつかのエンドポイントです:
これらのエンドポイントは、ドキュメントから取得されたもので、詳細を見つけることができます。
また、/_cat
にアクセスすると、レスポンスにはインスタンスがサポートする/_cat/*
エンドポイントが含まれます。
/_security/user
(認証が有効な場合)では、どのユーザーがsuperuser
の役割を持っているかを確認できます。
Indices
http://10.10.10.115:9200/_cat/indices?v
にアクセスすることで、すべてのインデックスを収集できます。
インデックス内に保存されているデータの種類に関する情報を取得するには、次のようにアクセスできます: http://host:9200/<index>
。この場合の例は http://10.10.10.115:9200/bank
です。
インデックスのダンプ
インデックスのすべての内容をダンプしたい場合は、次のようにアクセスできます: http://host:9200/<index>/_search?pretty=true
。例えば http://10.10.10.115:9200/bank/_search?pretty=true
のように。
銀行インデックス内の各ドキュメント(エントリ)の内容と、前のセクションで見たこのインデックスのフィールドを比較する時間を取ってください。
この時点で、"hits" 内に "total" というフィールドがあり、このインデックス内に1000のドキュメントが見つかったことを示していることに気付くかもしれませんが、実際には10件しか取得されていません。これは、デフォルトで10ドキュメントの制限があるためです。
しかし、**このインデックスに1000のドキュメントが含まれていることがわかったので、ダンプしたいエントリの数をsize
**パラメータで指定して、すべてをダンプすることができます: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
asd
注: より大きな数を指定すると、すべてのエントリがダンプされます。例えば size=9999
と指定すると、エントリがもっとあった場合は奇妙になります(ただし、確認する必要があります)。
すべてをダンプ
すべてをダンプするには、以前と同じパスに行きますが、インデックスを指定しないでください: http://host:9200/_search?pretty=true
。例えば http://10.10.10.115:9200/_search?pretty=true
のように。
この場合、デフォルトの10件の制限が適用されることを忘れないでください。size
パラメータを使用して、より多くの結果をダンプすることができます。詳細については前のセクションをお読みください。
検索
情報を探している場合は、すべてのインデックスで生の検索を行うことができます: http://host:9200/_search?pretty=true&q=<search_term>
。例えば http://10.10.10.115:9200/_search?pretty=true&q=Rockwell
のように。
特定のインデックスで検索したい場合は、パスにそれを指定するだけです: http://host:9200/<index>/_search?pretty=true&q=<search_term>
検索に使用されるqパラメータは、正規表現をサポートしています。
また、https://github.com/misalabs/horuzのようなものを使用して、elasticsearchサービスをファズすることもできます。
書き込み権限
新しいインデックス内に新しいドキュメントを作成しようとして、次のようなコマンドを実行することで、書き込み権限を確認できます:
そのコマンドは、属性 "bookId"、"author"、"publisher"、および "name" を持つ books
タイプのドキュメントを持つ 新しいインデックス bookindex
を作成します。
新しいインデックスがリストに表示されることに注意してください:
そして、自動的に作成されたプロパティに注意してください:
自動列挙
いくつかのツールは、前に示したデータの一部を取得します:
Shodan
port:9200 elasticsearch
Last updated