9200 - Pentesting Elasticsearch
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Erhalten Sie die Perspektive eines Hackers auf Ihre Webanwendungen, Netzwerke und Cloud
Finden und melden Sie kritische, ausnutzbare Schwachstellen mit echtem Geschäftsauswirkungen. Verwenden Sie unsere 20+ benutzerdefinierten Tools, um die Angriffsfläche zu kartieren, Sicherheitsprobleme zu finden, die Ihnen ermöglichen, Berechtigungen zu eskalieren, und automatisierte Exploits zu verwenden, um wesentliche Beweise zu sammeln, die Ihre harte Arbeit in überzeugende Berichte verwandeln.
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. Basierend auf Apache Lucene wurde es erstmals 2010 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 Datenaufnahme, -anreicherung, -speicherung, -analyse und -visualisierung. Dieser Stack, allgemein als ELK Stack bezeichnet, umfasst auch Logstash und Kibana und hat jetzt leichte Datenversandagenten namens Beats.
Ein Elasticsearch Index ist eine Sammlung von verwandten Dokumenten, die als JSON gespeichert sind. Jedes Dokument besteht aus Schlüsseln und den entsprechenden Werten (Strings, Zahlen, Booleans, Daten, Arrays, Geolokationen usw.).
Elasticsearch verwendet eine effiziente Datenstruktur namens invertierter Index, um schnelle Volltextsuche zu ermöglichen. Dieser Index listet jedes einzigartige 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 invertierten Index, der eine nahezu Echtzeitsuche ermöglicht. Die Index-API wird verwendet, um JSON-Dokumente innerhalb eines bestimmten Index hinzuzufügen oder zu aktualisieren.
Standardport: 9200/tcp
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/
Wenn Sie diese Antwort beim Zugriff auf /
nicht sehen, siehe den folgenden Abschnitt.
Standardmäßig ist die Authentifizierung in Elasticsearch nicht aktiviert, 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:
Wenn Sie jedoch eine Anfrage an /
senden und eine Antwort wie die folgende erhalten:
Das bedeutet, dass die Authentifizierung konfiguriert ist und Sie gültige Anmeldeinformationen benötigen, um Informationen von Elasticsearch zu erhalten. Dann können Sie versuchen, es zu bruteforcen (es verwendet HTTP Basic Auth, daher kann alles, was BF HTTP Basic Auth kann, verwendet werden). Hier haben Sie eine Liste der Standardbenutzernamen: 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.
Hier sind einige Endpunkte, die Sie über GET zugreifen können, um einige 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, wo Sie mehr finden können.
Wenn Sie /_cat
aufrufen, enthält die Antwort die unterstützten /_cat/*
Endpunkte der Instanz.
In /_security/user
(wenn Authentifizierung aktiviert ist) können Sie sehen, welcher Benutzer die Rolle superuser
hat.
Sie können alle Indizes sammeln, indem Sie http://10.10.10.115:9200/_cat/indices?v
aufrufen.
Um Informationen darüber zu erhalten, welche Art von Daten in einem Index gespeichert ist, können Sie auf: http://host:9200/<index>
zugreifen, im Beispiel in diesem Fall http://10.10.10.115:9200/bank
Wenn Sie den gesamten Inhalt eines Index dumpen möchten, können Sie auf: http://host:9200/<index>/_search?pretty=true
zugreifen, wie http://10.10.10.115:9200/bank/_search?pretty=true
Nehmen Sie sich einen Moment Zeit, um den Inhalt jedes Dokuments (Eintrag) im Bank-Index und die Felder dieses Index, die wir im vorherigen Abschnitt gesehen haben, zu vergleichen.
An diesem Punkt könnten Sie bemerken, dass es ein Feld namens "total" innerhalb von "hits" gibt, das anzeigt, 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 dumpen, indem Sie die Anzahl der Einträge, die Sie dumpen möchten, im size
-Parameter angeben: 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, zum Beispiel könnten Sie size=9999
angeben und es wäre seltsam, wenn es mehr Einträge gäbe (aber das sollten Sie überprüfen).
Um alles zu dumpen, können Sie einfach den gleichen Pfad wie zuvor, aber ohne Angabe eines Index gehen: http://host:9200/_search?pretty=true
wie http://10.10.10.115:9200/_search?pretty=true
Denken Sie daran, dass in diesem Fall die Standardgrenze 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.
Wenn Sie nach 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 in http://10.10.10.115:9200/_search?pretty=true&q=Rockwell
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 zur Suche nach Inhalten verwendet wird, reguläre Ausdrücke unterstützt
Sie können auch etwas wie https://github.com/misalabs/horuz verwenden, um einen Elasticsearch-Dienst zu fuzzern.
Sie können Ihre Schreibberechtigungen überprüfen, indem Sie versuchen, ein neues Dokument in einem neuen Index zu erstellen, indem Sie etwas wie das Folgende ausführen:
Dieser Befehl 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:
Und beachten Sie die automatisch erstellten Eigenschaften:
Einige Tools werden einige der zuvor präsentierten Daten abrufen:
port:9200 elasticsearch
Erhalten Sie die Perspektive eines Hackers auf Ihre Webanwendungen, Ihr Netzwerk und Ihre Cloud
Finden und melden Sie kritische, ausnutzbare Schwachstellen mit echtem Geschäftsauswirkungen. Verwenden Sie unsere 20+ benutzerdefinierten Tools, um die Angriffsfläche zu kartieren, Sicherheitsprobleme zu finden, die Ihnen ermöglichen, Berechtigungen zu eskalieren, und nutzen Sie automatisierte Exploits, um wesentliche Beweise zu sammeln, die Ihre harte Arbeit in überzeugende Berichte verwandeln.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)