14 KiB
9200 - Pentesting Elasticsearch
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju oglašenu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
Elasticsearch je distribuirani, open source pretraživač i analitički sistem za sve vrste podataka. Poznat je po svojoj brzini, šalabilnosti 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 open source alata za unos, obogaćivanje, skladištenje, analizu i vizualizaciju podataka. Ova kolekcija, često nazvana ELK Stack, takođe uključuje Logstash i Kibana, a sada ima i lagane agente za slanje podataka nazvane Beats.
Šta je Elasticsearch indeks?
Elasticsearch indeks je kolekcija povezanih dokumenata koji se čuvaju 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 procesa indeksiranja, Elasticsearch čuva dokumente i konstruiše inverzni indeks, što omogućava pretragu u gotovo realnom vremenu. Index API se koristi za dodavanje ili ažuriranje JSON dokumenata unutar određenog indeksa.
Podrazumevani port: 9200/tcp
Ručno nabrajanje
Banner
Protokol koji se koristi za pristup Elasticsearch-u je HTTP. Kada pristupite preko HTTP-a, pronaći ćete neke interesantne informacije: http://10.10.10.115:9200/
Ako ne vidite tu odgovor pristupajući /
, pogledajte sledeći odeljak.
Autentifikacija
Podrazumevano Elasticsearch nema omogućenu autentifikaciju, tako da podrazumevano možete pristupiti svemu unutar baze podataka bez korišćenja bilo kakvih akreditacija.
Možete proveriti da li je autentifikacija onemogućena zahtevom ka:
curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
{"error":{"root_cause":[{"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."}],"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."},"status":500}
Međutim, ako pošaljete zahtev na /
i dobijete odgovor kao što je sledeći:
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
To znači da je konfigurisana autentifikacija i potrebne su vam validne akreditacije da biste dobili bilo kakve informacije iz Elasticsearch-a. Zatim, možete pokušati da izvršite brute force napad (koristi HTTP osnovnu autentifikaciju, pa se može koristiti bilo šta što može da izvrši BF HTTP osnovne autentifikacije).
Evo vam lista 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.
curl -X GET http://user:password@IP:9200/
Osnovno prebrojavanje korisnika
Kada se bavite pentestiranjem Elasticsearcha, prvi korak je da identifikujete postojeće korisnike sistema. Ovo se može postići korišćenjem različitih metoda prebrojavanja korisnika.
1. Pretraživanje indeksa
Jedan od načina da se pronađu korisnici je pretraživanje indeksa koji sadrže informacije o korisnicima. Možete koristiti Elasticsearch API za pretragu indeksa i filtriranje rezultata kako biste pronašli relevantne informacije o korisnicima.
GET /_search
{
"query": {
"match": {
"field": "value"
}
}
}
2. Korišćenje API-ja za pretragu korisnika
Elasticsearch takođe pruža API za pretragu korisnika. Možete koristiti ovaj API za dobijanje informacija o postojećim korisnicima.
GET /_security/user
3. Korišćenje alata za prebrojavanje korisnika
Postoje i alati koji vam mogu pomoći da automatski prebrojite korisnike Elasticsearcha. Na primer, možete koristiti alat poput esusers
za prebrojavanje korisnika.
esusers list
Kada prebrojite korisnike, možete koristiti ove informacije za dalje istraživanje i testiranje sistema.
#List all roles on the system:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/role"
#List all users on the system:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user"
#Get more information about the rights of an user:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/<USERNAME>"
Elastic Info
Evo nekih endpointa do kojih možete pristupiti putem GET zahteva kako biste dobili neke 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 informacija.
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
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana 6tjAYZrgQ5CwwR0g6VOoRg 1 0 1 0 4kb 4kb
yellow open quotes ZG2D1IqkQNiNZmi2HRImnQ 5 1 253 0 262.7kb 262.7kb
yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 483.2kb 483.2kb
Da biste dobili informacije o vrsti podataka koji su spremljeni 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 izbaciti 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 bankovnog 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 vraćeno samo 10. To je zato što podrazumevano postoji ograničenje od 10 dokumenata.
Ali, sada kada znate da ovaj indeks sadrži 1000 dokumenata, možete izbaciti sve njih navodeći broj unosa koje želite izbaciti u parametru size
: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
asd
Napomena: Ako navedete veći broj, svi unosi će biti izbačeni, na primer možete navesti size=9999
i biće čudno ako ima više unosa (ali trebali biste proveriti).
Dump svega
Da biste izbacili sve, jednostavno idite na isti put kao i prethodno, ali bez navođenja bilo kojeg 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 parametar size
da biste izbacili 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živati na jednom indeksu, jednostavno ga navedite u putanji: http://host:9200/<index>/_search?pretty=true&q=<search_term>
Uočite da parametar q 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 dozvole za pisanje pokušavajući da kreirate novi dokument unutar novog indeksa pokretanjem nečega poput sledećeg:
curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d'
{
"bookId" : "A00-3",
"author" : "Sankaran",
"publisher" : "Mcgrahill",
"name" : "how to get a job"
}'
Ta komanda ć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 obratite pažnju na automatski kreirane osobine:
Automatsko nabrojavanje
Neki alati će dobiti neke od prikazanih podataka prethodno:
msf > use auxiliary/scanner/elasticsearch/indices_enum
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
Shodan
port:9200 elasticsearch
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.