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

13 KiB
Raw Blame History

9200 - Pentesting Elasticsearch

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Temel bilgiler

Elasticsearch, dağıtık, ık kaynak bir arama ve analiz motorudur ve her türlü veri için kullanılır. Hızı, ölçeklenebilirliği ve basit REST API'leri ile bilinir. Apache Lucene üzerine inşa edilmiştir ve ilk olarak 2010 yılında Elasticsearch N.V. (şimdi Elastic olarak bilinir) tarafından piyasaya sürülmüştür. Elasticsearch, veri alımı, zenginleştirme, depolama, analiz ve görselleştirme için açık kaynak araçların bir koleksiyonu olan Elastic Stack'in temel bileşenidir. Genellikle ELK Stack olarak adlandırılan bu yığın, ayrıca Logstash ve Kibana'yı içerir ve şimdi Beats adı verilen hafif veri taşıma ajanlarına sahiptir.

Elasticsearch indeksi nedir?

Elasticsearch indeksi, JSON olarak saklanan ilişkili belgelerin bir koleksiyonudur. Her belge, anahtarlar ve bunların karşılık gelen değerleri (dizeler, sayılar, booleanlar, tarihler, diziler, coğrafi konumlar vb.) içerir.

Elasticsearch, hızlı tam metin aramaları sağlamak için ters indeks adı verilen verimli bir veri yapısı kullanır. Bu indeks, belgelerdeki her benzersiz kelimeyi listeler ve her kelimenin göründüğü belgeleri tanımlar.

İndeksleme süreci sırasında, Elasticsearch belgeleri saklar ve ters indeksi oluşturur, bu da neredeyse gerçek zamanlı arama yapılmasına olanak tanır. İndeks API'si, belirli bir indeks içinde JSON belgelerini eklemek veya güncellemek için kullanılır.

Varsayılan port: 9200/tcp

Manuel Sayım

Banner

Elasticsearch'e erişmek için kullanılan protokol HTTP'dir. HTTP üzerinden eriştiğinizde bazı ilginç bilgiler bulacaksınız: http://10.10.10.115:9200/

Eğer / erişirken bu yanıtı görmüyorsanız, aşağıdaki bölüme bakın.

Kimlik Doğrulama

Varsayılan olarak Elasticsearch'te kimlik doğrulama etkin değildir, bu nedenle varsayılan olarak veritabanının içindeki her şeye herhangi bir kimlik bilgisi kullanmadan erişebilirsiniz.

Kimlik doğrulamanın devre dışı olduğunu bir istekle doğrulayabilirsiniz:

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}

Ancak, eğer / adresine bir istek gönderirseniz ve aşağıdaki gibi bir yanıt alırsanız:

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

Bu, kimlik doğrulamanın yapılandırıldığı ve geçerli kimlik bilgilerine sahip olmanız gerektiği anlamına gelir. Ardından, bunu brute force ile denemek (HTTP temel kimlik doğrulaması kullanır, bu nedenle BF HTTP temel kimlik doğrulaması ile kullanılabilecek her şey kullanılabilir).
İşte bir varsayılan kullanıcı adı listesi: elastic (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_._ Elasticsearch'in eski sürümleri için bu kullanıcı için varsayılan şifre changemedir.

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

Temel Kullanıcı Sayımı

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

Elasticsearch hakkında bazı bilgiler edinmek için GET ile erişebileceğiniz bazı uç noktalar:

_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

Bu uç noktalar belgeden alınmıştır burada daha fazla bulabilirsiniz.
Ayrıca, /_cat'e erişirseniz, yanıt /_cat/* uç noktalarını içerecektir.

/_security/user'da (eğer kimlik doğrulama etkinse) hangi kullanıcının superuser rolüne sahip olduğunu görebilirsiniz.

İndeksler

http://10.10.10.115:9200/_cat/indices?v adresine erişerek tüm indeksleri toplayabilirsiniz.

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

Bir indeksin içinde hangi tür verilerin kaydedildiği hakkında bilgi almak için http://host:9200/<index> adresine erişebilirsiniz, bu durumda örneğin http://10.10.10.115:9200/bank

İndeksi Dökme

Eğer bir indeksin tüm içeriğini dökmek istiyorsanız, http://host:9200/<index>/_search?pretty=true adresine erişebilirsiniz, örneğin http://10.10.10.115:9200/bank/_search?pretty=true

Bank indeksindeki her belgenin (girişin) içeriğini ve önceki bölümde gördüğümüz bu indeksin alanlarını karşılaştırmak için bir an durun.

Bu noktada, "hits" içinde "total" adında bir alan olduğunu fark edebilirsiniz; bu, bu indekste 1000 belgenin bulunduğunu ancak yalnızca 10'unun geri alındığını gösterir. Bunun nedeni, varsayılan olarak 10 belge sınırının olmasıdır.
Ama, artık bu indeksin 1000 belge içerdiğini bildiğinize göre, hepsini dökebilirsiniz; dökmek istediğiniz giriş sayısını size parametresinde belirtebilirsiniz: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000asd
Not: Daha büyük bir sayı belirtirseniz, tüm girişler yine de dökülecektir; örneğin size=9999 belirtebilirsiniz ve daha fazla giriş varsa garip olur (ama kontrol etmelisiniz).

Hepsini Dökme

Hepsini dökmek için, önceki yolla aynı yola gidebilir ancak herhangi bir indeks belirtmeden http://host:9200/_search?pretty=true adresine gidebilirsiniz, örneğin http://10.10.10.115:9200/_search?pretty=true
Bu durumda varsayılan 10 sonuç sınırının uygulanacağını unutmayın. Daha büyük bir sonuç miktarını dökmek için size parametresini kullanabilirsiniz. Daha fazla bilgi için önceki bölümü okuyun.

Arama

Eğer bazı bilgiler arıyorsanız, tüm indekslerde ham bir arama yapmak için http://host:9200/_search?pretty=true&q=<search_term> adresine gidebilirsiniz, örneğin http://10.10.10.115:9200/_search?pretty=true&q=Rockwell

Eğer sadece bir indekste arama yapmak istiyorsanız, yolu belirterek bunu yapabilirsiniz: http://host:9200/<index>/_search?pretty=true&q=<search_term>

K içerik aramak için kullanılan q parametresinin düzenli ifadeleri desteklediğini unutmayın.

Ayrıca bir elasticsearch hizmetini fuzzlamak için https://github.com/misalabs/horuz gibi bir şey de kullanabilirsiniz.

Yazma İzinleri

Yeni bir indekste yeni bir belge oluşturmayı deneyerek yazma izinlerinizi kontrol edebilirsiniz; aşağıdaki gibi bir şey çalıştırarak:

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

O cmd, "bookId", "author", "publisher" ve "name" özelliklerine sahip books türünde bir belge ile bookindex adında yeni bir indeks oluşturacaktır.

Yeni indeksin şimdi listede göründüğüne dikkat edin:

Ve otomatik olarak oluşturulan özelliklere dikkat edin:

Otomatik Sayım

Bazı araçlar, daha önce sunulan verilerden bazılarını elde edecektir:

msf > use auxiliary/scanner/elasticsearch/indices_enum

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

Shodan

  • port:9200 elasticsearch

{% hint style="success" %} AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)

HackTricks'i Destekleyin
{% endhint %}