15 KiB
9200 - Pentesting Elasticsearch
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Obtenha a perspectiva de um hacker sobre seus aplicativos web, rede e nuvem
Encontre e relate vulnerabilidades críticas e exploráveis com impacto real nos negócios. Use nossas 20+ ferramentas personalizadas para mapear a superfície de ataque, encontrar problemas de segurança que permitem escalar privilégios e usar exploits automatizados para coletar evidências essenciais, transformando seu trabalho árduo em relatórios persuasivos.
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
Informações básicas
Elasticsearch é um motor de busca e análise distribuído e open source para todos os tipos de dados. É conhecido por sua velocidade, escalabilidade e APIs REST simples. Construído sobre o Apache Lucene, foi lançado pela primeira vez em 2010 pela Elasticsearch N.V. (agora conhecida como Elastic). Elasticsearch é o componente central do Elastic Stack, uma coleção de ferramentas open source para ingestão, enriquecimento, armazenamento, análise e visualização de dados. Este stack, comumente referido como ELK Stack, também inclui Logstash e Kibana, e agora possui agentes de envio de dados leves chamados Beats.
O que é um índice Elasticsearch?
Um índice Elasticsearch é uma coleção de documentos relacionados armazenados como JSON. Cada documento consiste em chaves e seus correspondentes valores (strings, números, booleanos, datas, arrays, geolocalizações, etc.).
Elasticsearch usa uma estrutura de dados eficiente chamada índice invertido para facilitar buscas rápidas em texto completo. Este índice lista cada palavra única nos documentos e identifica os documentos em que cada palavra aparece.
Durante o processo de indexação, o Elasticsearch armazena os documentos e constrói o índice invertido, permitindo buscas quase em tempo real. A API de índice é usada para adicionar ou atualizar documentos JSON dentro de um índice específico.
Porta padrão: 9200/tcp
Enumeração Manual
Banner
O protocolo usado para acessar o Elasticsearch é HTTP. Quando você o acessa via HTTP, encontrará algumas informações interessantes: http://10.10.10.115:9200/
Se você não ver essa resposta acessando /
, veja a seção seguinte.
Autenticação
Por padrão, o Elasticsearch não tem autenticação habilitada, então, por padrão, você pode acessar tudo dentro do banco de dados sem usar credenciais.
Você pode verificar que a autenticação está desativada com uma solicitação para:
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}
No entanto, se você enviar uma solicitação para /
e receber uma resposta como a seguinte:
{"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}
Isso significa que a autenticação está configurada e você precisa de credenciais válidas para obter qualquer informação do elasticsearch. Então, você pode tentar fazer bruteforce (ele usa autenticação básica HTTP, então qualquer coisa que BF autenticação básica HTTP pode ser usada).
Aqui está uma lista de nomes de usuário padrão: elastic (superusuário), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_._ Versões mais antigas do Elasticsearch têm a senha padrão changeme para este usuário.
curl -X GET http://user:password@IP:9200/
Enumeração Básica de Usuários
#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
Aqui estão alguns endpoints que você pode acessar via GET para obter algumas informações sobre 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 |
Esses endpoints foram retirados da documentação onde você pode encontrar mais.
Além disso, se você acessar /_cat
, a resposta conterá os endpoints /_cat/*
suportados pela instância.
Em /_security/user
(se a autenticação estiver habilitada), você pode ver qual usuário tem o papel superuser
.
Indices
Você pode reunir todos os índices acessando 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
Para obter informações sobre que tipo de dados estão salvos dentro de um índice, você pode acessar: http://host:9200/<index>
do exemplo, neste caso http://10.10.10.115:9200/bank
Dump index
Se você quiser extrair todo o conteúdo de um índice, pode acessar: http://host:9200/<index>/_search?pretty=true
como http://10.10.10.115:9200/bank/_search?pretty=true
Tire um momento para comparar o conteúdo de cada documento (entrada) dentro do índice bank e os campos deste índice que vimos na seção anterior.
Então, neste ponto, você pode notar que existe um campo chamado "total" dentro de "hits" que indica que 1000 documentos foram encontrados dentro deste índice, mas apenas 10 foram recuperados. Isso ocorre porque por padrão há um limite de 10 documentos.
Mas, agora que você sabe que este índice contém 1000 documentos, você pode extrair todos eles indicando o número de entradas que deseja extrair no parâmetro size
: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
asd
&#xNAN;Nota: Se você indicar um número maior, todas as entradas serão extraídas de qualquer maneira, por exemplo, você poderia indicar size=9999
e seria estranho se houvesse mais entradas (mas você deve verificar).
Dump all
Para extrair tudo, você pode simplesmente ir para o mesmo caminho que antes, mas sem indicar nenhum índice http://host:9200/_search?pretty=true
como http://10.10.10.115:9200/_search?pretty=true
Lembre-se de que, neste caso, o limite padrão de 10 resultados será aplicado. Você pode usar o parâmetro size
para extrair uma maior quantidade de resultados. Leia a seção anterior para mais informações.
Search
Se você está procurando por alguma informação, pode fazer uma busca bruta em todos os índices indo para http://host:9200/_search?pretty=true&q=<search_term>
como em http://10.10.10.115:9200/_search?pretty=true&q=Rockwell
Se você quiser apenas pesquisar em um índice, pode simplesmente especificá-lo no caminho: http://host:9200/<index>/_search?pretty=true&q=<search_term>
Observe que o parâmetro q usado para buscar conteúdo suporta expressões regulares
Você também pode usar algo como https://github.com/misalabs/horuz para fuzz um serviço elasticsearch.
Write permissions
Você pode verificar suas permissões de escrita tentando criar um novo documento dentro de um novo índice executando algo como o seguinte:
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"
}'
Esse cmd criará um novo índice chamado bookindex
com um documento do tipo books
que tem os atributos "bookId", "author", "publisher" e "name"
Observe como o novo índice aparece agora na lista:
E note as propriedades criadas automaticamente:
Enumeração Automática
Algumas ferramentas obterão alguns dos dados apresentados antes:
msf > use auxiliary/scanner/elasticsearch/indices_enum
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
Shodan
port:9200 elasticsearch
Obtenha a perspectiva de um hacker sobre seus aplicativos web, rede e nuvem
Encontre e relate vulnerabilidades críticas e exploráveis com impacto real nos negócios. Use nossas mais de 20 ferramentas personalizadas para mapear a superfície de ataque, encontrar problemas de segurança que permitem que você eleve privilégios e use exploits automatizados para coletar evidências essenciais, transformando seu trabalho árduo em relatórios persuasivos.
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para os repositórios do HackTricks e HackTricks Cloud.