9200 - Pentesting Elasticsearch
Podstawowe informacje
Elasticsearch to rozdzielony, otwarty silnik wyszukiwania i analizy danych dla wszystkich typów danych. Znany jest z szybkości, skalowalności i prostych interfejsów REST. Zbudowany na Apache Lucene, został po raz pierwszy wydany w 2010 roku przez Elasticsearch N.V. (obecnie znany jako Elastic). Elasticsearch stanowi rdzeń stosu Elastic, kolekcji narzędzi typu open source do pobierania, wzbogacania, przechowywania, analizy i wizualizacji danych. Ten stos, często nazywany stos ELK, obejmuje również Logstash i Kibanę, a teraz posiada lekkie agenty wysyłające dane zwane Beats.
Co to jest indeks Elasticsearch?
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 znaków, liczby, wartości logiczne, daty, tablice, geolokacje, itp.).
Elasticsearch używa efektywnej struktury danych zwanej indeksem odwróconym, aby ułatwić szybkie wyszukiwanie pełnotekstowe. Ten indeks zawiera listę każdego unikalnego słowa w dokumentach i identyfikuje dokumenty, w których występuje każde słowo.
Podczas procesu indeksowania Elasticsearch przechowuje dokumenty i tworzy indeks odwrócony, umożliwiając wyszukiwanie w czasie zbliżonym do rzeczywistego. API indeksu służy do dodawania lub aktualizowania dokumentów JSON w określonym indeksie.
Domyślny port: 9200/tcp
Ręczne wyliczanie
Baner
Protokół używany do dostępu do Elasticsearch to HTTP. Gdy uzyskasz do niego dostęp za pomocą HTTP, znajdziesz kilka interesujących informacji: http://10.10.10.115:9200/
Jeśli nie widzisz tej odpowiedzi podczas dostępu do /
, zobacz następną sekcję.
Autoryzacja
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 za pomocą żądania do:
Jednakże, jeśli wysyłasz żądanie do /
i otrzymujesz odpowiedź w stylu:
To oznacza, że uwierzytelnienie jest skonfigurowane i potrzebujesz prawidłowych poświadczeń, aby uzyskać jakiekolwiek informacje z Elasticsearch. Następnie możesz spróbować przeprowadzić atak brutalnej siły (wykorzystuje on uwierzytelnianie podstawowe HTTP, więc można użyć wszystkiego, co może atakować uwierzytelnianie podstawowe HTTP). 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.
Podstawowe wyliczanie użytkowników
Informacje o Elasticsearch
Oto kilka punktów końcowych, do których możesz uzyskać dostęp za pomocą metody GET, aby uzyskać 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 pobrane z dokumentacji, gdzie możesz znaleźć więcej informacji.
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 uwierzytelnienie jest włączone), możesz zobaczyć, który użytkownik ma rolę superuser
.
Indeksy
Możesz zbierać wszystkie indeksy, uzyskując dostęp do http://10.10.10.115:9200/_cat/indices?v
Aby uzyskać informacje na temat rodzaju danych zapisanych wewnątrz indeksu, możesz uzyskać dostęp do: http://host:9200/<index>
na przykład w tym przypadku http://10.10.10.115:9200/bank
Wyciek indeksu
Jeśli chcesz wyciec 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) wewnątrz indeksu banku i pól tego indeksu, które widzieliśmy w poprzednim rozdziale.
Zauważysz więc, że istnieje pole o nazwie "total" wewnątrz "hits", które wskazuje, że znaleziono 1000 dokumentów wewnątrz tego indeksu, ale tylko 10 zostało pobranych. Dzieje się tak, ponieważ domyślnie istnieje limit 10 dokumentów.
Teraz, gdy wiesz, że ten indeks zawiera 1000 dokumentów, możesz wyciec je wszystkie, określając liczbę wpisów, które chcesz wyciec w parametrze size
: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
asd
Uwaga: Jeśli określisz większą liczbę, wszystkie wpisy zostaną wycięte, na przykład możesz określić size=9999
i byłoby to dziwne, gdyby istniało więcej wpisów (ale powinieneś sprawdzić).
Wyciek wszystkiego
Aby wyciec wszystko, po prostu udaj się do tej samej ścieżki co wcześniej, ale bez określania żadnego indeksu http://host:9200/_search?pretty=true
jak http://10.10.10.115:9200/_search?pretty=true
Pamiętaj, że w tym przypadku będzie stosowany domyślny limit 10 wyników. Możesz użyć parametru size
, aby wyciec większą ilość wyników. Przeczytaj poprzedni rozdział, aby uzyskać więcej informacji.
Szukaj
Jeśli szukasz 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 po prostu wyszukać w indeksie, możesz po prostu określić to w ścieżce: http://host:9200/<index>/_search?pretty=true&q=<search_term>
Zauważ, że parametr q używany do wyszukiwania zawartości obsługuje wyrażenia regularne
Możesz także użyć czegoś takiego jak https://github.com/misalabs/horuz, aby przetestować usługę Elasticsearch pod kątem fuzzowania.
Uprawnienia do zapisu
Możesz sprawdzić swoje uprawnienia do zapisu, próbując utworzyć nowy dokument w nowym indeksie, uruchamiając coś w rodzaju poniższego:
To polecenie utworzy nowy indeks o nazwie bookindex
z dokumentem typu books
, który ma atrybuty "bookId", "author", "publisher" i "name"
Zauważ, jak nowy indeks teraz pojawia się na liście:
Zauważ automatycznie utworzone właściwości:
Automatyczne wyliczanie
Niektóre narzędzia uzyskają niektóre z przedstawionych danych wcześniej:
Shodan
port:9200 elasticsearch
Last updated