# 9200 - Pentesting Elasticsearch
Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van 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 haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
## Basiese inligting
Elasticsearch is 'n **verspreide**, **oorspronklike** soek- en analise-enjin vir **alle tipes data**. Dit staan bekend vir sy **spoed**, **skaalbaarheid**, en **eenvoudige REST API's**. Gebou op Apache Lucene, dit is eerste vrygestel in 2010 deur Elasticsearch N.V. (nou bekend as Elastic). Elasticsearch is die kernkomponent van die Elastic Stack, 'n versameling van oopbronhulpmiddels vir data-ingestie, verryking, berging, analise, en visualisering. Hierdie stapel, algemeen bekend as die ELK-stapel, sluit ook Logstash en Kibana in, en het nou ligte data-vervoer-agente genaamd Beats.
### Wat is 'n Elasticsearch-indeks?
'n Elasticsearch **indeks** is 'n versameling van **verwante dokumente** wat gestoor word as **JSON**. Elke dokument bestaan uit **kodes** en hul ooreenstemmende **waardes** (strings, getalle, booleans, datums, reekse, geolokasies, ens.).
Elasticsearch gebruik 'n effektiewe datastruktuur genaamd 'n **omgekeerde indeks** om vinnige volledige teks-soektogte te fasiliteer. Hierdie indeks lys elke unieke woord in die dokumente en identifiseer die dokumente waarin elke woord verskyn.
Tydens die indekseringsproses stoor Elasticsearch die dokumente en konstrueer die omgekeerde indeks, wat naby aan regstreekse soektogte moontlik maak. Die **indeks-API** word gebruik om JSON-dokumente by 'n spesifieke indeks by te voeg of op te dateer.
**Verstekpoort**: 9200/tcp
## Handmatige Opsomming
### Banier
Die protokol wat gebruik word om toegang tot Elasticsearch te verkry is **HTTP**. Wanneer jy dit via HTTP toegang, sal jy interessante inligting vind: `http://10.10.10.115:9200/`
![](<../.gitbook/assets/image (294).png>)
As jy nie daardie reaksie sien wanneer jy `/` toegang 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 uitgeskakel 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 stuur na `/` en 'n antwoord 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 kragtig**](../generic-methodologies-and-resources/brute-force.md#elasticsearch) (dit gebruik HTTP basiese outentifisering, so enigiets wat BF HTTP basiese outentifisering kan gebruik word).\
Hier het jy '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 Opsomming
```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/"
```
### Elastiese Inligting
Hier is 'n paar eindpunte wat jy kan **toegang kry via GET** 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 [**geneem uit die dokumentasie**](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 bevat wat deur die instansie ondersteun word.
In `/_security/user` (indien outentifikasie geaktiveer is) kan jy sien watter gebruiker die rol `superuser` het.
### Indekse
Jy kan **alle indekse versamel** deur toegang te verkry tot `http://10.10.10.115:9200/_cat/indices?v`
```
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 watter soort data binne 'n indeks gestoor word** te verkry, kan jy toegang kry tot: `http://host:9200/` byvoorbeeld in hierdie geval `http://10.10.10.115:9200/bank`
![](<../.gitbook/assets/image (342).png>)
### Stort indeks
As jy alle inhoud van 'n indeks wil **stort**, kan jy toegang kry tot: `http://host:9200//_search?pretty=true` soos `http://10.10.10.115:9200/bank/_search?pretty=true`
![](<../.gitbook/assets/image (914).png>)
*Neem 'n oomblik om die inhoud van elke dokument (inskrywing) binne die bank indeks en die velde van hierdie indeks wat ons in die vorige afdeling gesien het, te vergelyk.*
Op hierdie punt mag jy opmerk dat **daar 'n veld genaamd "total" binne "hits"** is wat aandui dat **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 **hulle almal stort** deur die aantal inskrywings wat jy wil stort in die **`size`** parameter aan te dui: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
_Noot: 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 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 sekere inligting kan jy 'n **rofweg soek op alle indekse** doen deur te gaan na `http://host:9200/_search?pretty=true&q=` soos in `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
![](<../.gitbook/assets/image (335).png>)
As jy net wil **soek in 'n indeks** kan jy dit net **spesifiseer** op die **pad**: `http://host:9200//_search?pretty=true&q=`
*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"
}'
```
Die cmd sal 'n **nuwe indeks** genaamd `bookindex` skep met 'n dokument van 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 (130).png>)
En let op die **outomaties geskepte eienskappe**:
![](<../.gitbook/assets/image (434).png>)
## Outomatiese Opsomming
Sommige gereedskap sal van die data verkry wat voorheen aangebied is:
```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum
```
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
## Shodan
* `port:9200 elasticsearch`
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](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 haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslaan.