mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-23 19:43:31 +00:00
218 lines
16 KiB
Markdown
218 lines
16 KiB
Markdown
# 9200 - Pentesting Elasticsearch
|
|
|
|
<details>
|
|
|
|
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben 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-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.
|
|
|
|
</details>
|
|
|
|
## 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 **einfache REST-APIs**. Basierend auf Apache Lucene 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 die Datenaufnahme, -anreicherung, -speicherung, -analyse und -visualisierung. Dieser Stack, allgemein als ELK Stack bezeichnet, umfasst auch Logstash und Kibana und verfügt nun über leichte Datenversandagenten namens Beats.
|
|
|
|
### Was ist ein Elasticsearch-Index?
|
|
|
|
Ein Elasticsearch-**Index** ist eine Sammlung von **zusammenhängenden Dokumenten**, die als **JSON** gespeichert sind. Jedes Dokument besteht aus **Schlüsseln** und ihren entsprechenden **Werten** (Zeichenketten, Zahlen, Booleans, Daten, Arrays, Geolokationen usw.).
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
**Standardport**: 9200/tcp
|
|
|
|
## Manuelle Enumeration
|
|
|
|
### Banner
|
|
|
|
Das Protokoll, das zum Zugriff auf Elasticsearch verwendet wird, ist **HTTP**. Wenn Sie über HTTP darauf zugreifen, finden Sie einige interessante Informationen: `http://10.10.10.115:9200/`
|
|
|
|
![](<../.gitbook/assets/image (264).png>)
|
|
|
|
Wenn Sie diese Antwort beim Zugriff auf `/` nicht sehen, lesen Sie den folgenden Abschnitt.
|
|
|
|
### Authentifizierung
|
|
|
|
**Standardmäßig ist in Elasticsearch keine Authentifizierung aktiviert**, daher können Sie standardmäßig auf alles in der Datenbank zugreifen, ohne Anmeldeinformationen zu verwenden.
|
|
|
|
Sie können überprüfen, ob die Authentifizierung deaktiviert ist, indem Sie eine Anfrage an stellen:
|
|
```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}
|
|
```
|
|
**Jedoch**, wenn Sie eine Anfrage an `/` senden und eine Antwort wie die folgende erhalten:
|
|
```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, es [**bruteforce**](../generic-methodologies-and-resources/brute-force.md#elasticsearch) (es verwendet HTTP Basic Auth, daher kann alles verwendet werden, was HTTP Basic Auth bruteforcen kann).\
|
|
Hier haben Sie eine **Liste der Standard-Benutzernamen**: _**elastic** (Superuser), 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.
|
|
```
|
|
curl -X GET http://user:password@IP:9200/
|
|
```
|
|
### Grundlegende Benutzerenumeration
|
|
|
|
Elasticsearch bietet verschiedene Möglichkeiten zur Benutzerenumeration. Hier sind einige grundlegende Techniken, die verwendet werden können:
|
|
|
|
#### 1. Port Scanning
|
|
|
|
Port Scanning ist der Prozess des Scannens von Netzwerkports, um offene Ports zu identifizieren. Dies kann verwendet werden, um Elasticsearch-Instanzen zu finden, die auf einem bestimmten Host ausgeführt werden.
|
|
|
|
#### 2. Banner Grabbing
|
|
|
|
Banner Grabbing bezieht sich auf das Abrufen von Informationen aus den Bannern, die von einem Dienst zurückgegeben werden. Dies kann verwendet werden, um Informationen über die Version von Elasticsearch und andere Details zu erhalten.
|
|
|
|
#### 3. Default Credentials
|
|
|
|
Elasticsearch verwendet standardmäßig keine Benutzeranmeldeinformationen. Es ist jedoch möglich, dass Administratoren Benutzerkonten erstellt haben, um den Zugriff auf die Instanz zu beschränken. Es ist wichtig, die Standardanmeldeinformationen zu überprüfen, um festzustellen, ob sie geändert wurden.
|
|
|
|
#### 4. Dictionary Attacks
|
|
|
|
Wörterbuchangriffe beziehen sich auf den Versuch, sich mit einem Dienst anzumelden, indem eine Liste häufig verwendeter Benutzernamen und Passwörter ausprobiert wird. Dies kann verwendet werden, um schwache oder unsichere Anmeldeinformationen zu identifizieren.
|
|
|
|
#### 5. Brute-Force Attacks
|
|
|
|
Brute-Force-Angriffe beziehen sich auf den Versuch, sich mit einem Dienst anzumelden, indem alle möglichen Kombinationen von Benutzernamen und Passwörtern ausprobiert werden. Dies kann verwendet werden, um schwache oder unsichere Anmeldeinformationen zu identifizieren.
|
|
|
|
Es ist wichtig zu beachten, dass das Durchführen von Benutzerenumeration ohne vorherige Zustimmung des Eigentümers illegal sein kann. Stellen Sie sicher, dass Sie die entsprechenden Genehmigungen haben, bevor Sie diese Techniken anwenden.
|
|
```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>"
|
|
```
|
|
### Elastic Info
|
|
|
|
Hier sind einige Endpunkte, auf die Sie über GET zugreifen können, um Informationen über Elasticsearch zu erhalten:
|
|
|
|
| \_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](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) entnommen, wo Sie weitere Informationen finden können.\
|
|
Wenn Sie auf `/_cat` zugreifen, enthält die Antwort die von der Instanz unterstützten `/_cat/*`-Endpunkte.
|
|
|
|
In `/_security/user` (falls Authentifizierung aktiviert ist) können Sie sehen, welcher Benutzer die Rolle `superuser` hat.
|
|
|
|
### Indices
|
|
|
|
Sie können alle Indizes sammeln, 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 `http://host:9200/<index>` zugreifen, zum Beispiel in diesem Fall `http://10.10.10.115:9200/bank`
|
|
|
|
![](<../.gitbook/assets/image (265).png>)
|
|
|
|
### Index dumpen
|
|
|
|
Wenn Sie den **Inhalt eines Indexes vollständig dumpen möchten**, können Sie auf `http://host:9200/<index>/_search?pretty=true` zugreifen, wie zum Beispiel `http://10.10.10.115:9200/bank/_search?pretty=true`
|
|
|
|
![](<../.gitbook/assets/image (266).png>)
|
|
|
|
_Nehmen Sie sich einen Moment Zeit, um den Inhalt jedes Dokuments (Eintrag) im Bank-Index und die Felder dieses Indexes 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 anzeigt, dass in diesem Index **1000 Dokumente 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 trotzdem alle Einträge gedumpt. Sie könnten beispielsweise `size=9999` angeben, und es wäre seltsam, wenn es mehr Einträge gäbe (aber Sie sollten überprüfen)._
|
|
|
|
### 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 zum Beispiel `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 Anzahl von Ergebnissen** zu dumpen. Lesen Sie den vorherigen Abschnitt für weitere Informationen.
|
|
|
|
### Suche
|
|
|
|
Wenn Sie nach bestimmten Informationen suchen, können Sie eine **rohe Suche in allen Indizes** durchführen, indem Sie zu `http://host:9200/_search?pretty=true&q=<search_term>` gehen, wie zum Beispiel `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
|
|
|
|
![](<../.gitbook/assets/image (267).png>)
|
|
|
|
Wenn Sie nur in einem Index suchen möchten, können Sie ihn einfach im **Pfad** angeben: `http://host:9200/<index>/_search?pretty=true&q=<search_term>`
|
|
|
|
_Beachten Sie, dass der q-Parameter, der zum Suchen von Inhalten verwendet wird, **reguläre Ausdrücke unterstützt**_
|
|
|
|
Sie können auch etwas wie [https://github.com/misalabs/horuz](https://github.com/misalabs/horuz) verwenden, um einen Elasticsearch-Dienst zu fuzzieren.
|
|
|
|
### Schreibberechtigungen
|
|
|
|
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'
|
|
{
|
|
"bookId" : "A00-3",
|
|
"author" : "Sankaran",
|
|
"publisher" : "Mcgrahill",
|
|
"name" : "how to get a job"
|
|
}'
|
|
```
|
|
Diese Befehlszeile erstellt einen **neuen Index** namens `bookindex` mit einem Dokument vom Typ `books`, das die Attribute "_bookId_", "_author_", "_publisher_" und "_name_" enthält.
|
|
|
|
Beachten Sie, wie der **neue Index jetzt in der Liste** erscheint:
|
|
|
|
![](<../.gitbook/assets/image (268).png>)
|
|
|
|
Und beachten Sie die **automatisch erstellten Eigenschaften**:
|
|
|
|
![](<../.gitbook/assets/image (269).png>)
|
|
|
|
## Automatische Aufzählung
|
|
|
|
Einige Tools werden einige der zuvor präsentierten Daten abrufen:
|
|
```bash
|
|
msf > use auxiliary/scanner/elasticsearch/indices_enum
|
|
```
|
|
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
|
|
|
|
## Shodan
|
|
|
|
* `port:9200 elasticsearch`
|
|
|
|
<details>
|
|
|
|
<summary><strong>Lernen 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>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben 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-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.
|
|
|
|
</details>
|