Verifique qué usuarios tienen una contraseña específica

Verifique qué usuarios tienen una contraseña específica

Estoy intentando eliminar todas las contraseñas de usuario predeterminadas en varios servidores con ansible. En primer lugar, me gustaría mostrar el nombre de cada usuario cuya contraseña actual sea foobar. ¿Cómo puedo conseguir esto?

Mi primera intención fue obtener el hachís de /etc/shadowy greppara él, pero esto no funcionará debido a la salazón.

¿Necesito calcular mis propios hashes para esto y compararlos? ¿O existe un enfoque más rápido y sencillo?

Respuesta1

Existe una herramienta especializada para comprobar la debilidad de las contraseñas:Juan el Destripadordisponible y probablemente empaquetado en todas las versiones comunes de Unix y Linux.

Aquí hay un ejemplo de uso en Debian GNU/Linux 9 (desombrearviene junto conJohn). Se debe tener cierto cuidado al manipular archivos de contraseñas, esto es solo una prueba de concepto. Tenga en cuenta que elJohnEl comando podría ejecutarse de forma remota (y, por lo tanto, no instalarse en ningún otro lugar que no sea un sistema dedicado) siempre que proporcione archivos de contraseña adecuados.

Configuración (incluida la configuración de contraseñaFoobara la cuentaprueba):

# echo test:foobar | chpasswd
# grep ^test: /etc/shadow
test:$6$84SIejUB$qM5UulJEIiwjOc4PWXYupWoyU/jMP0rKA8cM1g8CEOgxMlC.x4ndbbdRq438rjKb.6UwCoTqzvgxoi0h51Kpm1:18050:0:99999:7:::
# unshadow /etc/passwd /etc/shadow > /root/workpasswd
# echo foobar > /tmp/wordlist

Prueba de contraseñas prohibidas/predeterminadas:

# john -wordlist:/tmp/wordlist /root/workpasswd
Created directory: /root/.john
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
foobar           (test)
1g 0:00:00:00 100% 5.882g/s 5.882p/s 17.64c/s 17.64C/s foobar
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Resultado:

# john -show /root/workpasswd 
test:foobar:1001:1001:,,,:/home/test:/bin/bash

1 password hash cracked, 2 left

Limpiar:

# rm -r /root/workpasswd /root/.john /tmp/wordlist

Respuesta2

¿Puedes intentar iniciar sesión como cada usuario? p.ej

echo "foobar" | su username

Necesitarías temporalmentedesactivar la verificación TTY.

Respuesta3

Aquí hay un pequeño fragmento de C que verifica la contraseña de los usuarios existentes:

Guarde el siguiente fragmento en un archivo llamado:checkpass.c

#include <pwd.h>
#include <shadow.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <crypt.h>

static int pwcheck (char *user, char *passwd)
{
    struct passwd *pw;
    struct spwd *spwd;
    char *epasswd, *cpasswd;
    char *tty;

    if ((pw = getpwnam(user)) == NULL) {
        return 1;
    }
     /*
     * XXX If no passwd, let them login without one.
     */
    if (pw->pw_passwd[0] == '\0') {
        return 0;
    }
    spwd = getspnam(user);
    cpasswd = (spwd ? spwd->sp_pwdp : pw->pw_passwd);

    epasswd = crypt(passwd, cpasswd);
    if (epasswd == NULL) {
        return 2;
    }
    if (strcmp (epasswd, cpasswd)) {
        return 1;
    }

    return 0;
}

int main (int argc, char *argv[])
{
    if (argc < 3) return 4;
    return pwcheck (argv[1], argv[2]);
}

Compile el código anterior usando:

gcc -o checkpass checkpass.c -lcrypt

Ahora desde la línea de comando simplemente ejecute lo siguiente:

while IFS=: read -r user _; do
  if ./checkpass "$user" foobar; then
    printf 'The ollowing user %s has the password set to foobar\n' "$user";
  fi;
done </etc/passwd

Quizás sea una posibilidad remota, ¡pero debería funcionar!

Respuesta4

Como no soy partidario de instalar software adicional y no quiero perder el tiempo sudoers, lo que terminé haciendo fue

sshpass -p foobar ssh -o PreferredAuthentications=keyboard-interactive,password -o PubkeyAuthentication=no user@host

y luego verifique el código de salida en Ansible. Si la contraseña era correcta el código de salida será 0, en caso contrario 5.

Obviamente, esto solo funcionará si se permite la autenticación de contraseña en la configuración de su servidor SSH.

información relacionada