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)
Dobijte perspektivu hakera o vašim veb aplikacijama, mreži i oblaku
Pronađite i prijavite kritične, iskoristive ranjivosti sa stvarnim poslovnim uticajem. Koristite naših 20+ prilagođenih alata za mapiranje napadačke površine, pronalaženje bezbednosnih problema koji vam omogućavaju da eskalirate privilegije, i koristite automatizovane eksploate za prikupljanje suštinskih dokaza, pretvarajući vaš težak rad u uverljive izveštaje.
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-jima. 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 podataka, obogaćivanje, skladištenje, analizu i vizualizaciju. Ova stack, koja se obično naziva ELK Stack, takođe uključuje Logstash i Kibana, i sada ima lagane agente za slanje podataka nazvane Beats.
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 za olakšavanje brzih pretraga 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 pretragu gotovo u realnom vremenu. Index API se koristi za dodavanje ili ažuriranje JSON dokumenata unutar određenog indeksa.
Podrazumevani port: 9200/tcp
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.
Podrazumevano, Elasticsearch nema omogućenu autentifikaciju, tako da podrazumevano možete pristupiti svemu unutar baze podataka bez korišćenja bilo kakvih akreditiva.
Možete proveriti da li je autentifikacija onemogućena 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). 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.
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
.
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>
iz primera u ovom slučaju http://10.10.10.115:9200/bank
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).
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.
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.
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:
Neki alati će dobiti neke od podataka predstavljenih ranije:
port:9200 elasticsearch
Dobijte perspektivu hakera o vašim veb aplikacijama, mreži i oblaku
Pronađite i prijavite kritične, iskoristive ranjivosti sa stvarnim poslovnim uticajem. Koristite naših 20+ prilagođenih alata za mapiranje napadačke površine, pronalaženje bezbednosnih problema koji vam omogućavaju da eskalirate privilegije, i koristite automatizovane eksploate za prikupljanje suštinskih dokaza, pretvarajući vaš trud u uverljive izveštaje.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)