* Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Redis est un magasin de structures de données en mémoire open source (sous licence BSD), utilisé comme base de données, cache et courtier de messages (à partir de [ici](https://redis.io/topics/introduction)). Par défaut et couramment, Redis utilise un protocole basé sur du texte en clair, mais vous devez garder à l'esprit qu'il peut également implémenter **ssl/tls**. Apprenez comment [exécuter Redis avec ssl/tls ici](https://fossies.org/linux/redis/TLS.md).
Redis est un **protocole basé sur le texte**, vous pouvez simplement **envoyer la commande dans un socket** et les valeurs renvoyées seront lisibles. N'oubliez pas que Redis peut fonctionner en utilisant **ssl/tls** (mais c'est très étrange).
La **première commande** que vous pourriez essayer est **`info`**. Elle **peut renvoyer une sortie avec des informations** sur l'instance Redis **ou quelque chose** comme ce qui suit est renvoyé:
**Par défaut**, Redis peut être accédé **sans justificatifs**. Cependant, il peut être **configuré** pour ne supporter que le **mot de passe ou le nom d'utilisateur + mot de passe**.\
Il est possible de **définir un mot de passe** dans le fichier _**redis.conf**_ avec le paramètre `requirepass`**ou temporairement** jusqu'au redémarrage du service en se connectant et en exécutant: `config set requirepass p@ss$12E45`.\
De plus, un **nom d'utilisateur** peut être configuré dans le paramètre `masteruser` à l'intérieur du fichier _**redis.conf**_.
Si seul le mot de passe est configuré, le nom d'utilisateur utilisé est "**default**".\
De plus, notez qu'il n'y a **aucun moyen de savoir de l'extérieur** si Redis a été configuré avec seulement un mot de passe ou un nom d'utilisateur + mot de passe.
Dans des cas comme celui-ci, vous devrez **trouver des justificatifs valides** pour interagir avec Redis, vous pouvez donc essayer de le [**forcer**](../generic-methodologies-and-resources/brute-force.md#redis).\
**Si vous trouvez des justificatifs valides, vous devez authentifier la session** après avoir établi la connexion avec la commande:
Si l'instance Redis accepte les connexions **anonymes** ou si vous avez trouvé des **identifiants valides**, vous pouvez **commencer à énumérer** le service avec les commandes suivantes:
**D'autres commandes Redis** [**peuvent être trouvées ici**](https://redis.io/topics/data-types-intro) **et** [**ici**](https://lzone.de/cheat-sheet/Redis)**.**\
Notez que les **commandes Redis d'une instance peuvent être renommées** ou supprimées dans le fichier _redis.conf_. Par exemple, cette ligne supprimera la commande FLUSHDB:
Plus d'informations sur la configuration sécurisée d'un service Redis ici: [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)
Vous pouvez également **surveiller en temps réel les commandes Redis** exécutées avec la commande **`monitor`** ou obtenir les **25 requêtes les plus lentes** avec **`slowlog get 25`**
À l'intérieur de Redis, les **bases de données sont des nombres commençant par 0**. Vous pouvez savoir si l'une d'entre elles est utilisée dans la sortie de la commande `info` à l'intérieur de la section "Keyspace":
Dans cet exemple, les **bases de données 0 et 1** sont utilisées. **La base de données 0 contient 4 clés et la base de données 1 en contient 1**. Par défaut, Redis utilise la base de données 0. Pour sauvegarder par exemple la base de données 1, vous devez faire :
Au cas où vous obtenez l'erreur suivante `-WRONGTYPE Opération contre une clé contenant un type de valeur incorrect` lors de l'exécution de `GET <KEY>`, c'est parce que la clé peut être autre chose qu'une chaîne ou un entier et nécessite un opérateur spécial pour l'afficher.
**Dump de la base de données avec npm** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **ou python** [**redis-utils**](https://pypi.org/project/redis-utils/)
[**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server) peut automatiquement obtenir un shell interactif ou un shell inversé dans Redis (<=5.0.5).
Informations provenant de [**ici**](https://web.archive.org/web/20191201022931/http://reverse-tcp.xyz/pentest/database/2017/02/09/Redis-Hacking-Tips.html). Vous devez connaître le **chemin** du **dossier du site Web** :
Si l'accès à la webshell est exceptionnel, vous pouvez vider la base de données après la sauvegarde et réessayer, n'oubliez pas de restaurer la base de données.
Comme dans la section précédente, vous pouvez également écraser un fichier de modèle HTML qui sera interprété par un moteur de modèle et obtenir une shell.
Par exemple, en suivant [**ce compte-rendu**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), vous pouvez voir que l'attaquant a injecté une **shell inversée dans un HTML** interprété par le **moteur de modèle nunjucks :**
Notez que **plusieurs moteurs de template mettent en cache** les templates en **mémoire**, donc même si vous les écrasez, le nouveau ne sera **pas exécuté**. Dans ces cas, soit le développeur a laissé le rechargement automatique actif, soit vous devez effectuer un DoS sur le service (et vous attendre à ce qu'il soit relancé automatiquement).
Veuillez noter que le résultat de **`config get dir`** peut être modifié après l'exécution d'autres commandes d'exploitation manuelles. Nous vous suggérons de l'exécuter en premier juste après la connexion à Redis. Dans la sortie de **`config get dir`**, vous pouvez trouver le **dossier personnel** de l'utilisateur **redis** (généralement _/var/lib/redis_ ou _/home/redis/.ssh_), et en le connaissant, vous savez où vous pouvez écrire le fichier `authenticated_users` pour accéder via ssh **avec l'utilisateur redis**. Si vous connaissez le dossier personnel d'un autre utilisateur valide où vous avez des autorisations d'écriture, vous pouvez également l'exploiter :
1. Suivez les instructions de [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) pour **compiler un module Redis pour exécuter des commandes arbitraires**.
2. Ensuite, vous avez besoin d'un moyen de **télécharger le module compilé**
3.**Chargez le module téléchargé** à l'exécution avec `MODULE LOAD /path/to/mymodule.so`
4.**Listez les modules chargés** pour vérifier qu'il a été correctement chargé : `MODULE LIST`
[**Ici**](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) vous pouvez voir que Redis utilise la commande **EVAL** pour exécuter du **code Lua sandboxé**. Dans le post lié, vous pouvez voir **comment l'abuser** en utilisant la fonction **dofile**, mais [apparemment](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) ce n'est plus possible. Quoi qu'il en soit, si vous pouvez **contourner le bac à sable** Lua, vous pouvez **exécuter des commandes arbitraires** sur le système. De plus, à partir du même post, vous pouvez voir quelques **options pour causer une DoS**.
Dans Redis, toutes les opérations du maître sont automatiquement synchronisées sur l'esclave, ce qui signifie que nous pouvons considérer la vulnérabilité Redis comme un esclave Redis, connecté au maître Redis que nous contrôlons, puis nous pouvons entrer la commande dans notre propre Redis.
Si vous pouvez envoyer une requête en **texte clair** à **Redis**, vous pouvez **communiquer avec lui** car Redis lira ligne par ligne la requête et répondra simplement avec des erreurs aux lignes qu'il ne comprend pas :
Par conséquent, si vous trouvez une vulnérabilité **SSRF** sur un site Web et que vous pouvez **contrôler** certains **en-têtes** (peut-être avec une vulnérabilité **CRLF**) ou des **paramètres POST**, vous pourrez envoyer des commandes arbitraires à Redis.
Dans **Gitlab11.4.7**, une vulnérabilité **SSRF** et une vulnérabilité **CRLF** ont été découvertes. La vulnérabilité **SSRF** était dans la fonctionnalité **d'importation de projet à partir d'une URL** lors de la création d'un nouveau projet et permettait d'accéder à des adresses IP arbitraires sous la forme \[0:0:0:0:0:ffff:127.0.0.1] (ceci accédera à 127.0.0.1), et la vulnérabilité **CRLF** a été exploitée en ajoutant simplement des caractères **%0D%0A** à l'**URL**.
Par conséquent, il était possible d'**exploiter ces vulnérabilités pour communiquer avec l'instance Redis** qui **gère les files d'attente** de **gitlab** et d'abuser de ces files d'attente pour **obtenir une exécution de code**. La charge utile d'abus de file d'attente Redis est:
_Pour une raison quelconque (comme pour l'auteur de_ [_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/) _où cette information a été prise), l'exploitation a fonctionné avec le schéma `git` et non avec le schéma `http`._
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).