9200 - Pentesting Elasticsearch
Osnovne informacije
Elasticsearch je distribuirani, otvoreni izvor pretraživač i analitički sistem za sve vrste podataka. Poznat je po brzini, razmerljivosti i jednostavnim REST API-ima. Izgrađen na Apache Lucene-u, 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 podataka. Ova kolekcija, često nazvana ELK Stack, takođe uključuje Logstash i Kibanu, a sada ima i lagane agente za slanje podataka nazvane Beats.
Šta je Elasticsearch indeks?
Elasticsearch indeks je kolekcija povezanih dokumenata sačuvanih kao JSON. Svaki dokument se sastoji od ključeva i njihovih odgovarajućih vrednosti (stringovi, brojevi, boolean vrednosti, datumi, nizovi, geolokacije, itd.).
Elasticsearch koristi efikasnu strukturu podataka nazvanu inverzni indeks kako bi omogućio brze pretrage celokupnog teksta. Ovaj indeks navodi svaku jedinstvenu reč u dokumentima i identifikuje dokumente u kojima se svaka reč pojavljuje.
Tokom indeksiranja, Elasticsearch čuva dokumente i konstruiše inverzni indeks, omogućavajući skoro realno vreme pretrage. Index API se koristi za dodavanje ili ažuriranje JSON dokumenata unutar određenog indeksa.
Podrazumevani port: 9200/tcp
Ručno nabrajanje
Baner
Protokol koji se koristi za pristup Elasticsearch-u je HTTP. Kada pristupite putem HTTP-a, pronaći ćete neke zanimljive informacije: http://10.10.10.115:9200/
Ako ne vidite tu odgovor pristupajući /
, pogledajte sledeći odeljak.
Autentikacija
Po podrazumevanim postavkama Elasticsearch nema omogućenu autentikaciju, tako da po podrazumevanim postavkama možete pristupiti svemu unutar baze podataka bez korišćenja bilo kakvih akreditiva.
Možete proveriti da li je autentikacija onemogućena zahtevom ka:
Međutim, ako pošaljete zahtev ka /
i dobijete odgovor kao u sledećem primeru:
To znači da je konfigurisana autentikacija i potrebne su važeće akreditacije da biste dobili bilo kakve informacije iz Elasticserach-a. Zatim možete pokušati da izvršite brute force napad (koristi HTTP osnovnu autentikaciju, tako da se može koristiti bilo šta što BF HTTP osnovnu autentikaciju). Ovde imate listu podrazumevanih korisničkih imena: elastic (superkorisnik), 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 nekih endpointa do kojih možete pristupiti putem GET zahteva kako biste dobili informacije o elasticsearch-u:
_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 |
Ovi endpointi su preuzeti iz dokumentacije gde možete pronaći više.
Takođe, ako pristupite /_cat
, odgovor će sadržati /_cat/*
endpointe podržane od strane instance.
U /_security/user
(ako je autentifikacija omogućena) možete videti koji korisnik ima ulogu superuser
.
Indeksi
Možete prikupiti sve indekse pristupanjem http://10.10.10.115:9200/_cat/indices?v
Za dobijanje informacija o vrsti podataka koji su sačuvani unutar indeksa možete pristupiti: http://host:9200/<index>
na primer u ovom slučaju http://10.10.10.115:9200/bank
Dump indeksa
Ako želite izlistati sve sadržaje indeksa možete pristupiti: http://host:9200/<index>/_search?pretty=true
kao što je 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 koje smo videli u prethodnom odeljku.
Dakle, u ovom trenutku možete primetiti da postoji polje nazvano "total" unutar "hits" koje ukazuje da je pronađeno 1000 dokumenata unutar ovog indeksa, ali je povučeno samo 10. To je zato što je podrazumevano postavljena granica od 10 dokumenata.
Međutim, sada kada znate da ovaj indeks sadrži 1000 dokumenata, možete izlistati sve njih navodeći broj unosa koje želite da izlistate u size
parametru: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
Napomena: Ako navedete veći broj, svi unosi će biti izlistani bez obzira, na primer možete navesti size=9999
i biće čudno ako postoji više unosa (ali trebalo bi da proverite).
Dump svih
Da biste izlistali sve, jednostavno idite na isto mesto kao pre ali bez navođenja 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 primenjena podrazumevana granica od 10 rezultata. Možete koristiti size
parametar da biste izlistali veći broj rezultata. Pročitajte prethodni odeljak za više informacija.
Pretraga
Ako tražite neke informacije, možete izvršiti sirovu pretragu svih indeksa 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 pretražiti indeks, možete to jednostavno navesti 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 za testiranje elasticsearch servisa.
Dozvole za pisanje
Možete proveriti svoje dozvole za pisanje pokušavajući da kreirate novi dokument unutar novog indeksa pokretanjem nečega sličnog sledećem:
Taj cmd će kreirati novi indeks nazvan bookindex
sa dokumentom tipa books
koji ima atribute "bookId", "author", "publisher" i "name"
Primetite kako se novi indeks sada pojavljuje na listi:
I primetite automatski kreirane osobine:
Automatsko Numerisanje
Neki alati će dobiti neke od prethodno prikazanih podataka:
Shodan
port:9200 elasticsearch
Last updated