9200 - Pentesting Elasticsearch
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Get a hacker's perspective on your web apps, network, and cloud
Find and report critical, exploitable vulnerabilities with real business impact. Use our 20+ custom tools to map the attack surface, find security issues that let you escalate privileges, and use automated exploits to collect essential evidence, turning your hard work into persuasive reports.
Elasticsearch to rozproszony, otwarty silnik wyszukiwania i analizy dla wszystkich typów danych. Jest znany z szybkości, skalowalności i prosty REST API. Zbudowany na Apache Lucene, został po raz pierwszy wydany w 2010 roku przez Elasticsearch N.V. (obecnie znany jako Elastic). Elasticsearch jest podstawowym komponentem Elastic Stack, zbioru narzędzi open source do pobierania, wzbogacania, przechowywania, analizy i wizualizacji danych. Ten stos, powszechnie nazywany ELK Stack, obejmuje również Logstash i Kibana, a teraz ma lekkie agenty przesyłania danych zwane Beats.
Indeks Elasticsearch to zbiór powiązanych dokumentów przechowywanych jako JSON. Każdy dokument składa się z kluczy i odpowiadających im wartości (ciągi, liczby, wartości logiczne, daty, tablice, lokalizacje geograficzne itp.).
Elasticsearch używa wydajnej struktury danych zwanej indeksem odwróconym, aby ułatwić szybkie wyszukiwanie pełnotekstowe. Ten indeks wymienia każde unikalne słowo w dokumentach i identyfikuje dokumenty, w których każde słowo się pojawia.
Podczas procesu indeksowania Elasticsearch przechowuje dokumenty i konstruuje indeks odwrócony, co pozwala na wyszukiwanie w niemal rzeczywistym czasie. API indeksu jest używane do dodawania lub aktualizowania dokumentów JSON w określonym indeksie.
Domyślny port: 9200/tcp
Protokół używany do uzyskania dostępu do Elasticsearch to HTTP. Gdy uzyskasz do niego dostęp przez HTTP, znajdziesz interesujące informacje: http://10.10.10.115:9200/
Jeśli nie widzisz tej odpowiedzi, uzyskując dostęp do /
, zobacz następną sekcję.
Domyślnie Elasticsearch nie ma włączonej autoryzacji, więc domyślnie możesz uzyskać dostęp do wszystkiego w bazie danych bez użycia jakichkolwiek poświadczeń.
Możesz zweryfikować, że autoryzacja jest wyłączona, wysyłając żądanie do:
Jednakże, jeśli wyślesz żądanie do /
i otrzymasz odpowiedź podobną do poniższej:
To oznacza, że uwierzytelnianie jest skonfigurowane i potrzebujesz ważnych poświadczeń, aby uzyskać jakiekolwiek informacje z elasticserach. Następnie możesz spróbować przeprowadzić atak brute force (używa HTTP basic auth, więc wszystko, co może przeprowadzić BF HTTP basic auth, może być użyte). Oto lista domyślnych nazw użytkowników: elastic (superużytkownik), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_._ Starsze wersje Elasticsearch mają domyślne hasło changeme dla tego użytkownika.
Oto kilka punktów końcowych, które możesz uzyskać za pomocą GET, aby uzyskać pewne informacje o elasticsearch:
_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 |
Te punkty końcowe zostały wzięte z dokumentacji, gdzie możesz znaleźć więcej.
Ponadto, jeśli uzyskasz dostęp do /_cat
, odpowiedź będzie zawierać punkty końcowe /_cat/*
obsługiwane przez instancję.
W /_security/user
(jeśli uwierzytelnianie jest włączone) możesz zobaczyć, który użytkownik ma rolę superuser
.
Możesz zgromadzić wszystkie indeksy, uzyskując dostęp do http://10.10.10.115:9200/_cat/indices?v
Aby uzyskać informacje o tym, jakie dane są zapisane w indeksie, możesz uzyskać dostęp do: http://host:9200/<index>
w tym przypadku http://10.10.10.115:9200/bank
Jeśli chcesz zrzucić wszystkie zawartości indeksu, możesz uzyskać dostęp do: http://host:9200/<index>/_search?pretty=true
jak http://10.10.10.115:9200/bank/_search?pretty=true
Poświęć chwilę na porównanie zawartości każdego dokumentu (wpisu) w indeksie bankowym oraz pól tego indeksu, które widzieliśmy w poprzedniej sekcji.
Na tym etapie możesz zauważyć, że istnieje pole o nazwie "total" wewnątrz "hits", które wskazuje, że znaleziono 1000 dokumentów w tym indeksie, ale tylko 10 zostało zwróconych. Dzieje się tak, ponieważ domyślnie istnieje limit 10 dokumentów.
Jednak teraz, gdy wiesz, że ten indeks zawiera 1000 dokumentów, możesz zrzucić wszystkie z nich, wskazując liczbę wpisów, które chcesz zrzucić w parametrze size
: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
asd
Uwaga: Jeśli wskażesz większą liczbę, wszystkie wpisy i tak zostaną zrzucane, na przykład możesz wskazać size=9999
, a to będzie dziwne, jeśli byłoby więcej wpisów (ale powinieneś to sprawdzić).
Aby zrzucić wszystko, możesz po prostu przejść do tej samej ścieżki co wcześniej, ale bez wskazywania jakiegoś indeksu http://host:9200/_search?pretty=true
jak http://10.10.10.115:9200/_search?pretty=true
Pamiętaj, że w tym przypadku zostanie zastosowany domyślny limit 10 wyników. Możesz użyć parametru size
, aby zrzucić większą ilość wyników. Przeczytaj poprzednią sekcję, aby uzyskać więcej informacji.
Jeśli szukasz jakichś informacji, możesz przeprowadzić surowe wyszukiwanie we wszystkich indeksach, przechodząc do http://host:9200/_search?pretty=true&q=<search_term>
jak w http://10.10.10.115:9200/_search?pretty=true&q=Rockwell
Jeśli chcesz tylko wyszukiwać w indeksie, możesz po prostu określić go w ścieżce: http://host:9200/<index>/_search?pretty=true&q=<search_term>
Uwaga, że parametr q używany do wyszukiwania treści obsługuje wyrażenia regularne
Możesz również użyć czegoś takiego jak https://github.com/misalabs/horuz, aby fuzzować usługę elasticsearch.
Możesz sprawdzić swoje uprawnienia do zapisu, próbując utworzyć nowy dokument w nowym indeksie, uruchamiając coś takiego jak poniżej:
Ten cmd utworzy nowy indeks o nazwie bookindex
z dokumentem typu books
, który ma atrybuty "bookId", "author", "publisher" i "name".
Zauważ, jak nowy indeks pojawia się teraz na liście:
I zwróć uwagę na automatycznie utworzone właściwości:
Niektóre narzędzia uzyskają część danych przedstawionych wcześniej:
port:9200 elasticsearch
Uzyskaj perspektywę hakera na swoje aplikacje internetowe, sieć i chmurę
Znajdź i zgłoś krytyczne, wykorzystywalne luki w zabezpieczeniach, które mają rzeczywisty wpływ na biznes. Użyj naszych 20+ niestandardowych narzędzi do mapowania powierzchni ataku, znajdowania problemów z bezpieczeństwem, które pozwalają na eskalację uprawnień, oraz użyj zautomatyzowanych exploitów do zbierania niezbędnych dowodów, przekształcając swoją ciężką pracę w przekonujące raporty.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)