hacktricks/network-services-pentesting/9200-pentesting-elasticsearch.md

13 KiB

9200 - Pentesting Elasticsearch

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Basiese inligting

Elasticsearch is 'n verspreide, oorspronklike soek- en analise-enjin vir alle tipes data. Dit staan bekend vir sy spoed, skaalbaarheid, en eenvoudige REST-API's. Gebou op Apache Lucene, dit is eerste vrygestel in 2010 deur Elasticsearch N.V. (nou bekend as Elastic). Elasticsearch is die kernkomponent van die Elastic Stack, 'n versameling oopbronhulpmiddels vir data-ingestie, verryking, berging, analise, en visualisering. Hierdie stapel, algemeen bekend as die ELK-stapel, sluit ook Logstash en Kibana in, en het nou ligte data-vervoer-agente genaamd Beats.

Wat is 'n Elasticsearch-indeks?

'n Elasticsearch indeks is 'n versameling verwante dokumente wat gestoor word as JSON. Elke dokument bestaan uit kodes en hul ooreenstemmende waardes (strings, getalle, booleans, datums, reekse, geolokasies, ens.).

Elasticsearch gebruik 'n effektiewe datastruktuur genaamd 'n omgekeerde indeks om vinnige volledige teks-soektogte te fasiliteer. Hierdie indeks lys elke unieke woord in die dokumente en identifiseer die dokumente waarin elke woord verskyn.

Tydens die indekseringsproses stoor Elasticsearch die dokumente en konstrueer die omgekeerde indeks, wat naby aan regstreekse soektogte moontlik maak. Die indeks-API word gebruik om JSON-dokumente by 'n spesifieke indeks by te voeg of op te dateer.

Verstekpoort: 9200/tcp

Handmatige Opsomming

Banier

Die protokol wat gebruik word om toegang tot Elasticsearch te verkry is HTTP. Wanneer jy dit via HTTP toegang, sal jy interessante inligting vind: http://10.10.10.115:9200/

As jy nie daardie reaksie sien wanneer jy / toegang nie, sien die volgende afdeling.

Verifikasie

Standaard het Elasticsearch nie verifikasie geaktiveer nie, so standaard kan jy alles binne die databasis toegang sonder om enige geloofsbriewe te gebruik.

Jy kan verifieer dat verifikasie uitgeskakel is met 'n versoek na:

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}

Nietemin, as jy 'n versoek stuur na / en 'n antwoord ontvang soos die volgende een:

{"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}

Dit beteken dat verifikasie ingestel is en jy geldige geloofsbriewe nodig het om enige inligting van Elasticsearch te verkry. Dan kan jy probeer om dit te kragtig (dit gebruik HTTP basiese outentifisering, so enige iets wat BF HTTP basiese outentifisering kan gebruik word).
Hier het jy 'n lys van verstek gebruikersname: elasties (supergebruiker), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_._ Ouer weergawes van Elasticsearch het die verstek wagwoord changeme vir hierdie gebruiker

curl -X GET http://user:password@IP:9200/

Basiese Gebruiker Opsomming

#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>"

Elastiese Inligting

Hier is enkele eindpunte wat jy kan toegang kry via GET om inligting oor elasticsearch te verkry:

_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

Hierdie eindpunte is geneem uit die dokumentasie waar jy meer kan vind.
Ook, as jy /_cat toegang gee, sal die respons die /_cat/* eindpunte bevat wat deur die instansie ondersteun word.

In /_security/user (as outentifisering geaktiveer is) kan jy sien watter gebruiker die rol superuser het.

Indekse

Jy kan alle indekse versamel deur toegang te verkry tot 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

Om inligting oor watter soort data binne 'n indeks gestoor word te verkry, kan jy toegang kry tot: http://host:9200/<indeks> byvoorbeeld in hierdie geval http://10.10.10.115:9200/bank

Dump indeks

As jy al die inhoud van 'n indeks wil dump, kan jy toegang kry tot: http://host:9200/<indeks>/_search?pretty=true soos http://10.10.10.115:9200/bank/_search?pretty=true

Neem 'n oomblik om die inhoud van elke dokument (inskrywing) binne die bank indeks te vergelyk en die velde van hierdie indeks wat ons in die vorige afdeling gesien het.

Op hierdie punt mag jy opmerk dat daar 'n veld genaamd "total" binne "hits" is wat aandui dat daar 1000 dokumente binne hierdie indeks gevind is, maar slegs 10 is teruggevind. Dit is omdat daar standaard 'n limiet van 10 dokumente is.
Maar, nou dat jy weet dat hierdie indeks 1000 dokumente bevat, kan jy hulle almal dump deur die aantal inskrywings aan te dui wat jy wil dump in die size parameter: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000asd
Noot: As jy 'n groter getal aandui, sal al die inskrywings hoe dan ook gedump word, byvoorbeeld jy kan size=9999 aandui en dit sal vreemd wees as daar meer inskrywings was (maar jy moet nagaan).

Dump alles

Om alles te dump, kan jy net na dieselfde pad gaan as voorheen, maar sonder om enige indeks aan te dui http://host:9200/_search?pretty=true soos http://10.10.10.115:9200/_search?pretty=true
Onthou dat in hierdie geval die standaard limiet van 10 resultate toegepas sal word. Jy kan die size parameter gebruik om 'n groter hoeveelheid resultate te dump. Lees die vorige afdeling vir meer inligting.

Soek

As jy op soek is na sekere inligting, kan jy 'n rofweg soek op alle indekse doen deur te gaan na http://host:9200/_search?pretty=true&q=<soek_term> soos in http://10.10.10.115:9200/_search?pretty=true&q=Rockwell

As jy net wil soek op 'n indeks, kan jy dit net spesifiseer op die pad: http://host:9200/<indeks>/_search?pretty=true&q=<soek_term>

Let daarop dat die q parameter wat gebruik word om inhoud te soek gewone uitdrukkings ondersteun.

Jy kan ook iets soos https://github.com/misalabs/horuz gebruik om 'n elasticsearch-diens te fuzz.

Skryfregte

Jy kan jou skryfregte nagaan deur te probeer om 'n nuwe dokument binne 'n nuwe indeks te skep deur iets soos die volgende uit te voer:

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"
}'

Die cmd sal 'n nuwe indeks genaamd bookindex skep met 'n dokument van die tipe books wat die eienskappe "bookId", "author", "publisher" en "name" het

Let op hoe die nuwe indeks nou in die lys verskyn:

En let op die outomaties geskepte eienskappe:

Outomatiese Opsomming

Sommige gereedskappe sal van die data wat voorheen aangebied is, verkry:

msf > use auxiliary/scanner/elasticsearch/indices_enum

{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}

Shodan

  • port:9200 elasticsearch
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: