mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 00:20:59 +00:00
281 lines
16 KiB
Markdown
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>
|