mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
172 lines
11 KiB
Markdown
172 lines
11 KiB
Markdown
# 9200 - Pentesting Elasticsearch
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## Temel bilgiler
|
||
|
||
Elasticsearch, **dağıtık**, **açık kaynak** bir arama ve analiz motorudur ve **her türlü veri** için tasarlanmıştır. **Hızı**, **ölçeklenebilirliği** ve **basit REST API'leri** ile bilinir. Apache Lucene üzerine inşa edilmiştir ve 2010 yılında Elasticsearch N.V. (şimdi Elastic olarak bilinir) tarafından ilk kez 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ı da içerir ve şimdi Beats adı verilen hafif veri taşıma ajanlarına sahiptir.
|
||
|
||
### Elasticsearch indeksi nedir?
|
||
|
||
Bir Elasticsearch **indeksi**, **JSON** olarak saklanan **ilişkili belgeler** 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 belgeleri 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/`
|
||
|
||
.png>)
|
||
|
||
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 herhangi bir kimlik bilgisi kullanmadan veritabanının içindeki her şeye erişebilirsiniz.
|
||
|
||
Kimlik doğrulamanın devre dışı olduğunu bir istekle doğrulayabilirsiniz:
|
||
```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**, eğer `/` 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 **geçerli kimlik bilgilerine** sahip olmanız gerektiği anlamına gelir, böylece elasticsearch'ten herhangi bir bilgi alabilirsiniz. Ardından, [**bunu brute force ile denemeyi**](../generic-hacking/brute-force.md#elasticsearch) deneyebilirsiniz (HTTP temel kimlik doğrulaması kullanır, bu nedenle BF HTTP temel kimlik doğrulaması ile kullanılabilecek her şey geçerlidir).\
|
||
İşte burada bir **varsayılan kullanıcı adı listesi** var: _**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 **changeme**'dir.
|
||
```
|
||
curl -X GET http://user:password@IP:9200/
|
||
```
|
||
### Temel Kullanıcı Sayımı
|
||
```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ı **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ındı**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) ve burada **daha fazla** bilgi 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 saklandığı hakkında bilgi almak için** `http://host:9200/<index>` adresine erişebilirsiniz, bu durumda örneğin `http://10.10.10.115:9200/bank`
|
||
|
||
.png>)
|
||
|
||
### İ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`
|
||
|
||
.png>)
|
||
|
||
_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 indeks içinde 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 şimdi bu indeksin **1000 belge içerdiğini bildiğinize göre**, **hepsini dökebilirsiniz** ve dökmek istediğiniz giriş sayısını **`size`** parametresinde belirtebilirsiniz: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
|
||
\&#xNAN;_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 gidip 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ı bilgileri 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`
|
||
|
||
.png>)
|
||
|
||
Eğer sadece bir indeks içinde **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](https://github.com/misalabs/horuz) gibi bir şey de kullanabilirsiniz.
|
||
|
||
### Yazma İzinleri
|
||
|
||
Yeni bir indeks içinde yeni bir belge oluşturmayı deneyerek yazma izinlerinizi kontrol edebilirsiniz, aşağıdaki gibi bir şey çalıştırarak:
|
||
```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"
|
||
}'
|
||
```
|
||
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 nasıl göründüğüne dikkat edin**:
|
||
|
||
.png>)
|
||
|
||
Ve **otomatik olarak oluşturulan özelliklere** dikkat edin:
|
||
|
||
.png>)
|
||
|
||
## Otomatik Sayım
|
||
|
||
Bazı araçlar, daha önce sunulan verilerin bir kısmını elde edecektir:
|
||
```bash
|
||
msf > use auxiliary/scanner/elasticsearch/indices_enum
|
||
```
|
||
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
|
||
|
||
## Shodan
|
||
|
||
- `port:9200 elasticsearch`
|
||
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|