Μάθετε & εξασκηθείτε στο Hacking AWS:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Μάθετε & εξασκηθείτε στο Hacking GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε στο** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) ή στο [**telegram group**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
Εγγραφείτε στον [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server γιανα επικοινωνήσετε με έμπειρους hackers και κυνηγούς bug bounty!
Από [τα docs](https://redis.io/topics/introduction): Το Redis είναι ένα ανοιχτού κώδικα (με άδεια BSD), in-memory **data structure store**, που χρησιμοποιείται ως **βάση δεδομένων**, cache και message broker).
Από προεπιλογή, το Redis χρησιμοποιεί ένα πρωτόκολλο βασισμένο σε απλό κείμενο, αλλά πρέπει να έχετε υπόψη ότι μπορεί επίσης να υλοποιήσει **ssl/tls**. Μάθετε πώς να [τρέχετε το Redis με ssl/tls εδώ](https://fossies.org/linux/redis/TLS.md).
Το Redis είναι ένα **πρωτόκολλο βασισμένο σε κείμενο**, μπορείτε απλά να**στείλετε την εντολή σε ένα socket** και οι επιστρεφόμενες τιμές θα είναι αναγνώσιμες. Επίσης, θυμηθείτε ότι το Redis μπορεί να τρέξει χρησιμοποιώντας **ssl/tls** (αλλά αυτό είναι πολύ παράξενο).
Η**πρώτη εντολή** που θα μπορούσατε να δοκιμάσετε είναι **`info`**. Αυτή **μπορεί να επιστρέψει έξοδο με πληροφορίες** της Redis instance **ή κάτι** όπως το παρακάτω επιστρέφεται:
**Από προεπιλογή** η Redis μπορεί να προσπελαστεί **χωρίς διαπιστευτήρια**. Ωστόσο, μπορεί να**ρυθμιστεί** ώστε να υποστηρίζει **μόνο κωδικό πρόσβασης ή όνομα χρήστη + κωδικό πρόσβασης**.\
Είναι δυνατόν να**ορίσετε έναν κωδικό πρόσβασης** στο _**redis.conf**_ αρχείο με την παράμετρο `requirepass`**ή προσωρινά** μέχρι να επανεκκινήσει η υπηρεσία συνδεόμενοι σε αυτήν και εκτελώντας: `config set requirepass p@ss$12E45`.\
Επίσης, ένα **όνομα χρήστη** μπορεί να ρυθμιστεί στην παράμετρο `masteruser` μέσα στο _**redis.conf**_ αρχείο.
Σε περιπτώσεις όπως αυτή θα **χρειαστεί να βρείτε έγκυρα διαπιστευτήρια**γιανα αλληλεπιδράσετε με την Redis, οπότε μπορείτε να προσπαθήσετε να [**brute-force**](../generic-methodologies-and-resources/brute-force.md#redis) την.\
**Σε περίπτωση που βρείτε έγκυρα διαπιστευτήρια, πρέπει να αυθεντικοποιήσετε τη συνεδρία** μετά την εγκαθίδρυση της σύνδεσης με την εντολή:
Εάν ο διακομιστής Redis επιτρέπει **ανώνυμες συνδέσεις** ή εάν έχετε αποκτήσει έγκυρα διαπιστευτήρια, μπορείτε να ξεκινήσετε τη διαδικασία καταμέτρησης για την υπηρεσία χρησιμοποιώντας τις παρακάτω **εντολές**:
Σημειώστε ότι οι**εντολές Redis μιας παρουσίας μπορούν να μετονομαστούν** ή να αφαιρεθούν στο αρχείο _redis.conf_. Για παράδειγμα, αυτή η γραμμή θα αφαιρέσει την εντολή 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** που εκτελούνται με την εντολή **`monitor`** ή να λάβετε τις **25 πιο αργές ερωτήσεις** με **`slowlog get 25`**
Βρείτε περισσότερες ενδιαφέρουσες πληροφορίες σχετικά με περισσότερες εντολές Redis εδώ: [https://lzone.de/cheat-sheet/Redis](https://lzone.de/cheat-sheet/Redis)
Μέσα στο Redis οι**βάσεις δεδομένων είναι αριθμοί που ξεκινούν από το 0**. Μπορείτε να δείτε αν χρησιμοποιείται κάποια από αυτές στην έξοδο της εντολής `info` μέσα στο τμήμα "Keyspace":
Σε αυτό το παράδειγμα χρησιμοποιούνται οι**βάσεις δεδομένων 0 και 1**. **Η βάση δεδομένων 0 περιέχει 4 κλειδιά και η βάση δεδομένων 1 περιέχει 1**. Από προεπιλογή, το Redis θα χρησιμοποιήσει τη βάση δεδομένων 0. Για να κάνετε dump για παράδειγμα τη βάση δεδομένων 1, πρέπει να κάνετε:
Σε περίπτωση που λάβετε το παρακάτω σφάλμα `-WRONGTYPE Operation against a key holding the wrong kind of value` κατά την εκτέλεση του `GET <KEY>`, είναι επειδή το κλειδί μπορεί να είναι κάτι άλλο από μια συμβολοσειρά ή έναν ακέραιο και απαιτεί έναν ειδικό τελεστή γιανα το εμφανίσει.
**Dump the database with npm**[ **redis-dump**](https://www.npmjs.com/package/redis-dump) **or python** [**redis-utils**](https://pypi.org/project/redis-utils/)
[**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server) μπορεί αυτόματα να αποκτήσει ένα διαδραστικό shell ή ένα reverse shell στο Redis(<=5.0.5).
Πληροφορίες από [**εδώ**](https://web.archive.org/web/20191201022931/http://reverse-tcp.xyz/pentest/database/2017/02/09/Redis-Hacking-Tips.html). Πρέπει να γνωρίζετε την **διαδρομή** του **φακέλου της ιστοσελίδας**:
Αν η εξαίρεση πρόσβασης webshell, μπορείτε να αδειάσετε τη βάση δεδομένων μετά από αντίγραφο ασφαλείας και να δοκιμάσετε ξανά, θυμηθείτε να αποκαταστήσετε τη βάση δεδομένων.
Όπως στην προηγούμενη ενότητα, μπορείτε επίσης να αντικαταστήσετε κάποιο αρχείο html template που θα ερμηνευτεί από μια μηχανή template και να αποκτήσετε ένα shell.
Για παράδειγμα, ακολουθώντας [**αυτή την αναφορά**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), μπορείτε να δείτε ότι ο επιτιθέμενος εισήγαγε ένα **rev shell σε ένα html** που ερμηνεύεται από τη **μηχανή template nunjucks:**
Σημειώστε ότι **πολλές μηχανές προτύπων αποθηκεύουν** τα πρότυπα στη **μνήμη**, οπότε ακόμη και αν τα αντικαταστήσετε, το νέο **δεν θα εκτελείται**. Σε αυτές τις περιπτώσεις, είτε ο προγραμματιστής άφησε ενεργό το αυτόματο επαναφόρτωμα είτε πρέπει να κάνετε DoS στην υπηρεσία (και να περιμένετε ότι θα επανεκκινηθεί αυτόματα).
Παρακαλώ να είστε προσεκτικοί ότι το **`config get dir`** αποτέλεσμα μπορεί να αλλάξει μετά από άλλες χειροκίνητες εντολές εκμετάλλευσης. Συνιστάται να το εκτελέσετε πρώτα αμέσως μετά την είσοδο στο Redis. Στην έξοδο του **`config get dir`** μπορείτε να βρείτε το **home** του **redis user** (συνήθως _/var/lib/redis_ ή _/home/redis/.ssh_), και γνωρίζοντας αυτό ξέρετε πού μπορείτε να γράψετε το αρχείο `authenticated_users`για πρόσβαση μέσω ssh **με τον χρήστη redis**. Αν γνωρίζετε το home άλλου έγκυρου χρήστη όπου έχετε δικαιώματα εγγραφής, μπορείτε επίσης να το εκμεταλλευτείτε:
**Αυτή η τεχνική είναι αυτοματοποιημένη εδώ:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit)
Το τελευταίο παράδειγμα είναι για Ubuntu, για**Centos**, η παραπάνω εντολή θα πρέπει να είναι: `redis-cli -h 10.85.0.52 config set dir /var/spool/cron/`
1. Ακολουθώντας τις οδηγίες από [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) μπορείτε να**συγκεντρώσετε μια μονάδα redis γιανα εκτελέσετε αυθαίρετες εντολές**.
2. Στη συνέχεια, χρειάζεστε κάποιον τρόπο γιανα**ανεβάσετε τη συγκεντρωμένη** μονάδα
3.**Φορτώστε τη μονάδα που ανέβηκε** κατά την εκτέλεση με `MODULE LOAD /path/to/mymodule.so`
4.**Λίστα φορτωμένων μονάδων**γιανα ελέγξετε αν φορτώθηκε σωστά: `MODULE LIST`
[**Εδώ**](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) μπορείτε να δείτε ότι το Redis χρησιμοποιεί την εντολή **EVAL**γιανα εκτελέσει **κώδικα Lua σε sandbox**. Στην συνδεδεμένη ανάρτηση μπορείτε να δείτε **πώς να το καταχραστείτε** χρησιμοποιώντας τη λειτουργία **dofile**, αλλά [φαίνεται](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) ότι αυτό δεν είναι πλέον δυνατό. Ούτως ή άλλως, αν μπορείτε να**παράκαμψετε το Lua** sandbox θα μπορούσατε να**εκτελέσετε αυθαίρετες** εντολές στο σύστημα. Επίσης, από την ίδια ανάρτηση μπορείτε να δείτε κάποιες **επιλογές γιανα προκαλέσετε DoS**.
Η κύρια redis όλες οι λειτουργίες συγχρονίζονται αυτόματα στη slave redis, που σημαίνει ότι μπορούμε να θεωρήσουμε την ευπάθεια redis ως μια slave redis, συνδεδεμένη με την κύρια redis που ελέγχουμε, τότε μπορούμε να εισάγουμε την εντολή στη δική μας redis.
Αν μπορείτε να στείλετε **καθαρό κείμενο** αίτημα **στο Redis**, μπορείτε να**επικοινωνήσετε μαζί του** καθώς το Redis θα διαβάσει γραμμή προς γραμμή το αίτημα και θα απαντήσει μόνο με σφάλματα για τις γραμμές που δεν καταλαβαίνει:
Λοιπόν, αν βρείτε μια **SSRF vuln** σε μια ιστοσελίδα και μπορείτε να**ελέγξετε** κάποιες **κεφαλίδες** (ίσως με μια ευπάθεια CRLF) ή **παραμέτρους POST**, θα είστε σε θέση να στείλετε αυθαίρετες εντολές στο Redis.
Στο **Gitlab11.4.7** ανακαλύφθηκε μια **SSRF** ευπάθεια και μια **CRLF**. Η**SSRF** ευπάθεια ήταν στη **λειτουργία εισαγωγής έργου από URL** κατά τη δημιουργία ενός νέου έργου και επέτρεπε την πρόσβαση σε αυθαίρετες IPs με τη μορφή \[0:0:0:0:0:ffff:127.0.0.1] (αυτό θα έχει πρόσβαση στο 127.0.0.1), και η ευπάθεια **CRLF** εκμεταλλεύτηκε απλά **προσθέτοντας χαρακτήρες %0D%0A** στο **URL**.
Έτσι, ήταν δυνατό να**καταχραστούν αυτές οι ευπάθειες γιανα μιλήσουν με την παρουσία Redis** που **διαχειρίζεται τις ουρές** από **gitlab** και να καταχραστούν αυτές τις ουρές γιανα**αποκτήσουν εκτέλεση κώδικα**. Το payload κατάχρησης ουράς Redis είναι:
_Για κάποιο λόγο (όπως για τον συγγραφέα του_ [_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` scheme και όχι με το `http` scheme._
Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.