9200 - Pentesting Elasticsearch
Basic information
Elasticsearch je distribuirani, otvoreni izvor pretraživač i analitički motor za sve vrste podataka. Poznat je po svojoj brzini, skalabilnosti i jednostavnim REST API-ima. Izgrađen na Apache Lucene, prvi put je objavljen 2010. godine od strane Elasticsearch N.V. (sada poznat kao Elastic). Elasticsearch je osnovna komponenta Elastic Stack-a, kolekcije alata otvorenog koda za unos, obogaćivanje, skladištenje, analizu i vizualizaciju podataka. Ova kolekcija, koja se obično naziva ELK Stack, takođe uključuje Logstash i Kibana, a sada ima i lagane agente za slanje podataka nazvane Beats.
What is an Elasticsearch index?
Elasticsearch indeks je kolekcija povezanih dokumenata pohranjenih kao JSON. Svaki dokument se sastoji od ključeva i njihovih odgovarajućih vrednosti (stringovi, brojevi, booleovi, datumi, nizovi, geolokacije, itd.).
Elasticsearch koristi efikasnu strukturu podataka nazvanu inverzni indeks kako bi olakšao brza pretraživanja punog teksta. Ovaj indeks navodi svaku jedinstvenu reč u dokumentima i identifikuje dokumente u kojima se svaka reč pojavljuje.
Tokom procesa indeksiranja, Elasticsearch pohranjuje dokumente i konstruira inverzni indeks, omogućavajući gotovo real-time pretraživanje. Index API se koristi za dodavanje ili ažuriranje JSON dokumenata unutar specifičnog indeksa.
Default port: 9200/tcp
Manual Enumeration
Banner
Protokol koji se koristi za pristup Elasticsearch-u je HTTP. Kada mu pristupite putem HTTP-a, pronaći ćete neke zanimljive informacije: http://10.10.10.115:9200/
Ako ne vidite taj odgovor prilikom pristupa /
, pogledajte sledeću sekciju.
Authentication
Po defaultu, Elasticsearch nema omogućenu autentifikaciju, tako da po defaultu možete pristupiti svemu unutar baze podataka bez korišćenja bilo kakvih kredencijala.
Možete proveriti da li je autentifikacija onemogućena sa zahtevom na:
Međutim, ako pošaljete zahtev na /
i dobijete odgovor poput sledećeg:
To će značiti da je autentifikacija konfigurisana i potrebne su vam važeće kredencijale da biste dobili bilo kakve informacije iz elasticsearch-a. Zatim, možete pokušati da bruteforce-ujete (koristi HTTP basic auth, tako da se može koristiti bilo šta što BF HTTP basic auth može koristiti). Evo vam lista podrazumevanih korisničkih imena: elastic (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_._ Starije verzije Elasticsearch-a imaju podrazumevanu lozinku changeme za ovog korisnika.
Osnovna Enumeracija Korisnika
Elastic Info
Evo nekoliko krajnjih tačaka koje možete pristupiti putem GET da dobijete neke informacije 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 |
Ove krajnje tačke su uzete iz dokumentacije gde možete pronaći više.
Takođe, ako pristupite /_cat
, odgovor će sadržati /_cat/*
krajnje tačke koje podržava instanca.
U /_security/user
(ako je autentifikacija omogućena) možete videti koji korisnik ima ulogu superuser
.
Indices
Možete prikupiti sve indekse pristupajući http://10.10.10.115:9200/_cat/indices?v
Da biste dobili informacije o tome koja vrsta podataka je sačuvana unutar indeksa, možete pristupiti: http://host:9200/<index>
u ovom slučaju http://10.10.10.115:9200/bank
Dump index
Ako želite da izbacite sav sadržaj indeksa, možete pristupiti: http://host:9200/<index>/_search?pretty=true
kao http://10.10.10.115:9200/bank/_search?pretty=true
Uzmite trenutak da uporedite sadržaj svakog dokumenta (unosa) unutar bank indeksa i polja ovog indeksa koja smo videli u prethodnom odeljku.
Dakle, u ovom trenutku možete primetiti da postoji polje nazvano "total" unutar "hits" koje ukazuje da je 1000 dokumenata pronađeno unutar ovog indeksa, ali je samo 10 vraćeno. To je zato što podrazumevano postoji limit od 10 dokumenata.
Ali, sada kada znate da ovaj indeks sadrži 1000 dokumenata, možete izbaciti sve njih tako što ćete naznačiti broj unosa koje želite da izbacite u size
parametru: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
asd
Napomena: Ako naznačite veći broj, svi unosi će biti izbačeni u svakom slučaju, na primer, mogli biste naznačiti size=9999
i biće čudno ako ima više unosa (ali trebate proveriti).
Dump all
Da biste izbacili sve, možete jednostavno otići na istu putanju kao pre, ali bez naznačavanja bilo kog indeksa http://host:9200/_search?pretty=true
kao http://10.10.10.115:9200/_search?pretty=true
Zapamtite da će u ovom slučaju biti primenjen podrazumevani limit od 10 rezultata. Možete koristiti size
parametar da izbacite veću količinu rezultata. Pročitajte prethodni odeljak za više informacija.
Search
Ako tražite neke informacije, možete uraditi sirovu pretragu po svim indeksima odlaskom na http://host:9200/_search?pretty=true&q=<search_term>
kao u http://10.10.10.115:9200/_search?pretty=true&q=Rockwell
Ako želite samo da pretražujete unutar indeksa, možete jednostavno naznačiti ga u putanji: http://host:9200/<index>/_search?pretty=true&q=<search_term>
Napomena da q parametar koji se koristi za pretragu sadržaja podržava regularne izraze
Takođe možete koristiti nešto poput https://github.com/misalabs/horuz da fuzz-ujete elasticsearch servis.
Write permissions
Možete proveriti svoja prava pisanja pokušavajući da kreirate novi dokument unutar novog indeksa pokretanjem nečega poput sledećeg:
That cmd will create a new index called bookindex
with a document of type books
that has the attributes "bookId", "author", "publisher" and "name"
Notice how the new index appears now in the list:
And note the automatically created properties:
Automatic Enumeration
Neki alati će dobiti neke od podataka predstavljenih ranije:
Shodan
port:9200 elasticsearch
Last updated