hacktricks/network-services-pentesting/9200-pentesting-elasticsearch.md
2024-02-11 02:07:06 +00:00

281 lines
16 KiB
Markdown

# 9200 - Pentesting Elasticsearch
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
</details>
## Basiese inligting
Elasticsearch is 'n **verspreide**, **open source** soek- en analitiese enjin vir **alle tipes data**. Dit is bekend vir sy **spoed**, **skaalbaarheid**, en **eenvoudige REST API's**. Gebou op Apache Lucene, is dit in 2010 vrygestel deur Elasticsearch N.V. (nou bekend as Elastic). Elasticsearch is die kernkomponent van die Elastic Stack, 'n versameling van open source-hulpmiddels vir data-inname, verryking, berging, analise en visualisering. Hierdie stapel, algemeen bekend as die ELK-stapel, sluit ook Logstash en Kibana in, en het nou ligte data-vervoeragente genaamd Beats.
### Wat is 'n Elasticsearch-indeks?
'n Elasticsearch **indeks** is 'n versameling van **verwante dokumente** wat as **JSON** gestoor word. Elke dokument bestaan uit **sleutels** en hul ooreenstemmende **waardes** (strings, getalle, booleans, datums, reekse, geolokasies, ens.).
Elasticsearch gebruik 'n doeltreffende datastruktuur genaamd 'n **omgekeerde indeks** om vinnige volledige tekssoektogte te fasiliteer. Hierdie indeks lys elke unieke woord in die dokumente en identifiseer die dokumente waarin elke woord voorkom.
Tydens die indekseringsproses stoor Elasticsearch die dokumente en bou die omgekeerde indeks op, wat soek in nagenoeg regte tyd moontlik maak. Die **indeks-API** word gebruik om JSON-dokumente by 'n spesifieke indeks toe te voeg of op te dateer.
**Verstekpoort**: 9200/tcp
## Handmatige opname
### Banier
Die protokol wat gebruik word om toegang tot Elasticsearch te verkry, is **HTTP**. Wanneer jy dit via HTTP toegang gee, sal jy interessante inligting vind: `http://10.10.10.115:9200/`
![](<../.gitbook/assets/image (264).png>)
As jy nie daardie reaksie sien wanneer jy `/` toegang gee nie, sien die volgende afdeling.
### Verifikasie
**Standaard het Elasticsearch nie verifikasie geaktiveer nie**, so standaard kan jy alles binne die databasis toegang sonder om enige geloofsbriewe te gebruik.
Jy kan verifieer dat verifikasie gedeaktiveer is met 'n versoek na:
```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}
```
**Egter**, as jy 'n versoek na `/` stuur en 'n reaksie ontvang soos die volgende een:
```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}
```
Dit beteken dat verifikasie ingestel is en **jy geldige geloofsbriewe nodig het** om enige inligting van elasticserach te verkry. Dan kan jy [**probeer om dit te bruteforce**](../generic-methodologies-and-resources/brute-force.md#elasticsearch) (dit gebruik HTTP basiese verifikasie, so enige iets wat BF HTTP basiese verifikasie kan gebruik word).\
Hier is 'n **lys van verstek gebruikersname**: _**elastic** (supergebruiker), remote\_monitoring\_user, beats\_system, logstash\_system, kibana, kibana\_system, apm\_system,_ \_anonymous\_.\_ Ouer weergawes van Elasticsearch het die verstek wagwoord **changeme** vir hierdie gebruiker.
```
curl -X GET http://user:password@IP:9200/
```
### Basiese Gebruiker Opsporing
Die eerste stap in die pentesting-proses van Elasticsearch is om gebruikersinligting te versamel. Hier is 'n paar basiese metodes om gebruikers te ondersoek:
#### 1. Soek na openbare Elasticsearch-instanties
Jy kan soek na openbare Elasticsearch-instanties deur die volgende soekopdrag in te voer:
```
GET /_cat/indices?v
```
Hierdie soekopdrag sal 'n lys van alle indekse in die Elasticsearch-instantie gee. Dit kan nuttige inligting verskaf oor die bestaande gebruikers en indekse.
#### 2. Gebruik die `_cat` API
Die `_cat` API bied 'n eenvoudige manier om inligting oor gebruikers te bekom. Jy kan die volgende soekopdrag gebruik om 'n lys van alle gebruikers in die Elasticsearch-instantie te kry:
```
GET /_cat/users?v
```
Hierdie soekopdrag sal 'n tabel met gebruikersinligting toon, insluitend die gebruikersnaam en die rolle wat aan elke gebruiker toegewys is.
#### 3. Ondersoek die `/_security/user` endpoint
Die `/_security/user` endpoint bied 'n volledige lys van alle gebruikers in die Elasticsearch-instantie. Jy kan die volgende soekopdrag gebruik om die gebruikersinligting te kry:
```
GET /_security/user
```
Hierdie soekopdrag sal 'n JSON-respons gee wat die gebruikersinligting bevat, insluitend die gebruikersnaam, die rolle wat aan elke gebruiker toegewys is, en of die gebruiker 'n wachtwoord het.
#### 4. Skandeer vir gelekte gebruikersinligting
Jy kan ook skandeer vir gelekte gebruikersinligting deur die gelekte databasisse en dokumente te deursoek. Dit kan nuttige inligting verskaf oor die bestaande gebruikers en hul wagwoorde.
### Gevorderde Gebruiker Opsporing
As jy meer gevorderde gebruikersinligting wil bekom, kan jy die volgende metodes gebruik:
#### 1. Gebruik die `/_search` endpoint
Die `/_search` endpoint bied 'n kragtige soekfunksie wat gebruik kan word om spesifieke gebruikersinligting te vind. Jy kan die volgende soekopdrag gebruik om te soek na spesifieke gebruikers:
```
POST /_search
{
"query": {
"match": {
"field": "value"
}
}
}
```
Vervang `"field"` met die veldnaam waarin jy wil soek, en `"value"` met die waarde waarna jy wil soek.
#### 2. Gebruik die `/_msearch` endpoint
Die `/_msearch` endpoint bied die vermoë om meervoudige soekopdragte in een aanvraag uit te voer. Jy kan die volgende soekopdrag gebruik om verskillende soekopdragte in een aanvraag te stuur:
```
POST /_msearch
{}
{"index": "index_name"}
{"query": {"match_all": {}}}
{}
{"index": "index_name"}
{"query": {"match_all": {}}}
```
Vervang `"index_name"` met die naam van die indeks waarin jy wil soek.
#### 3. Gebruik die `/_cat/indices` API
Die `/_cat/indices` API kan gebruik word om inligting oor die indekse in die Elasticsearch-instantie te bekom. Jy kan die volgende soekopdrag gebruik om die indeksinligting te kry:
```
GET /_cat/indices?v
```
Hierdie soekopdrag sal 'n tabel met indeksinligting toon, insluitend die indeksnaam en die aantal dokumente in elke indeks.
#### 4. Skandeer vir gelekte wagwoorde
Jy kan ook skandeer vir gelekte wagwoorde deur die gelekte wagwoorddatabasisse en dokumente te deursoek. Dit kan nuttige inligting verskaf oor die wagwoorde wat deur gebruikers gebruik word.
```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>"
```
### Elastiese Inligting
Hier is 'n paar eindpunte wat jy **via GET kan toegang** om **inligting** oor elasticsearch te **verkry**:
| \_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 | | |
Hierdie eindpunte is [**uit die dokumentasie geneem**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) waar jy **meer kan vind**.\
Ook, as jy `/_cat` toegang, sal die respons die `/_cat/*` eindpunte wat deur die instansie ondersteun word, bevat.
In `/_security/user` (as verifikasie geaktiveer is) kan jy sien watter gebruiker die rol `superuser` het.
### Indekse
Jy kan **alle indekse versamel** deur `http://10.10.10.115:9200/_cat/indices?v` te besoek.
```
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
```
Om **inligting oor die soort data wat binne 'n indeks gestoor word** te verkry, kan jy toegang verkry tot: `http://host:9200/<indeks>` byvoorbeeld in hierdie geval `http://10.10.10.115:9200/bank`
![](<../.gitbook/assets/image (265).png>)
### Stort indeks
As jy al die inhoud van 'n indeks wil **stort**, kan jy toegang verkry tot: `http://host:9200/<indeks>/_search?pretty=true` soos `http://10.10.10.115:9200/bank/_search?pretty=true`
![](<../.gitbook/assets/image (266).png>)
*Neem 'n oomblik om die inhoud van elke dokument (inskrywing) binne die bankindeks en die velde van hierdie indeks wat ons in die vorige afdeling gesien het, te vergelyk.*
So, op hierdie punt mag jy opmerk dat daar 'n veld genaamd "total" binne "hits" is wat aandui dat daar **1000 dokumente gevind is** binne hierdie indeks, maar slegs 10 is opgehaal. Dit is omdat daar **standaard 'n limiet van 10 dokumente** is.\
Maar, nou dat jy weet dat **hierdie indeks 1000 dokumente bevat**, kan jy **almal stort** deur die aantal inskrywings aan te dui wat jy wil stort in die **`size`** parameter: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
*Nota: As jy 'n groter getal aandui, sal al die inskrywings hoe dan ook gestort word. Byvoorbeeld, jy kan `size=9999` aandui en dit sal vreemd wees as daar meer inskrywings was (maar jy moet dit nagaan).*
### Stort alles
Om alles te stort, kan jy net na dieselfde pad gaan as voorheen, maar sonder om enige indeks aan te dui: `http://host:9200/_search?pretty=true` soos `http://10.10.10.115:9200/_search?pretty=true`\
Onthou dat in hierdie geval die **standaard limiet van 10** resultate toegepas sal word. Jy kan die `size` parameter gebruik om 'n **groter hoeveelheid resultate** te stort. Lees die vorige afdeling vir meer inligting.
### Soek
As jy op soek is na inligting, kan jy 'n **rofweg soek op alle indekse** doen deur na `http://host:9200/_search?pretty=true&q=<soek_term>` te gaan, soos in `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
![](<../.gitbook/assets/image (267).png>)
As jy net op 'n indeks wil **soek**, kan jy dit net **spesifiseer** in die **pad**: `http://host:9200/<indeks>/_search?pretty=true&q=<soek_term>`
*Let daarop dat die q-parameter wat gebruik word om inhoud te soek **gewone uitdrukkings ondersteun**.*
Jy kan ook iets soos [https://github.com/misalabs/horuz](https://github.com/misalabs/horuz) gebruik om 'n elasticsearch-diens te fuzz.
### Skryfregte
Jy kan jou skryfregte nagaan deur te probeer om 'n nuwe dokument binne 'n nuwe indeks te skep deur iets soos die volgende uit te voer:
```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"
}'
```
Daardie opdrag sal 'n **nuwe indeks** genaamd `bookindex` skep met 'n dokument van die tipe `books` wat die eienskappe "_bookId_", "_author_", "_publisher_" en "_name_" het.
Let op hoe die **nuwe indeks nou in die lys verskyn**:
![](<../.gitbook/assets/image (268).png>)
En let op die **outomaties geskepte eienskappe**:
![](<../.gitbook/assets/image (269).png>)
## Outomatiese Opsomming
Sommige gereedskap sal van sommige van die vooraf aangebiede data verkry:
```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum
```
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
## Shodan
* `port:9200 elasticsearch`
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
</details>