# 9200 - Elasticsearchのペネトレーションテスト
AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をチェック!
HackTricksをサポートする他の方法:
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に**参加する**か、[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォロー**してください。
* **HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出して、あなたのハッキングのコツを共有してください。
## 基本情報
[メインページ](https://www.elastic.co/what-is/elasticsearch)から役立つ説明を見つけることができます:
> Elasticsearchは、テキスト、数値、地理空間、構造化、非構造化を含むあらゆるタイプのデータに対する分散型のオープンソース検索および分析エンジンです。ElasticsearchはApache Luceneに基づいて構築され、2010年にElasticsearch N.V.(現在のElasticとして知られています)によって最初にリリースされました。シンプルなREST API、分散性、速度、およびスケーラビリティで知られているElasticsearchは、データの取り込み、エンリッチメント、ストレージ、分析、および可視化のためのオープンソースツールのセットであるElastic Stackの中心的なコンポーネントです。Elasticsearch、Logstash、Kibanaの頭文字を取ってELK Stackと一般に呼ばれるElastic Stackには、Elasticsearchにデータを送信するための軽量なシッピングエージェントの豊富なコレクションであるBeatsも含まれています。
### Elasticsearchインデックスとは何ですか?
Elasticsearchの _インデックス_ **は関連するドキュメントのコレクションです**。ElasticsearchはデータをJSONドキュメントとして保存します。各ドキュメントは、_キー_(フィールドまたはプロパティの名前)とそれに対応する値(文字列、数値、ブール値、日付、_値_の配列、地理位置情報、またはその他のタイプのデータ)を関連付けます。
Elasticsearchは、非常に高速な全文検索を可能にするように設計された_inverted index_というデータ構造を使用します。インバーテッドインデックスは、任意のドキュメントに表示されるすべてのユニークな単語をリストし、各単語が出現するすべてのドキュメントを識別します。
インデックス作成プロセス中に、Elasticsearchはドキュメントを保存し、ほぼリアルタイムでドキュメントデータを検索可能にするためにインバーテッドインデックスを構築します。インデックス作成はインデックスAPIを介して開始され、特定のインデックスにJSONドキュメントを追加または更新できます。
**デフォルトポート**: 9200/tcp
## 手動列挙
### バナー
Elasticsearchにアクセスするために使用されるプロトコルは**HTTP**です。HTTP経由でアクセスすると、いくつかの興味深い情報が見つかります:`http://10.10.10.115:9200/`
![](<../.gitbook/assets/image (264).png>)
`/`にアクセスしてその応答が表示されない場合は、次のセクションを参照してください。
### 認証
**デフォルトではElasticsearchは認証が有効になっていません**ので、デフォルトでは資格情報を使用せずにデータベース内のすべてにアクセスできます。
認証が無効になっていることを次のリクエストで確認できます:
```bash
curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
{"error":{"root_cause":[{"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."}],"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."},"status":500}
```
**しかし**、`/` へリクエストを送信し、以下のようなレスポンスを受け取った場合:
```bash
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
```
認証が設定されており、elasticserachから情報を取得するには**有効な資格情報が必要です**。その後、[**ブルートフォースを試みることができます**](../generic-methodologies-and-resources/brute-force.md#elasticsearch)(HTTP基本認証を使用するため、HTTP基本認証をブルートフォースするものなら何でも使用できます)。\
こちらが**デフォルトユーザー名のリスト**です: _**elastic**(スーパーユーザー)、remote\_monitoring\_user、beats\_system、logstash\_system、kibana、kibana\_system、apm\_system、\_anonymous\_。\_ 古いバージョンのElasticsearchでは、このユーザーのデフォルトパスワードは **changeme** です。
```
curl -X GET http://user:password@IP:9200/
```
### 基本的なユーザー列挙
```bash
#List all roles on the system:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/role"
#List all users on the system:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user"
#Get more information about the rights of an user:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/"
```
### Elastic 情報
以下は、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 | | |
これらのエンドポイントは[**ドキュメントから取られました**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html)。そこでは**さらに多くの情報**を見つけることができます。\
また、`/_cat`にアクセスすると、インスタンスがサポートする`/_cat/*`エンドポイントがレスポンスに含まれます。
`/_security/user`にアクセスすると(認証が有効な場合)、どのユーザーが`superuser`の役割を持っているかを確認できます。
### インデックス
`http://10.10.10.115:9200/_cat/indices?v`にアクセスすることで、**すべてのインデックスを収集**できます。
```
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana 6tjAYZrgQ5CwwR0g6VOoRg 1 0 1 0 4kb 4kb
yellow open quotes ZG2D1IqkQNiNZmi2HRImnQ 5 1 253 0 262.7kb 262.7kb
yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 483.2kb 483.2kb
```
インデックス内に保存されているデータの種類についての**情報を取得する**には、例えばこのケースでは `http://host:9200/` にアクセスします。例:`http://10.10.10.115:9200/bank`
![](<../.gitbook/assets/image (265).png>)
### インデックスのダンプ
インデックスの**すべての内容をダンプする**場合は、`http://host:9200//_search?pretty=true` にアクセスします。例:`http://10.10.10.115:9200/bank/_search?pretty=true`
![](<../.gitbook/assets/image (266).png>)
_前のセクションで見たこのインデックスのドキュメント(エントリー)の内容とフィールドを比較してみてください。_
この時点で、**"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=` にアクセスして**すべてのインデックスで生の検索**を行うことができます。例:`http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
![](<../.gitbook/assets/image (267).png>)
特定のインデックスでのみ**検索したい**場合は、**パスに指定**するだけです:`http://host:9200//_search?pretty=true&q=`
_検索内容に使用される q パラメーターは**正規表現をサポートしている**ことに注意してください。_
また、[https://github.com/misalabs/horuz](https://github.com/misalabs/horuz) のようなものを使用して、elasticsearchサービスをファズすることもできます。
### 書き込み権限
新しいインデックス内に新しいドキュメントを作成しようとすることで、書き込み権限を確認できます。次のようなものを実行します:
```bash
curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d'
{
"bookId" : "A00-3",
"author" : "Sankaran",
"publisher" : "Mcgrahill",
"name" : "how to get a job"
}'
```
そのコマンドは、属性 "_bookId_"、"_author_"、"_publisher_"、"_name_" を持つ `books` タイプのドキュメントを含む **新しいインデックス** `bookindex` を作成します。
**新しいインデックスがリストに表示される** のに注目してください:
![](<../.gitbook/assets/image (268).png>)
そして、**自動的に作成されたプロパティ** に注意してください:
![](<../.gitbook/assets/image (269).png>)
## 自動列挙
いくつかのツールは、先に提示されたデータの一部を取得します:
```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum
```
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
## Shodan
* `port:9200 elasticsearch`
htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ
HackTricksをサポートする他の方法:
* **HackTricksにあなたの会社を広告したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**テレグラムグループ**](https://t.me/peass)に**参加する**、または**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)を**フォローする**。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングのコツを**共有する**。