Redis - 6379
Redis (Remote Dictionary Server) es un almacén de estructura de datos de clave-valor en memoria rápido y de código abierto.
Es utilizado por millones de desarrolladores como base de datos, caché, motor de streaming y agente de mensajes.
Laboratorio
Para poder realizar pruebas contra un entorno de redis de forma fácil, se puede utilizar un contenedor de docker:
La herramienta que utilizaremos para conectarnos "redis-cli" se encuentra en el paquete de "redis-tools":
Conexión al redis:
Conexión al contenedor de docker:
Para la explotación de múltiples vulnerabilidades, es necesario que existan varios elementos comunes en entorno de producción. Para ello, dentro del contenedor se ejecutarán los siguientes comandos:
Enumeración
Se puede comprobar de diferentes formas si un servidor cuenta con el puerto 6379 abierto y si en este está siendo ejecutado el servicio de Redis.
Nmap:
Telnet:
Netcat:
Redis-cli:
Metasploit:
Si el servidor no cuenta con autenticación, se podrán ejecutar múltiples comandos con el objetivo de enumerar información del servidor, e incluso, llegar a obtener ejecución de código en el servidor.
Conexión
Autenticación
Por defecto, Redis no cuenta con autenticación, esta puede (y debe) ser establecida posteriormente, bien con autenticación:
usuario+contraseña.
Solo contraseña. En el este caso, el usuario por defecto será
default
.
Para autenticarse en redis, se puede utilizar el siguiente comando:
Comandos de redis
Algunos comandos comunes para enumerar información del servidor:
Crear una clave-valor y obtener el valor de una clave:
Para una mejor comprensión de los comandos, será mejor consultar la documentación:
Rutas interesantes
Ataques sin autenticación
Para conseguir ejecución de código remoto en un servidor redis, primero se deberá conseguir acceso al servicio.
Conexión directa
Bien porque no cuenta con credenciales, o porque se han obtenido credenciales por otros medios.
Más info aquí -> [Aquí]
Fuerza bruta
nmap:
metasploit:
info
Muestra los información y datos del servidor.
select <n>
Selecciona una base de datos que utilizar. Por defecto, Redis tiene 16 bases de datos disponibles (0 - 15), siendo 0 la utilizada normalmente.
keys <pattern>
Muestra todas las claves que coincidan con la expresión regular indicada.
type <clave>
Muestra el tipo del valor almacenado en la clave.
get <clave>
Muestra la clave
hgetall <clave>
Muestra todos los pares campo/valor almacenados en la clave hash.
hget <campo> <valor>
Obtener el valor del campo especificado en la clave hash.
Ataques con autenticación
Redis (<=5.X) RCE
Para ello, se pueden utilizar las herramientas:
rogue-server: https://github.com/n0b0dyCN/redis-rogue-server
Webshell
Si el mismo servidor aloja una aplicación web, se podrá intentar subir una webshell.
SSH
Sobreescribe el fichero authorized_keys
Manual.
Automatizado.
Método 1 - Manual
Este método sobreescribe el fichero de authorized_keys, por lo que, no debería utilizarse en entornos de producción.
Se crea una clave privada y pública:
Crear un fichero con la clave pública creada:
Copiar la clave pública en el servidor de redis:
Almacenar la clave pública en el fichero
authorized_keys
.
Acceder vía SSH con la clave privada:
Método 2 - Automatizado
Se puede realizar de forma automatizada con la herramienta:
Crontab
Primero, dejaremos el puerto de recepción a la escucha:
Este comando contiene un crontab que al ejecutarse devuelve una reverse shell con python. Habrá que modificar la IP y puerto de recepción (como siempre, preferiblemente los puertos 80 y 443):
Añadir el comando anterior, previamente modificados y ejecutarlo para añadir el valor en la clave "1" que se creará en redis:
Se crea el fichero que, al llegar a ejecutarse, nos devolverá la shell:
Referencias
Última actualización