Secure Shell es uno de los protocolos de red más comunes, generalmente utilizado para administrar máquinas remotas a través de una conexión cifrada. Sin embargo, SSH es propenso a la fuerza bruta de contraseñas. La autenticación basada en claves es mucho más segura, y las claves privadas incluso se pueden cifrar para mayor seguridad. Pero incluso eso no es a prueba de balas, ya que las contraseñas de clave privada SSH se pueden descifrar con John the Ripper.
Autenticación basada en clave SSH
La forma estándar de conectarse a una máquina a través de SSH utiliza autenticación basada en contraseña . Esto tiene la ventaja de ser más fácil de configurar, pero sufre en cuanto a la seguridad debido a que es propenso a la fuerza bruta y la adivinación de contraseñas.
La autenticación basada en claves, por otro lado, utiliza criptografía para garantizar conexiones seguras. Se genera un par de claves que consta de una clave pública y una privada. La clave privada debe mantenerse en secreto y se usa para conectarse a máquinas que tienen la clave pública coincidente.
La clave pública se utiliza para cifrar la comunicación que solo la clave privada asociada puede descifrar. Esto hace que sea casi imposible que los piratas informáticos comprometan las sesiones SSH a menos que tengan acceso a la clave privada.
Los pasos a continuación asumen que ya obtuvo acceso a una computadora de destino desde su máquina local. Estoy usando Kali Linux como caja local.
Paso 1Crear un nuevo usuario en el destino
Para comenzar, vamos a crear un nuevo usuario en el objetivo con fines de demostración. Use el comando adduser e ingrese una nueva contraseña cuando se le solicite:
A continuación, verifique que la información sea correcta. Está bien dejar todo en blanco:Podemos verificar que el nuevo usuario se agregó correctamente al ver /etc/passwd:
Ahora podemos cambiar a nuestro nuevo usuario con el comando su :
Paso 2Generar un par de claves en el objetivo
Lo siguiente que debemos hacer es generar un par de claves pública/privada. La utilidad ssh-keygen puede encargarse fácilmente de esto por nosotros. Use la ubicación predeterminada, que creará el archivo en nuestro directorio de inicio:
Queremos que nuestra clave privada esté encriptada, así que asegúrese de ingresar una contraseña cuando se le solicite (usaremos la contraseña abc123 solo para mantenerlo simple):Ahora podemos cambiar al directorio SSH oculto :
Y verifica que nuestras llaves estén ahí:
También necesitaremos crear un archivo authorized_keys para asegurarnos de que podemos conectarnos desde nuestra otra máquina:
Configure los permisos apropiados para asegurarse de que solo nuestro usuario pueda leer y escribir el archivo:
La clave pública debe ir en este archivo, así que explícalo:
Y cópielo en el archivo authorized_keys, asegurándose de que no haya saltos de línea ni espacios adicionales:
Paso 3Obtenga la clave privada en la máquina local
En este punto, necesitamos obtener la clave privada (id_rsa) en nuestra máquina local. Esto puede suceder a través de una variedad de escenarios, como si tuviéramos acceso de lectura debido a LFI o incluso la inyección de comandos que nos permite ejecutar ciertos comandos.
Para fines de demostración, simplemente lo transferiremos a través de HTTP. Siempre es una buena idea verificar qué versión de Python , si es que hay alguna, está instalada:
Podemos activar un servidor HTTP rápido con el siguiente comando:En nuestra máquina local, podemos usar wget para capturar el archivo:
Y verificar su contenido:
Paso 4Instale SSH2John en la máquina local
A menos que esté instalada la versión jumbo de John the Ripper , necesitaremos descargar ssh2john de GitHub, ya que no está incluido en la versión de John the Ripper que está instalada en Kali Linux. (Si no tiene instalado John the Ripper, puede averiguar cómo instalarlo desde su GitHub ).
Paso 5Descifrar la clave privada en la máquina local
Todo lo que tenemos que hacer es ejecutarlo contra la clave privada y dirigir los resultados a un nuevo archivo hash usando la herramienta Python ssh2john:
A continuación, usaremos a John para descifrar la contraseña. Pero primero, necesitamos una lista de palabras adecuada ; Usaremos uno corto que ya contenga nuestra contraseña para mantenerlo simple. Consíguelo desde aquí:Ahora ejecute John como de costumbre, alimentándolo con la lista de palabras y el archivo hash:
Podemos ver que identificó nuestra contraseña, pero solo para estar seguros, usemos el comando --show para verificar:
Paso 6SSH en el destino
Podemos SSH en el objetivo usando la opción -i para especificar una clave privada para la autenticación:
Y obtenemos un error. No nos permitirá usar la clave si los permisos son demasiado abiertos, por lo que todo lo que tenemos que hacer es configurar los permisos para que sean más restringidos:Ahora podemos conectarnos. Luego, ingrese la contraseña descifrada en el indicador y estamos en:
Terminando
En este tutorial, aprendimos sobre la autenticación basada en claves SSH y cómo descifrar contraseñas de claves privadas. Primero, creamos un nuevo usuario en el sistema de destino y generamos un par de claves SSH. Luego, obtuvimos la clave privada del objetivo y usamos ssh2john para extraer el hash. Finalmente, desciframos la contraseña de la clave privada y la usamos para conectarnos al objetivo.
.png)
0 Comentarios