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

14 KiB
Raw Blame History

9200 - Elasticsearch Pentesting

AWS hacklemeyi sıfırdan kahraman olmaya öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Temel bilgiler

Elasticsearch, tüm veri türleri için dağıtık, ık kaynaklı bir arama ve analiz motorudur. Hızı, ölçeklenebilirliği ve basit REST API'leri ile bilinir. Apache Lucene üzerine inşa edilen Elasticsearch, ilk kez 2010 yılında Elasticsearch N.V. (şimdi Elastic olarak bilinir) tarafından piyasaya sürüldü. Elasticsearch, veri alımı, zenginleştirme, depolama, analiz ve görselleştirme için açık kaynak araçlar koleksiyonu olan Elastic Stack'in temel bileşenidir. Bu yığın genellikle ELK Yığını olarak adlandırılır ve Logstash ve Kibana'yı da içerir; şimdi ise hafif veri taşıma ajanları olan Beats de bulunmaktadır.

Elasticsearch indeksi nedir?

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

Elasticsearch, hızlı tam metin aramaları kolaylaştırmak için verimli bir veri yapısı olan ters indeks kullanır. Bu indeks, belgelerdeki her benzersiz kelimeyi listeler ve her kelimenin hangi belgelerde göründüğünü belirler.

İndeksleme süreci sırasında Elasticsearch, belgeleri depolar ve ters indeksi oluşturur, böylece neredeyse gerçek zamanlı aramalar yapılabilir. İndeks API'si, belirli bir indeks içinde JSON belgeleri eklemek veya güncellemek için kullanılır.

Varsayılan bağlantı noktası: 9200/tcp

Manuel Numaralandırma

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/

/'ye erişerek 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 herhangi bir kimlik bilgisi kullanmadan veritabanındaki her şeye erişebilirsiniz.

Kimlik doğrulamanın devre dışı bırakıldığını doğrulamak için şu isteği yapabilirsiniz:

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, / 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ğrulamasının yapılandırıldığı ve elasticserach'ten herhangi bir bilgi almak için geçerli kimlik bilgilerine ihtiyaç duyulduğu anlamına gelir. Daha sonra bruteforce deneyebilirsiniz (HTTP basic auth kullanır, bu yüzden HTTP basic auth'i BF etmek için herhangi bir şey kullanılabilir).
İşte bir liste varsayılan kullanıcı adları: elastic (süper kullanıcı), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_._ Eski Elasticsearch sürümlerinde bu kullanıcı için varsayılan şifre changeme'dir.

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

Temel Kullanıcı Numaralandırma

#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

İşte Elasticsearch hakkında bazı bilgileri 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 belgelerden alınmıştır ve daha fazlasını bulabilirsiniz.
Ayrıca, /_cat'e erişirseniz yanıt, örneğin desteklenen /_cat/* uç noktalarını içerecektir.

/_security/user'da (kimlik doğrulama etkinse) superuser rolüne sahip olan kullanıcıyı görebilirsiniz.

İndeksler

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

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

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

İndeksi Dök

Bir indeksin tüm içeriğini dökmek istiyorsanız şu adrese erişebilirsiniz: http://host:9200/<index>/_search?pretty=true gibi http://10.10.10.115:9200/bank/_search?pretty=true

Bank indeksi içindeki her belgenin (girişin) içeriğini ve bu indeksin önceki bölümde gördüğümüz alanlarını karşılaştırmak için biraz zaman ayırın.

Bu noktada "hits" içinde "total" adında bir alan olduğunu fark edebilirsiniz ve bu indeks içinde 1000 belgenin bulunduğunu ancak yalnızca 10'unun alındığını gösterir. Bu, varsayılan olarak 10 belge sınırı olduğu için gerçekleşir.
Ancak, şimdi bu indeksin 1000 belge içerdiğini bildiğinize göre, tümünü dökebilirsiniz ve dökmek istediğiniz giriş sayısını belirterek size parametresinde: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
Not: Daha büyük bir sayı belirtirseniz tüm girişler yine dökülecektir, örneğin size=9999 belirtebilir ve daha fazla giriş olması garip olurdu (ancak kontrol etmelisiniz).

Tümünü Dök

Tümünü dökmek için sadece önceki indeksi belirtmeden aynı yola gidebilirsiniz http://host:9200/_search?pretty=true gibi http://10.10.10.115:9200/_search?pretty=true
Unutmayın ki bu durumda varsayılan 10 sonuç sınırı uygulanacaktır. Daha fazla sonuç dökmek için size parametresini kullanabilirsiniz. Daha fazla bilgi için önceki bölümü okuyun.

Arama

Bir bilgi arıyorsanız tüm indekslerde doğrudan arama yapabilirsiniz http://host:9200/_search?pretty=true&q=<arama_terimi> gibi http://10.10.10.115:9200/_search?pretty=true&q=Rockwell

Sadece bir indekste arama yapmak istiyorsanız yolu belirtmeniz yeterlidir: http://host:9200/<index>/_search?pretty=true&q=<arama_terimi>

Arama içeriğini aramak için kullanılan q parametresinin düzenli ifadeleri desteklediğini unutmayın

Ayrıca, bir Elasticsearch hizmetini fuzz etmek için https://github.com/misalabs/horuz gibi bir şey kullanabilirsiniz.

Yazma İzinleri

Yazma izinlerinizi kontrol edebilir ve yeni bir belge oluşturmayı deneyerek yeni bir indeks içinde çalıştırabilirsiniz:

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

Bu komut, "bookId", "author", "publisher" ve "name" özniteliklerine sahip books türünde bir belgeye sahip bookindex adında yeni bir dizin oluşturacaktır.

Yeni dizinin şimdi listede nasıl göründüğüne dikkat edin:

Ve otomatik olarak oluşturulan özelliklere dikkat edin:

Otomatik Numaralandırma

Bazı araçlar, önceden sunulan verilerin 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
AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları: