hacktricks/network-services-pentesting/9200-pentesting-elasticsearch.md

195 lines
14 KiB
Markdown
Raw Normal View History

2022-05-01 13:25:53 +00:00
# 9200 - Pentesting Elasticsearch
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2022-04-28 16:01:33 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
2024-02-10 15:36:32 +00:00
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 15:36:32 +00:00
## Grundlegende Informationen
Elasticsearch ist eine **verteilte**, **Open-Source**-Such- und Analyse-Engine für **alle Arten von Daten**. Es ist bekannt für seine **Geschwindigkeit**, **Skalierbarkeit** und **einfachen REST-APIs**. Auf Apache Lucene aufbauend, wurde es 2010 erstmals von Elasticsearch N.V. (jetzt bekannt als Elastic) veröffentlicht. Elasticsearch ist die Kernkomponente des Elastic Stack, einer Sammlung von Open-Source-Tools für Datenübernahme, -anreicherung, -speicherung, -analyse und -visualisierung. Dieser Stack, allgemein als ELK Stack bezeichnet, umfasst auch Logstash und Kibana und verfügt nun über leichte Datenversand-Agenten namens Beats.
2024-02-10 15:36:32 +00:00
### Was ist ein Elasticsearch-Index?
Ein Elasticsearch-**Index** ist eine Sammlung von **verwandten Dokumenten**, die als **JSON** gespeichert sind. Jedes Dokument besteht aus **Schlüsseln** und ihren entsprechenden **Werten** (Zeichenfolgen, Zahlen, Boolesche Werte, Datum, Arrays, Geolokationen usw.).
2024-02-10 15:36:32 +00:00
Elasticsearch verwendet eine effiziente Datenstruktur namens **umgekehrter Index**, um schnelle Volltextsuchen zu ermöglichen. Dieser Index listet jedes eindeutige Wort in den Dokumenten auf und identifiziert die Dokumente, in denen jedes Wort erscheint.
2024-02-10 15:36:32 +00:00
Während des Indexierungsprozesses speichert Elasticsearch die Dokumente und erstellt den umgekehrten Index, was eine nahezu Echtzeitsuche ermöglicht. Die **Index-API** wird verwendet, um JSON-Dokumente zu einem bestimmten Index hinzuzufügen oder zu aktualisieren.
2024-02-10 15:36:32 +00:00
**Standardport**: 9200/tcp
2024-02-10 15:36:32 +00:00
## Manuelle Enumeration
2022-05-01 13:25:53 +00:00
### Banner
Das Protokoll, um auf Elasticsearch zuzugreifen, ist **HTTP**. Wenn Sie über HTTP darauf zugreifen, finden Sie einige interessante Informationen: `http://10.10.10.115:9200/`
![](<../.gitbook/assets/image (294).png>)
2024-02-10 15:36:32 +00:00
Wenn Sie diese Antwort beim Zugriff auf `/` nicht sehen, lesen Sie den folgenden Abschnitt.
2020-07-17 23:09:57 +00:00
2024-02-10 15:36:32 +00:00
### Authentifizierung
2020-07-17 23:09:57 +00:00
**Standardmäßig ist die Authentifizierung in Elasticsearch deaktiviert**, sodass Sie standardmäßig auf alles in der Datenbank zugreifen können, ohne Anmeldeinformationen zu verwenden.
2021-01-28 13:40:17 +00:00
Sie können überprüfen, ob die Authentifizierung deaktiviert ist, indem Sie eine Anfrage an:
2021-01-28 13:40:17 +00:00
```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}
```
**Allerdings**, wenn Sie eine Anfrage an `/` senden und eine Antwort wie die folgende erhalten:
2020-07-17 23:09:57 +00:00
```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}
```
Das bedeutet, dass die Authentifizierung konfiguriert ist und **gültige Anmeldeinformationen erforderlich sind**, um Informationen von Elasticsearch zu erhalten. Anschließend können Sie [**versuchen, Brute-Force anzuwenden**](../generic-methodologies-and-resources/brute-force.md#elasticsearch) (es verwendet HTTP-Basisauthentifizierung, daher kann alles, was BF HTTP-Basisauthentifizierung kann, verwendet werden).\
Hier haben Sie eine **Liste der Standardbenutzernamen**: _**elastic** (Superbenutzer), remote\_monitoring\_user, beats\_system, logstash\_system, kibana, kibana\_system, apm\_system,_ \_anonymous\_.\_ Ältere Versionen von Elasticsearch haben das Standardpasswort **changeme** für diesen Benutzer.
```
2020-10-05 11:46:57 +00:00
curl -X GET http://user:password@IP:9200/
```
2024-02-10 15:36:32 +00:00
### Grundlegende Benutzerenumeration
2021-01-28 13:40:17 +00:00
```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/<USERNAME>"
```
### Elastische Informationen
2020-07-17 23:09:57 +00:00
Hier sind einige Endpunkte, die Sie über GET aufrufen können, um Informationen über Elasticsearch zu erhalten:
2021-11-30 16:46:07 +00:00
| \_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 | | |
Diese Endpunkte wurden [**aus der Dokumentation entnommen**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html), wo Sie **mehr finden können**.\
Außerdem enthält die Antwort auf den Zugriff auf `/_cat` die von der Instanz unterstützten `/_cat/*`-Endpunkte.
2020-07-17 23:09:57 +00:00
2024-02-10 15:36:32 +00:00
In `/_security/user` (falls Authentifizierung aktiviert ist) können Sie sehen, welcher Benutzer die Rolle `superuser` hat.
2020-07-17 23:09:57 +00:00
### Indizes
Sie können alle Indizes abrufen, indem Sie `http://10.10.10.115:9200/_cat/indices?v` aufrufen.
```
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
```
Um **Informationen darüber zu erhalten, welche Art von Daten in einem Index gespeichert sind**, können Sie auf Folgendes zugreifen: `http://host:9200/<index>` zum Beispiel in diesem Fall `http://10.10.10.115:9200/bank`
![](<../.gitbook/assets/image (342).png>)
### Index dump
Wenn Sie **alle Inhalte** eines Index dumpen möchten, können Sie auf Folgendes zugreifen: `http://host:9200/<index>/_search?pretty=true` wie `http://10.10.10.115:9200/bank/_search?pretty=true`
![](<../.gitbook/assets/image (914).png>)
_Nehmen Sie sich einen Moment Zeit, um die Inhalte jedes Dokuments (Eintrags) im Bank-Index und die Felder dieses Index zu vergleichen, die wir im vorherigen Abschnitt gesehen haben._
An diesem Punkt können Sie feststellen, dass **es ein Feld namens "total" innerhalb von "hits"** gibt, das angibt, dass **1000 Dokumente** in diesem Index gefunden wurden, aber nur 10 abgerufen wurden. Dies liegt daran, dass **standardmäßig eine Begrenzung von 10 Dokumenten besteht**.\
Aber jetzt, da Sie wissen, dass **dieser Index 1000 Dokumente enthält**, können Sie **alle von ihnen dumpen**, indem Sie die Anzahl der Einträge angeben, die Sie im **`size`**-Parameter dumpen möchten: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
_Hinweis: Wenn Sie eine größere Zahl angeben, werden alle Einträge sowieso gedumpt, zum Beispiel könnten Sie `size=9999` angeben und es wäre seltsam, wenn es mehr Einträge gäbe (aber Sie sollten überprüfen)._
2024-02-10 15:36:32 +00:00
### Alles dumpen
Um alles zu dumpen, können Sie einfach zum **gleichen Pfad wie zuvor gehen, aber ohne einen Index anzugeben** `http://host:9200/_search?pretty=true` wie `http://10.10.10.115:9200/_search?pretty=true`\
Denken Sie daran, dass in diesem Fall die **Standardbegrenzung von 10** Ergebnissen angewendet wird. Sie können den `size`-Parameter verwenden, um eine **größere Menge an Ergebnissen** zu dumpen. Lesen Sie den vorherigen Abschnitt für weitere Informationen.
2024-02-10 15:36:32 +00:00
### Suche
Wenn Sie nach Informationen suchen, können Sie eine **Rohsuche in allen Indizes** durchführen, indem Sie zu `http://host:9200/_search?pretty=true&q=<search_term>` gehen, wie in `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
![](<../.gitbook/assets/image (335).png>)
Wenn Sie nur in einem Index **suchen möchten**, können Sie es einfach im **Pfad** angeben: `http://host:9200/<index>/_search?pretty=true&q=<search_term>`
2024-02-10 15:36:32 +00:00
_Beachten Sie, dass der q-Parameter, der zum Suchen von Inhalten verwendet wird, **reguläre Ausdrücke unterstützt**_
2020-07-27 15:27:48 +00:00
2024-02-10 15:36:32 +00:00
Sie können auch etwas wie [https://github.com/misalabs/horuz](https://github.com/misalabs/horuz) verwenden, um einen Elasticsearch-Dienst zu fuzzieren.
2024-02-10 15:36:32 +00:00
### Schreibberechtigungen
2024-02-10 15:36:32 +00:00
Sie können Ihre Schreibberechtigungen überprüfen, indem Sie versuchen, ein neues Dokument in einem neuen Index zu erstellen, indem Sie etwas Ähnliches ausführen:
```bash
curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d'
2024-02-10 15:36:32 +00:00
{
"bookId" : "A00-3",
"author" : "Sankaran",
"publisher" : "Mcgrahill",
"name" : "how to get a job"
}'
```
Die folgende cmd erstellt einen **neuen Index** namens `bookindex` mit einem Dokument vom Typ `books`, das die Attribute "_bookId_", "_author_", "_publisher_" und "_name_" hat.
Beachten Sie, wie der **neue Index jetzt in der Liste erscheint**:
![](<../.gitbook/assets/image (130).png>)
2024-02-10 15:36:32 +00:00
Und beachten Sie die **automatisch erstellten Eigenschaften**:
![](<../.gitbook/assets/image (434).png>)
## Automatische Enumeration
2020-07-17 14:32:55 +00:00
Einige Tools werden einige der zuvor präsentierten Daten erhalten:
2020-07-17 14:32:55 +00:00
```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum
```
2020-10-05 10:44:06 +00:00
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
2022-05-01 13:25:53 +00:00
## Shodan
2020-10-05 10:44:06 +00:00
* `port:9200 elasticsearch`
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2022-04-28 16:01:33 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
2024-02-10 15:36:32 +00:00
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github Repositories einreichen.
2022-04-28 16:01:33 +00:00
</details>