hacktricks/network-services-pentesting/9200-pentesting-elasticsearch.md
Translator workflow 35c6b081d2 Translated to Greek
2024-02-10 22:40:18 +00:00

200 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 9200 - Ελέγχος ασφάλειας Elasticsearch
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
## Βασικές πληροφορίες
Το Elasticsearch είναι ένα **κατανεμημένο**, **ανοιχτού κώδικα** σύστημα αναζήτησης και αναλυτικής μηχανής για **όλους τους τύπους δεδομένων**. Είναι γνωστό για την **ταχύτητά του**, **κλιμακωσιμότητα** και **απλές REST API**. Χτισμένο πάνω στο Apache Lucene, κυκλοφόρησε για πρώτη φορά το 2010 από την Elasticsearch N.V. (πλέον γνωστή ως Elastic). Το Elasticsearch είναι η κύρια συνιστώσα του Elastic Stack, μια συλλογή από εργαλεία ανοιχτού κώδικα για την εισαγωγή, εμπλουτισμό, αποθήκευση, ανάλυση και οπτικοποίηση δεδομένων. Αυτή η συλλογή, γνωστή και ως ELK Stack, περιλαμβάνει επίσης τα Logstash και Kibana, και τώρα διαθέτει ελαφριά πράκτορες αποστολής δεδομένων που ονομάζονται Beats.
### Τι είναι ένα ευρετήριο Elasticsearch;
Ένα **ευρετήριο Elasticsearch** είναι μια συλλογή **σχετικών εγγράφων** που αποθηκεύονται ως **JSON**. Κάθε έγγραφο αποτελείται από **κλειδιά** και τις αντίστοιχες **τιμές** τους (συμβολοσειρές, αριθμοί, λογικές τιμές, ημερομηνίες, πίνακες, γεωτοποθεσίες κ.λπ.).
Το Elasticsearch χρησιμοποιεί μια αποδοτική δομή δεδομένων που ονομάζεται **αντίστροφο ευρετήριο** για να διευκολύνει γρήγορες αναζητήσεις κειμένου. Αυτό το ευρετήριο καταλογογραφεί κάθε μοναδική λέξη στα έγγραφα και εντοπίζει τα έγγραφα στα οποία εμφανίζεται κάθε λέξη.
Κατά τη διάρκεια της διαδικασίας ευρετηρίασης, το Elasticsearch αποθηκεύει τα έγγραφα και κατασκευάζει το αντίστροφο ευρετήριο, επιτρέποντας την αναζήτηση σε πραγματικό χρόνο. Το **API ευρετηρίου** χρησιμοποιείται για την προσθήκη ή ενημέρωση εγγράφων JSON σε ένα συγκεκριμένο ευρετήριο.
**Προεπιλεγμένη θύρα**: 9200/tcp
## Χειροκίνητη απαρίθμηση
### Μπάνερ
Το πρωτόκολλο που χρησιμοποιείται για την πρόσβαση στο Elasticsearch είναι το **HTTP**. Όταν έχετε πρόσβαση μέσω HTTP θα βρείτε ορισμένες ενδιαφέρουσες πληροφορίες: `http://10.10.10.115:9200/`
![](<../.gitbook/assets/image (264).png>)
Εάν δεν βλέπετε αυτήν την απόκριση προσπελαύνοντας το `/`, δείτε την ακόλουθη ενότητα.
### Ταυτοποίηση
**Από προεπιλογή το Elasticsearch δεν έχει ενεργοποιημένη την ταυτοποίηση**, οπότε από προεπιλογή μπορείτε να έχετε πρόσβαση σε όλα τα περιεχόμενα της βάσης δεδομένων χωρίς να χρειάζεται να χρησιμοποιήσετε διαπιστευτήρια.
Μπορείτε να επαληθεύσετε ότι η ταυτοποίηση είναι απενεργοποιημένη με ένα αίτημα προς:
```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}
```
**Ωστόσο**, αν στείλετε ένα αίτημα στο `/` και λάβετε μια απάντηση όπως η παρακάτω:
```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}
```
Αυτό σημαίνει ότι η πιστοποίηση έχει ρυθμιστεί και **χρειάζεστε έγκυρα διαπιστευτήρια** για να λάβετε οποιαδήποτε πληροφορία από το Elasticsearch. Στη συνέχεια, μπορείτε να [**προσπαθήσετε να κάνετε brute force**](../generic-methodologies-and-resources/brute-force.md#elasticsearch) (χρησιμοποιεί HTTP βασική πιστοποίηση, οπότε μπορεί να χρησιμοποιηθεί οτιδήποτε κάνει brute force σε HTTP βασική πιστοποίηση).\
Εδώ έχετε μια **λίστα προεπιλεγμένων ονοματεπων χρηστών**: _**elastic** (υπερχρήστης), remote\_monitoring\_user, beats\_system, logstash\_system, kibana, kibana\_system, apm\_system,_ \_anonymous\_.\_ Οι παλαιότερες εκδόσεις του Elasticsearch έχουν το προεπιλεγμένο κωδικό πρόσβασης **changeme** για αυτόν τον χρήστη.
```
curl -X GET http://user:password@IP:9200/
```
### Βασική Απαρίθμηση Χρηστών
Η βασική απαρίθμηση χρηστών είναι μια τεχνική που χρησιμοποιείται για να ανακτήσει πληροφορίες σχετικά με τους χρήστες που υπάρχουν σε ένα σύστημα Elasticsearch. Αυτή η τεχνική μπορεί να βοηθήσει έναν εισβολέα να ανακαλύψει πιθανά ονόματα χρηστών και να προσπαθήσει να εκμεταλλευτεί τυχόν αδυναμίες στην αυθεντικοποίηση.
Για να πραγματοποιηθεί η απαρίθμηση, μπορούν να χρησιμοποιηθούν διάφορες μέθοδοι, όπως η ανάκτηση των δημόσιων δεδομένων του Elasticsearch, η ανάλυση των αρχείων καταγραφής ή η χρήση εργαλείων απαρίθμησης χρηστών.
Είναι σημαντικό να σημειωθεί ότι η απαρίθμηση χρηστών μπορεί να θεωρηθεί ως επίθεση σε ένα σύστημα, και επομένως πρέπει να γίνεται με προσοχή και με την άδεια του νόμιμου κατόχου του συστήματος.
```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
Εδώ υπάρχουν μερικά σημεία πρόσβασης που μπορείτε να **έχετε πρόσβαση μέσω GET** για να **αποκτήσετε** πληροφορίες για το elasticsearch:
| \_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 | | |
Αυτά τα σημεία πρόσβασης προήλθαν από την [**τεκμηρίωση**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) όπου μπορείτε να **βρείτε περισσότερα**.\
Επίσης, αν έχετε πρόσβαση στο `/_cat`, η απόκριση θα περιέχει τα σημεία πρόσβασης `/_cat/*` που υποστηρίζονται από την περίπτωση.
Στο `/_security/user` (εάν είναι ενεργοποιημένη η πιστοποίηση) μπορείτε να δείτε ποιος χρήστης έχει τον ρόλο `superuser`.
### Δείκτες
Μπορείτε να **συγκεντρώσετε όλους τους δείκτες** με την πρόσβαση στο `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
```
Για να λάβετε πληροφορίες σχετικά με τον τύπο των δεδομένων που αποθηκεύονται σε ένα ευρετήριο, μπορείτε να έχετε πρόσβαση στη διεύθυνση: `http://host:9200/<index>` για παράδειγμα σε αυτήν την περίπτωση `http://10.10.10.115:9200/bank`
![](<../.gitbook/assets/image (265).png>)
### Αντιγραφή ευρετηρίου
Εάν θέλετε να αντιγράψετε **όλο το περιεχόμενο** ενός ευρετηρίου, μπορείτε να έχετε πρόσβαση στη διεύθυνση: `http://host:9200/<index>/_search?pretty=true` όπως `http://10.10.10.115:9200/bank/_search?pretty=true`
![](<../.gitbook/assets/image (266).png>)
_Πάρτε λίγο χρόνο για να συγκρίνετε το περιεχόμενο κάθε εγγραφής (καταχώρησης) μέσα στο ευρετήριο της τράπεζας και τα πεδία αυτού του ευρετηρίου που είδαμε στην προηγούμενη ενότητα._
Έτσι, σε αυτό το σημείο μπορείτε να παρατηρήσετε ότι υπάρχει ένα πεδίο με το όνομα "total" μέσα στο "hits" που υποδηλώνει ότι βρέθηκαν **1000 έγγραφα** μέσα σε αυτό το ευρετήριο, αλλά μόνο 10 ανακτήθηκαν. Αυτό συμβαίνει επειδή **από προεπιλογή υπάρχει ένα όριο των 10 εγγράφων**.\
Ωστόσο, τώρα που γνωρίζετε ότι **αυτό το ευρετήριο περιέχει 1000 έγγραφα**, μπορείτε να αντιγράψετε όλα αυτά δηλώνοντας τον αριθμό των καταχωρήσεων που θέλετε να αντιγράψετε στην παράμετρο **`size`**: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
_Σημείωση: Εάν δηλώσετε μεγαλύτερο αριθμό, όλες οι καταχωρήσεις θα αντιγραφούν ούτως ή άλλως, για παράδειγμα μπορείτε να δηλώσετε `size=9999` και θα είναι περίεργο αν υπήρχαν περισσότερες καταχωρήσεις (αλλά θα πρέπει να ελέγξετε)._
### Αντιγραφή όλων
Για να αντιγράψετε όλα, απλά πηγαίνετε στην **ίδια διαδρομή όπως πριν αλλά χωρίς να δηλώσετε κάποιο ευρετήριο** `http://host:9200/_search?pretty=true` όπως `http://10.10.10.115:9200/_search?pretty=true`\
Να θυμάστε ότι σε αυτήν την περίπτωση θα εφαρμοστεί το **προεπιλεγμένο όριο των 10** αποτελεσμάτων. Μπορείτε να χρησιμοποιήσετε την παράμετρο `size` για να αντιγράψετε ένα **μεγαλύτερο πλήθος αποτελεσμάτων**. Διαβάστε την προηγούμενη ενότητα για περισσότερες πληροφορίες.
### Αναζήτηση
Εάν ψάχνετε για κάποιες πληροφορίες, μπορείτε να κάνετε μια **αναζήτηση σε όλα τα ευρετήρια** πηγαίνοντας στη διεύθυνση `http://host:9200/_search?pretty=true&q=<search_term>` όπως στο `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
![](<../.gitbook/assets/image (267).png>)
Εάν θέλετε απλά να **αναζητήσετε σε ένα ευρετήριο**, μπορείτε απλά να το **καθορίσετε** στη **διαδρομή**: `http://host:9200/<index>/_search?pretty=true&q=<search_term>`
_Σημειώστε ότι η παράμετρος q που χρησιμοποιείται για την αναζήτηση περιεχομένου **υποστηρίζει κανονικές εκφράσεις**_
Μπορείτε επίσης να χρησιμοποιήσετε κάτι όπως [https://github.com/misalabs/horuz](https://github.com/misalabs/horuz) για να εκτελέσετε fuzz σε ένα υπηρεσία elasticsearch.
### Δικαιώματα εγγραφής
Μπορείτε να ελέγξετε τα δικαιώματα εγγραφής σας δοκιμάζοντας να δημιουργήσετε ένα νέο έγγραφο μέσα σε ένα νέο ευρετήριο εκτελώντας κάτι παρόμοιο με το παρακάτω:
```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"
}'
```
Αυτή η εντολή θα δημιουργήσει ένα **νέο ευρετήριο** με το όνομα `bookindex` με ένα έγγραφο τύπου `books` που έχει τα χαρακτηριστικά "_bookId_", "_author_", "_publisher_" και "_name_"
Παρατηρήστε πώς το **νέο ευρετήριο εμφανίζεται τώρα στη λίστα**:
![](<../.gitbook/assets/image (268).png>)
Και παρατηρήστε τις **αυτόματα δημιουργημένες ιδιότητες**:
![](<../.gitbook/assets/image (269).png>)
## Αυτόματη Αρίθμηση
Ορισμένα εργαλεία θα αποκτήσουν μερικά από τα προηγούμενα παρουσιαζόμενα δεδομένα:
```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum
```
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
## Shodan
* `port:9200 elasticsearch`
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>