mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-23 19:43:31 +00:00
194 lines
14 KiB
Markdown
194 lines
14 KiB
Markdown
# 9200 - Pentesting Elasticsearch
|
|
|
|
<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>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* 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-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 **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.
|
|
|
|
### 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.).
|
|
|
|
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, 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>)
|
|
|
|
Wenn Sie diese Antwort beim Zugriff auf `/` nicht sehen, lesen Sie den folgenden Abschnitt.
|
|
|
|
### Authentifizierung
|
|
|
|
**Standardmäßig ist die Authentifizierung in Elasticsearch deaktiviert**, sodass Sie standardmäßig auf alles in der Datenbank zugreifen können, ohne Anmeldeinformationen zu verwenden.
|
|
|
|
Sie können überprüfen, ob die Authentifizierung deaktiviert ist, indem Sie eine Anfrage an:
|
|
```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:
|
|
```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.
|
|
```
|
|
curl -X GET http://user:password@IP:9200/
|
|
```
|
|
### Grundlegende Benutzerenumeration
|
|
```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
|
|
|
|
Hier sind einige Endpunkte, die Sie über GET aufrufen 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 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.
|
|
|
|
In `/_security/user` (falls Authentifizierung aktiviert ist) können Sie sehen, welcher Benutzer die Rolle `superuser` hat.
|
|
|
|
### 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)._
|
|
|
|
### 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.
|
|
|
|
### 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>`
|
|
|
|
_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"
|
|
}'
|
|
```
|
|
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>)
|
|
|
|
Und beachten Sie die **automatisch erstellten Eigenschaften**:
|
|
|
|
![](<../.gitbook/assets/image (434).png>)
|
|
|
|
## Automatische Enumeration
|
|
|
|
Einige Tools werden einige der zuvor präsentierten Daten erhalten:
|
|
```bash
|
|
msf > use auxiliary/scanner/elasticsearch/indices_enum
|
|
```
|
|
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
|
|
|
|
## Shodan
|
|
|
|
* `port:9200 elasticsearch`
|
|
|
|
<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>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* 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)
|
|
* 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.
|
|
|
|
</details>
|