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)
Ottieni la prospettiva di un hacker sulle tue app web, rete e cloud
Trova e segnala vulnerabilità critiche e sfruttabili con un reale impatto sul business. Usa i nostri oltre 20 strumenti personalizzati per mappare la superficie di attacco, trovare problemi di sicurezza che ti consentono di elevare i privilegi e utilizzare exploit automatizzati per raccogliere prove essenziali, trasformando il tuo duro lavoro in report persuasivi.
Elasticsearch è un motore di ricerca e analisi distribuito e open source per tutti i tipi di dati. È noto per la sua velocità, scalabilità e API REST semplici. Costruito su Apache Lucene, è stato rilasciato per la prima volta nel 2010 da Elasticsearch N.V. (ora conosciuta come Elastic). Elasticsearch è il componente principale dell'Elastic Stack, una raccolta di strumenti open source per l'ingestione, l'arricchimento, l'archiviazione, l'analisi e la visualizzazione dei dati. Questo stack, comunemente chiamato ELK Stack, include anche Logstash e Kibana, e ora ha agenti di spedizione dati leggeri chiamati Beats.
Un indice Elasticsearch è una collezione di documenti correlati memorizzati come JSON. Ogni documento è composto da chiavi e dai loro corrispondenti valori (stringhe, numeri, booleani, date, array, geolocalizzazioni, ecc.).
Elasticsearch utilizza una struttura dati efficiente chiamata indice invertito per facilitare ricerche full-text veloci. Questo indice elenca ogni parola unica nei documenti e identifica i documenti in cui appare ciascuna parola.
Durante il processo di indicizzazione, Elasticsearch memorizza i documenti e costruisce l'indice invertito, consentendo ricerche quasi in tempo reale. L'API dell'indice viene utilizzata per aggiungere o aggiornare documenti JSON all'interno di un indice specifico.
Porta predefinita: 9200/tcp
Il protocollo utilizzato per accedere a Elasticsearch è HTTP. Quando lo accedi tramite HTTP troverai alcune informazioni interessanti: http://10.10.10.115:9200/
Se non vedi quella risposta accedendo a /
, consulta la sezione seguente.
Per impostazione predefinita, Elasticsearch non ha l'autenticazione abilitata, quindi per impostazione predefinita puoi accedere a tutto ciò che si trova all'interno del database senza utilizzare alcuna credenziale.
Puoi verificare che l'autenticazione sia disabilitata con una richiesta a:
Tuttavia, se invii una richiesta a /
e ricevi una risposta come la seguente:
Questo significa che l'autenticazione è configurata e hai bisogno di credenziali valide per ottenere qualsiasi informazione da elasticsearch. Poi, puoi provare a fare bruteforce (utilizza l'autenticazione di base HTTP, quindi qualsiasi cosa che possa fare BF HTTP basic auth può essere utilizzata). Qui hai un elenco di nomi utente predefiniti: elastic (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_. Le versioni più vecchie di Elasticsearch hanno la password predefinita changeme per questo utente.
Ecco alcuni endpoint che puoi accedere tramite GET per ottenere alcune informazioni su 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 |
Questi endpoint sono stati presi dalla documentazione dove puoi trovare di più.
Inoltre, se accedi a /_cat
, la risposta conterrà gli endpoint /_cat/*
supportati dall'istanza.
In /_security/user
(se l'autenticazione è abilitata) puoi vedere quale utente ha il ruolo di superuser
.
Puoi raccogliere tutti gli indici accedendo a http://10.10.10.115:9200/_cat/indices?v
Per ottenere informazioni su che tipo di dati sono salvati all'interno di un indice puoi accedere a: http://host:9200/<index>
dall'esempio in questo caso http://10.10.10.115:9200/bank
Se vuoi dumpare tutti i contenuti di un indice puoi accedere a: http://host:9200/<index>/_search?pretty=true
come http://10.10.10.115:9200/bank/_search?pretty=true
Prenditi un momento per confrontare i contenuti di ciascun documento (voce) all'interno dell'indice bank e i campi di questo indice che abbiamo visto nella sezione precedente.
Quindi, a questo punto potresti notare che c'è un campo chiamato "total" all'interno di "hits" che indica che sono stati trovati 1000 documenti all'interno di questo indice ma solo 10 sono stati recuperati. Questo perché per impostazione predefinita c'è un limite di 10 documenti.
Ma, ora che sai che questo indice contiene 1000 documenti, puoi dumpare tutti indicando il numero di voci che vuoi dumpare nel parametro size
: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
asd
Nota: Se indichi un numero maggiore, tutte le voci saranno comunque dumpate, ad esempio potresti indicare size=9999
e sarebbe strano se ci fossero più voci (ma dovresti controllare).
Per dumpare tutto puoi semplicemente andare al stesso percorso di prima ma senza indicare alcun indice http://host:9200/_search?pretty=true
come http://10.10.10.115:9200/_search?pretty=true
Ricorda che in questo caso verrà applicato il limite predefinito di 10 risultati. Puoi usare il parametro size
per dumpare una maggiore quantità di risultati. Leggi la sezione precedente per ulteriori informazioni.
Se stai cercando alcune informazioni puoi fare una ricerca raw su tutti gli indici andando a http://host:9200/_search?pretty=true&q=<search_term>
come in http://10.10.10.115:9200/_search?pretty=true&q=Rockwell
Se vuoi solo cercare in un indice puoi semplicemente specificarlo nel percorso: http://host:9200/<index>/_search?pretty=true&q=<search_term>
Nota che il parametro q usato per cercare contenuti supporta le espressioni regolari
Puoi anche usare qualcosa come https://github.com/misalabs/horuz per fuzzare un servizio elasticsearch.
Puoi controllare i tuoi permessi di scrittura provando a creare un nuovo documento all'interno di un nuovo indice eseguendo qualcosa come il seguente:
Quella cmd creerà un nuovo indice chiamato bookindex
con un documento di tipo books
che ha gli attributi "bookId", "author", "publisher" e "name"
Nota come il nuovo indice appare ora nella lista:
E nota le proprietà create automaticamente:
Al alcuni strumenti otterranno alcuni dei dati presentati prima:
port:9200 elasticsearch
Ottieni la prospettiva di un hacker sulle tue web app, rete e cloud
Trova e segnala vulnerabilità critiche ed exploitabili con un reale impatto sul business. Usa i nostri oltre 20 strumenti personalizzati per mappare la superficie di attacco, trovare problemi di sicurezza che ti permettano di elevare i privilegi e utilizzare exploit automatizzati per raccogliere prove essenziali, trasformando il tuo duro lavoro in report persuasivi.
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)