15 KiB
9200 - Elasticsearch Pentesting
AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklam vermek isterseniz veya HackTricks'i PDF olarak indirmek isterseniz ABONELİK PLANLARINI kontrol edin!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'ı takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.
Temel bilgiler
Elasticsearch, tüm veri türleri için dağıtık, açık kaynaklı bir arama ve analitik motorudur. Hızı, ölçeklenebilirliği ve basit REST API'leri ile tanınır. Apache Lucene üzerine inşa edilen Elasticsearch, 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 kaynaklı araçların bir koleksiyonu olan Elastic Stack'in temel bileşenidir. Bu yığın, genellikle ELK Stack olarak adlandırılır ve Logstash ve Kibana'yı da içerir ve şimdi Beats adı verilen hafif veri taşıma ajanlarına sahiptir.
Elasticsearch indeksi nedir?
Bir Elasticsearch indeksi, JSON olarak depolanan ilgili belgelerin bir koleksiyonudur. Her belge, anahtarları ve bunlara karşılık gelen değerleri (dizeler, sayılar, boole'lar, tarihler, diziler, coğrafi konumlar vb.) içerir.
Elasticsearch, hızlı tam metin aramalarını kolaylaştırmak için ters indeks adı verilen verimli bir veri yapısı 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ı arama yapılabilir. İndeks API'si, belirli bir indeks içinde JSON belgeleri eklemek veya güncellemek için kullanılır.
Varsayılan port: 9200/tcp
El ile 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şirken bu yanıtı görmüyorsanız, aşağıdaki bölüme bakın.
Kimlik Doğrulama
Varsayılan olarak Elasticsearch kimlik doğrulaması etkin değildir, bu nedenle varsayılan olarak herhangi bir kimlik bilgisi kullanmadan veritabanının içindeki her şeye erişebilirsiniz.
Kimlik doğrulamasının devre dışı olduğunu doğrulamak için aşağıdaki 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ğrulamanın yapılandırıldığı ve herhangi bir bilgi elde etmek için geçerli kimlik bilgilerine ihtiyaç duyduğu anlamına gelir. Ardından, brute force deneyebilirsiniz (HTTP temel kimlik doğrulama kullanır, bu nedenle HTTP temel kimlik doğrulamayı BF yapabilen herhangi bir şey kullanılabilir).
İşte varsayılan kullanıcı adları listesi: 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ı Saptama
Elasticsearch Kullanıcıları
Elasticsearch, kullanıcıların belirli izinlere sahip olabileceği bir kullanıcı tabanı yönetim sistemine sahiptir. Kullanıcılar, Elasticsearch API'sini kullanarak belirli eylemleri gerçekleştirebilirler. Bu nedenle, hedef Elasticsearch sunucusunda mevcut olan kullanıcıları saptamak önemlidir.
Kullanıcıları saptamak için aşağıdaki adımları izleyebilirsiniz:
-
_cat/users API'sini kullanarak kullanıcıları listeleme: Elasticsearch,
_cat/users
API'sini kullanarak mevcut kullanıcıları listeler. Bu API'yi kullanarak kullanıcı adlarını ve rollerini elde edebilirsiniz.curl -XGET 'http://<elasticsearch-ip>:9200/_cat/users?v'
-
Kullanıcı adı ve parola kombinasyonlarını deneme: Elasticsearch, kullanıcı adı ve parola kombinasyonlarını deneyerek doğru kimlik bilgilerini bulmanıza izin verir. Bu, zayıf parola kullanımını tespit etmek için kullanışlı bir yöntem olabilir.
Elasticsearch İndeksleri
Elasticsearch, verileri indeksler halinde saklar. Bu nedenle, hedef Elasticsearch sunucusunda mevcut olan indeksleri saptamak da önemlidir.
İndeksleri saptamak için aşağıdaki adımları izleyebilirsiniz:
-
_cat/indices API'sini kullanarak indeksleri listeleme: Elasticsearch,
_cat/indices
API'sini kullanarak mevcut indeksleri listeler. Bu API'yi kullanarak indeks adlarını ve diğer bilgileri elde edebilirsiniz.curl -XGET 'http://<elasticsearch-ip>:9200/_cat/indices?v'
-
İndeks adlarını inceleme: İndeks adları, hedef sistemdeki veriler hakkında ipuçları sağlayabilir. Örneğin, bir indeks adı "customer" ise, bu indeksin müşteri verilerini içerdiği anlamına gelebilir.
Bu temel kullanıcı saptama adımları, hedef Elasticsearch sunucusunda mevcut olan kullanıcıları ve indeksleri belirlemenize yardımcı olacaktır. Bu bilgiler, daha fazla saldırı vektörü belirlemek ve hedef sistemdeki zayıf noktaları keşfetmek için kullanılabilir.
#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ı bilgileri edinmek için GET ile erişebileceğiniz bazı uç noktalar aşağıda listelenmiştir:
_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ıtta örneğin desteklenen /_cat/*
uç noktaları bulunur.
/_security/user
(eğer yetkilendirme etkinse) üzerinden superuser
rolüne sahip kullanıcıyı görebilirsiniz.
İndeksler
Tüm indeksleri edinmek için http://10.10.10.115:9200/_cat/indices?v
adresine erişebilirsiniz.
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 dizinde hangi tür verilerin saklandığı 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
Dizin dökümü
Bir dizinin tüm içeriğini dökmek isterseniz, şu adrese erişebilirsiniz: http://host:9200/<index>/_search?pretty=true
, örneğin http://10.10.10.115:9200/bank/_search?pretty=true
Bank dizini içindeki her belgenin (girişin) içeriğini ve bu dizindeki alanları önceki bölümde gördüğümüzle 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. Bu alan, bu dizinde 1000 belgenin bulunduğunu ancak yalnızca 10'unun alındığını gösterir. Bu, varsayılan olarak 10 belirli bir sınırlama olduğu için.
Ancak, şimdi bu dizinin 1000 belge içerdiğini bildiğinize göre, hepsini dökebilirsiniz. size
parametresinde dökülecek giriş sayısını belirterek: 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
belirtebilirsiniz ve daha fazla giriş varsa garip olur (ancak kontrol etmelisiniz).
Tümünü dök
Tümünü dökmek için, öncekiyle aynı yolu izleyebilirsiniz, ancak herhangi bir dizin belirtmeden http://host:9200/_search?pretty=true
adresine gidebilirsiniz, örneğin 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 dizinlerde raw bir arama yapabilirsiniz. http://host:9200/_search?pretty=true&q=<arama_terimi>
şeklinde http://10.10.10.115:9200/_search?pretty=true&q=Rockwell
gibi
Sadece bir dizinde arama yapmak isterseniz, yolu belirtmeniz yeterlidir: http://host:9200/<index>/_search?pretty=true&q=<arama_terimi>
Arama içeriği aramak için kullanılan q parametresinin düzenli ifadeleri desteklediğini unutun
Ayrıca, bir Elasticsearch hizmetini fuzz etmek için https://github.com/misalabs/horuz gibi bir şey kullanabilirsiniz.
Yazma izinleri
Yazma izinlerinizi kontrol etmek için aşağıdaki gibi yeni bir belgeyi yeni bir dizine oluşturmayı deneyerek kontrol edebilirsiniz:
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 bir books
türünde bir belgeye sahip olan bookindex
adında bir yeni indeks oluşturur.
Dikkat edin, yeni indeks şimdi listede görünüyor:
Ve otomatik olarak oluşturulan özelliklere dikkat edin:
Otomatik Numaralandırma
Bazı araçlar, önceden sunulan verilerin bir kısmını elde eder:
msf > use auxiliary/scanner/elasticsearch/indices_enum
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
Shodan
port:9200 elasticsearch
htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARIna göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- Özel NFT'lerden oluşan koleksiyonumuz The PEASS Family'i keşfedin
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github reposuna PR göndererek paylaşın.