hacktricks/network-services-pentesting/9200-pentesting-elasticsearch.md

201 lines
20 KiB
Markdown
Raw Normal View History

2024-02-10 22:40:18 +00:00
# 9200 - Ελέγχος ασφάλειας Elasticsearch
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 22:40:18 +00:00
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 22:40:18 +00:00
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
2022-04-28 16:01:33 +00:00
2024-02-10 22:40:18 +00:00
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο 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.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 22:40:18 +00:00
## Βασικές πληροφορίες
2024-02-10 22:40:18 +00:00
Το Elasticsearch είναι ένα **κατανεμημένο**, **ανοιχτού κώδικα** σύστημα αναζήτησης και αναλυτικής μηχανής για **όλους τους τύπους δεδομένων**. Είναι γνωστό για την **ταχύτητά του**, **κλιμακωσιμότητα** και **απλές REST API**. Χτισμένο πάνω στο Apache Lucene, κυκλοφόρησε για πρώτη φορά το 2010 από την Elasticsearch N.V. (πλέον γνωστή ως Elastic). Το Elasticsearch είναι η κύρια συνιστώσα του Elastic Stack, μια συλλογή από εργαλεία ανοιχτού κώδικα για την εισαγωγή, εμπλουτισμό, αποθήκευση, ανάλυση και οπτικοποίηση δεδομένων. Αυτή η συλλογή, γνωστή και ως ELK Stack, περιλαμβάνει επίσης τα Logstash και Kibana, και τώρα διαθέτει ελαφριά πράκτορες αποστολής δεδομένων που ονομάζονται Beats.
2024-02-10 22:40:18 +00:00
### Τι είναι ένα ευρετήριο Elasticsearch;
2024-02-10 22:40:18 +00:00
Ένα **ευρετήριο Elasticsearch** είναι μια συλλογή **σχετικών εγγράφων** που αποθηκεύονται ως **JSON**. Κάθε έγγραφο αποτελείται από **κλειδιά** και τις αντίστοιχες **τιμές** τους (συμβολοσειρές, αριθμοί, λογικές τιμές, ημερομηνίες, πίνακες, γεωτοποθεσίες κ.λπ.).
2024-02-10 22:40:18 +00:00
Το Elasticsearch χρησιμοποιεί μια αποδοτική δομή δεδομένων που ονομάζεται **αντίστροφο ευρετήριο** για να διευκολύνει γρήγορες αναζητήσεις κειμένου. Αυτό το ευρετήριο καταλογογραφεί κάθε μοναδική λέξη στα έγγραφα και εντοπίζει τα έγγραφα στα οποία εμφανίζεται κάθε λέξη.
2024-02-10 22:40:18 +00:00
Κατά τη διάρκεια της διαδικασίας ευρετηρίασης, το Elasticsearch αποθηκεύει τα έγγραφα και κατασκευάζει το αντίστροφο ευρετήριο, επιτρέποντας την αναζήτηση σε πραγματικό χρόνο. Το **API ευρετηρίου** χρησιμοποιείται για την προσθήκη ή ενημέρωση εγγράφων JSON σε ένα συγκεκριμένο ευρετήριο.
2024-02-10 22:40:18 +00:00
**Προεπιλεγμένη θύρα**: 9200/tcp
2024-02-10 22:40:18 +00:00
## Χειροκίνητη απαρίθμηση
2024-02-10 22:40:18 +00:00
### Μπάνερ
2024-02-10 22:40:18 +00:00
Το πρωτόκολλο που χρησιμοποιείται για την πρόσβαση στο Elasticsearch είναι το **HTTP**. Όταν έχετε πρόσβαση μέσω HTTP θα βρείτε ορισμένες ενδιαφέρουσες πληροφορίες: `http://10.10.10.115:9200/`
![](<../.gitbook/assets/image (264).png>)
2024-02-10 22:40:18 +00:00
Εάν δεν βλέπετε αυτήν την απόκριση προσπελαύνοντας το `/`, δείτε την ακόλουθη ενότητα.
2020-07-17 23:09:57 +00:00
2024-02-10 22:40:18 +00:00
### Ταυτοποίηση
2020-07-17 23:09:57 +00:00
2024-02-10 22:40:18 +00:00
**Από προεπιλογή το Elasticsearch δεν έχει ενεργοποιημένη την ταυτοποίηση**, οπότε από προεπιλογή μπορείτε να έχετε πρόσβαση σε όλα τα περιεχόμενα της βάσης δεδομένων χωρίς να χρειάζεται να χρησιμοποιήσετε διαπιστευτήρια.
2021-01-28 13:40:17 +00:00
2024-02-10 22:40:18 +00:00
Μπορείτε να επαληθεύσετε ότι η ταυτοποίηση είναι απενεργοποιημένη με ένα αίτημα προς:
2021-01-28 13:40:17 +00:00
```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}
```
2024-02-10 22:40:18 +00:00
**Ωστόσο**, αν στείλετε ένα αίτημα στο `/` και λάβετε μια απάντηση όπως η παρακάτω:
2020-07-17 23:09:57 +00:00
```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}
```
2024-02-10 22:40:18 +00:00
Αυτό σημαίνει ότι η πιστοποίηση έχει ρυθμιστεί και **χρειάζεστε έγκυρα διαπιστευτήρια** για να λάβετε οποιαδήποτε πληροφορία από το 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** για αυτόν τον χρήστη.
```
2020-10-05 11:46:57 +00:00
curl -X GET http://user:password@IP:9200/
```
2024-02-10 22:40:18 +00:00
### Βασική Απαρίθμηση Χρηστών
Η βασική απαρίθμηση χρηστών είναι μια τεχνική που χρησιμοποιείται για να ανακτήσει πληροφορίες σχετικά με τους χρήστες που υπάρχουν σε ένα σύστημα Elasticsearch. Αυτή η τεχνική μπορεί να βοηθήσει έναν εισβολέα να ανακαλύψει πιθανά ονόματα χρηστών και να προσπαθήσει να εκμεταλλευτεί τυχόν αδυναμίες στην αυθεντικοποίηση.
2020-10-05 11:46:57 +00:00
2024-02-10 22:40:18 +00:00
Για να πραγματοποιηθεί η απαρίθμηση, μπορούν να χρησιμοποιηθούν διάφορες μέθοδοι, όπως η ανάκτηση των δημόσιων δεδομένων του Elasticsearch, η ανάλυση των αρχείων καταγραφής ή η χρήση εργαλείων απαρίθμησης χρηστών.
2021-01-28 13:40:17 +00:00
2024-02-10 22:40:18 +00:00
Είναι σημαντικό να σημειωθεί ότι η απαρίθμηση χρηστών μπορεί να θεωρηθεί ως επίθεση σε ένα σύστημα, και επομένως πρέπει να γίνεται με προσοχή και με την άδεια του νόμιμου κατόχου του συστήματος.
2021-01-28 13:40:17 +00:00
```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>"
```
2024-02-10 22:40:18 +00:00
### Πληροφορίες για το Elastic
2021-01-28 13:40:17 +00:00
2024-02-10 22:40:18 +00:00
Εδώ υπάρχουν μερικά σημεία πρόσβασης που μπορείτε να **έχετε πρόσβαση μέσω GET** για να **αποκτήσετε** πληροφορίες για το elasticsearch:
2021-11-30 16:46:07 +00:00
| \_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 | | |
2024-02-10 22:40:18 +00:00
Αυτά τα σημεία πρόσβασης προήλθαν από την [**τεκμηρίωση**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) όπου μπορείτε να **βρείτε περισσότερα**.\
Επίσης, αν έχετε πρόσβαση στο `/_cat`, η απόκριση θα περιέχει τα σημεία πρόσβασης `/_cat/*` που υποστηρίζονται από την περίπτωση.
2020-07-17 23:09:57 +00:00
2024-02-10 22:40:18 +00:00
Στο `/_security/user` (εάν είναι ενεργοποιημένη η πιστοποίηση) μπορείτε να δείτε ποιος χρήστης έχει τον ρόλο `superuser`.
2020-07-17 23:09:57 +00:00
2024-02-10 22:40:18 +00:00
### Δείκτες
2024-02-10 22:40:18 +00:00
Μπορείτε να **συγκεντρώσετε όλους τους δείκτες** με την πρόσβαση στο `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
```
2024-02-10 22:40:18 +00:00
Για να λάβετε πληροφορίες σχετικά με τον τύπο των δεδομένων που αποθηκεύονται σε ένα ευρετήριο, μπορείτε να έχετε πρόσβαση στη διεύθυνση: `http://host:9200/<index>` για παράδειγμα σε αυτήν την περίπτωση `http://10.10.10.115:9200/bank`
![](<../.gitbook/assets/image (265).png>)
2024-02-10 22:40:18 +00:00
### Αντιγραφή ευρετηρίου
2024-02-10 22:40:18 +00:00
Εάν θέλετε να αντιγράψετε **όλο το περιεχόμενο** ενός ευρετηρίου, μπορείτε να έχετε πρόσβαση στη διεύθυνση: `http://host:9200/<index>/_search?pretty=true` όπως `http://10.10.10.115:9200/bank/_search?pretty=true`
![](<../.gitbook/assets/image (266).png>)
2024-02-10 22:40:18 +00:00
_Πάρτε λίγο χρόνο για να συγκρίνετε το περιεχόμενο κάθε εγγραφής (καταχώρησης) μέσα στο ευρετήριο της τράπεζας και τα πεδία αυτού του ευρετηρίου που είδαμε στην προηγούμενη ενότητα._
2024-02-10 22:40:18 +00:00
Έτσι, σε αυτό το σημείο μπορείτε να παρατηρήσετε ότι υπάρχει ένα πεδίο με το όνομα "total" μέσα στο "hits" που υποδηλώνει ότι βρέθηκαν **1000 έγγραφα** μέσα σε αυτό το ευρετήριο, αλλά μόνο 10 ανακτήθηκαν. Αυτό συμβαίνει επειδή **από προεπιλογή υπάρχει ένα όριο των 10 εγγράφων**.\
Ωστόσο, τώρα που γνωρίζετε ότι **αυτό το ευρετήριο περιέχει 1000 έγγραφα**, μπορείτε να αντιγράψετε όλα αυτά δηλώνοντας τον αριθμό των καταχωρήσεων που θέλετε να αντιγράψετε στην παράμετρο **`size`**: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
_Σημείωση: Εάν δηλώσετε μεγαλύτερο αριθμό, όλες οι καταχωρήσεις θα αντιγραφούν ούτως ή άλλως, για παράδειγμα μπορείτε να δηλώσετε `size=9999` και θα είναι περίεργο αν υπήρχαν περισσότερες καταχωρήσεις (αλλά θα πρέπει να ελέγξετε)._
2024-02-10 22:40:18 +00:00
### Αντιγραφή όλων
2024-02-10 22:40:18 +00:00
Για να αντιγράψετε όλα, απλά πηγαίνετε στην **ίδια διαδρομή όπως πριν αλλά χωρίς να δηλώσετε κάποιο ευρετήριο** `http://host:9200/_search?pretty=true` όπως `http://10.10.10.115:9200/_search?pretty=true`\
Να θυμάστε ότι σε αυτήν την περίπτωση θα εφαρμοστεί το **προεπιλεγμένο όριο των 10** αποτελεσμάτων. Μπορείτε να χρησιμοποιήσετε την παράμετρο `size` για να αντιγράψετε ένα **μεγαλύτερο πλήθος αποτελεσμάτων**. Διαβάστε την προηγούμενη ενότητα για περισσότερες πληροφορίες.
2024-02-10 22:40:18 +00:00
### Αναζήτηση
2024-02-10 22:40:18 +00:00
Εάν ψάχνετε για κάποιες πληροφορίες, μπορείτε να κάνετε μια **αναζήτηση σε όλα τα ευρετήρια** πηγαίνοντας στη διεύθυνση `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>)
2024-02-10 22:40:18 +00:00
Εάν θέλετε απλά να **αναζητήσετε σε ένα ευρετήριο**, μπορείτε απλά να το **καθορίσετε** στη **διαδρομή**: `http://host:9200/<index>/_search?pretty=true&q=<search_term>`
2024-02-10 22:40:18 +00:00
_Σημειώστε ότι η παράμετρος q που χρησιμοποιείται για την αναζήτηση περιεχομένου **υποστηρίζει κανονικές εκφράσεις**_
2020-07-27 15:27:48 +00:00
2024-02-10 22:40:18 +00:00
Μπορείτε επίσης να χρησιμοποιήσετε κάτι όπως [https://github.com/misalabs/horuz](https://github.com/misalabs/horuz) για να εκτελέσετε fuzz σε ένα υπηρεσία elasticsearch.
2024-02-10 22:40:18 +00:00
### Δικαιώματα εγγραφής
2024-02-10 22:40:18 +00:00
Μπορείτε να ελέγξετε τα δικαιώματα εγγραφής σας δοκιμάζοντας να δημιουργήσετε ένα νέο έγγραφο μέσα σε ένα νέο ευρετήριο εκτελώντας κάτι παρόμοιο με το παρακάτω:
```bash
curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d'
2024-02-10 22:40:18 +00:00
{
"bookId" : "A00-3",
"author" : "Sankaran",
"publisher" : "Mcgrahill",
"name" : "how to get a job"
}'
```
2024-02-10 22:40:18 +00:00
Αυτή η εντολή θα δημιουργήσει ένα **νέο ευρετήριο** με το όνομα `bookindex` με ένα έγγραφο τύπου `books` που έχει τα χαρακτηριστικά "_bookId_", "_author_", "_publisher_" και "_name_"
2024-02-10 22:40:18 +00:00
Παρατηρήστε πώς το **νέο ευρετήριο εμφανίζεται τώρα στη λίστα**:
![](<../.gitbook/assets/image (268).png>)
2024-02-10 22:40:18 +00:00
Και παρατηρήστε τις **αυτόματα δημιουργημένες ιδιότητες**:
![](<../.gitbook/assets/image (269).png>)
2024-02-10 22:40:18 +00:00
## Αυτόματη Αρίθμηση
2020-07-17 14:32:55 +00:00
2024-02-10 22:40:18 +00:00
Ορισμένα εργαλεία θα αποκτήσουν μερικά από τα προηγούμενα παρουσιαζόμενα δεδομένα:
2020-07-17 14:32:55 +00:00
```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum
```
2020-10-05 10:44:06 +00:00
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
2022-05-01 13:25:53 +00:00
## Shodan
2020-10-05 10:44:06 +00:00
* `port:9200 elasticsearch`
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 22:40:18 +00:00
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 22:40:18 +00:00
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
2022-04-28 16:01:33 +00:00
2024-02-10 22:40:18 +00:00
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο 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.
2022-04-28 16:01:33 +00:00
</details>