mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
224 lines
15 KiB
Markdown
224 lines
15 KiB
Markdown
# 9200 - Elasticsearch Pentesting
|
||
|
||
<details>
|
||
|
||
<summary><strong>AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
|
||
|
||
HackTricks'ı desteklemenin diğer yolları:
|
||
|
||
* **Şirketinizi HackTricks'te reklam vermek isterseniz** veya **HackTricks'i PDF olarak indirmek isterseniz** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'ı takip edin**.
|
||
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
|
||
|
||
</details>
|
||
|
||
## 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/`
|
||
|
||
![](<../.gitbook/assets/image (264).png>)
|
||
|
||
`/`'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:
|
||
```bash
|
||
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:
|
||
```bash
|
||
{"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**](../generic-methodologies-and-resources/brute-force.md#elasticsearch) 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:
|
||
|
||
1. **_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.
|
||
|
||
```bash
|
||
curl -XGET 'http://<elasticsearch-ip>:9200/_cat/users?v'
|
||
```
|
||
|
||
2. **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:
|
||
|
||
1. **_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.
|
||
|
||
```bash
|
||
curl -XGET 'http://<elasticsearch-ip>:9200/_cat/indices?v'
|
||
```
|
||
|
||
2. **İ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.
|
||
```bash
|
||
#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**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) 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`
|
||
|
||
![](<../.gitbook/assets/image (265).png>)
|
||
|
||
### 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`
|
||
|
||
![](<../.gitbook/assets/image (266).png>)
|
||
|
||
_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
|
||
|
||
![](<../.gitbook/assets/image (267).png>)
|
||
|
||
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](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:
|
||
```bash
|
||
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**:
|
||
|
||
![](<../.gitbook/assets/image (268).png>)
|
||
|
||
Ve **otomatik olarak oluşturulan özelliklere** dikkat edin:
|
||
|
||
![](<../.gitbook/assets/image (269).png>)
|
||
|
||
## Otomatik Numaralandırma
|
||
|
||
Bazı araçlar, önceden sunulan verilerin bir kısmını elde eder:
|
||
```bash
|
||
msf > use auxiliary/scanner/elasticsearch/indices_enum
|
||
```
|
||
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
|
||
|
||
## Shodan
|
||
|
||
* `port:9200 elasticsearch`
|
||
|
||
<details>
|
||
|
||
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> ile sıfırdan kahraman olmak için AWS hackleme öğrenin<strong>!</strong></summary>
|
||
|
||
HackTricks'i desteklemenin diğer yolları:
|
||
|
||
* Şirketinizi HackTricks'te **reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)na göz atın!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
|
||
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna **PR göndererek** paylaşın.
|
||
|
||
</details>
|