9200 - Pentesting Elasticsearch
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)
Get a hacker's perspective on your web apps, network, and cloud
Find and report critical, exploitable vulnerabilities with real business impact. Use our 20+ custom tools to map the attack surface, find security issues that let you escalate privileges, and use automated exploits to collect essential evidence, turning your hard work into persuasive reports.
Elasticsearchは、分散型、オープンソースの検索および分析エンジンで、あらゆる種類のデータに対応しています。速度、スケーラビリティ、およびシンプルなREST APIで知られています。Apache Luceneの上に構築され、2010年にElasticsearch N.V.(現在のElastic)によって最初にリリースされました。Elasticsearchは、データの取り込み、強化、保存、分析、視覚化のためのオープンソースツールのコレクションであるElastic Stackのコアコンポーネントです。このスタックは一般にELKスタックと呼ばれ、LogstashやKibanaも含まれ、現在はBeatsと呼ばれる軽量データ送信エージェントがあります。
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です。
以下は、elasticsearchに関する情報を取得するためにGETでアクセスできるいくつかのエンドポイントです:
_cat | /_cluster | /_security |
---|---|---|
/_cat/segments | /_cluster/allocation/explain | /_security/user |
/_cat/shards | /_cluster/settings | /_security/privilege |
/_cat/repositories | /_cluster/health | /_security/role_mapping |
/_cat/recovery | /_cluster/state | /_security/role |
/_cat/plugins | /_cluster/stats | /_security/api_key |
/_cat/pending_tasks | /_cluster/pending_tasks | |
/_cat/nodes | /_nodes | |
/_cat/tasks | /_nodes/usage | |
/_cat/templates | /_nodes/hot_threads | |
/_cat/thread_pool | /_nodes/stats | |
/_cat/ml/trained_models | /_tasks | |
/_cat/transforms/_all | /_remote/info | |
/_cat/aliases | ||
/_cat/allocation | ||
/_cat/ml/anomaly_detectors | ||
/_cat/count | ||
/_cat/ml/data_frame/analytics | ||
/_cat/ml/datafeeds | ||
/_cat/fielddata | ||
/_cat/health | ||
/_cat/indices | ||
/_cat/master | ||
/_cat/nodeattrs | ||
/_cat/nodes |
これらのエンドポイントは、ドキュメントから取得されたものです さらに詳細を見つけることができます。
また、/_cat
にアクセスすると、レスポンスにはインスタンスがサポートする/_cat/*
エンドポイントが含まれます。
/_security/user
(認証が有効な場合)では、どのユーザーがsuperuser
の役割を持っているかを確認できます。
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
を作成します。
新しいインデックスがリストに表示されることに注意してください:
そして、自動的に作成されたプロパティに注意してください:
いくつかのツールは、前に示したデータの一部を取得します:
port:9200 elasticsearch
あなたのウェブアプリ、ネットワーク、クラウドに対するハッカーの視点を得る
実際のビジネスに影響を与える重大で悪用可能な脆弱性を見つけて報告します。 20以上のカスタムツールを使用して攻撃面をマッピングし、特権を昇格させるセキュリティ問題を見つけ、自動化されたエクスプロイトを使用して重要な証拠を収集し、あなたの努力を説得力のある報告書に変えます。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)