Überprüfen Sie, welche Benutzer ein bestimmtes Passwort haben

Überprüfen Sie, welche Benutzer ein bestimmtes Passwort haben

Ich versuche, alle Standardbenutzerkennwörter auf mehreren Servern mit zu entfernen ansible. Zunächst möchte ich den Namen jedes Benutzers ausgeben, dessen aktuelles Kennwort lautet foobar. Wie kann ich das erreichen?

Meine erste Absicht bestand darin, den Hash daraus /etc/shadowund grepdafür zu erhalten, aber das funktionierte wegen des Saltings nicht.

Muss ich hierfür eigene Hashes berechnen und vergleichen? Oder gibt es einen schnelleren und einfacheren Ansatz?

Antwort1

Es gibt ein spezielles Tool zum Prüfen schwacher Passwörter:John der Ripperverfügbar und wahrscheinlich in allen gängigen Unix- und Linux-Varianten verpackt.

Hier ist ein Anwendungsbeispiel unter Debian GNU/Linux 9 (Schatten aufhebenkommt vorbeiJohn). Beim Bearbeiten von Passwortdateien ist etwas Vorsicht geboten, dies ist nur ein PoC. Beachten Sie, dass dieJohnDer Befehl kann remote ausgeführt werden (und muss daher nur auf einem dedizierten System installiert werden), solange geeignete Kennwortdateien bereitgestellt werden.

Setup (inkl. Passwort setzen)foobarRechnungprüfen):

# 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

Test auf verbotene/Standard-Passwörter:

# 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

Ergebnis:

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

1 password hash cracked, 2 left

Aufräumen:

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

Antwort2

Können Sie versuchen, sich als jeder Benutzer anzumelden? zB

echo "foobar" | su username

Sie müssten vorübergehendDeaktivieren Sie die TTY-Prüfung.

Antwort3

Hier ist ein kleiner C-Ausschnitt, der das Passwort bestehender Benutzer überprüft:

Speichern Sie den folgenden Codeausschnitt in einer Datei mit dem Namen: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]);
}

Kompilieren Sie den obigen Code mit:

gcc -o checkpass checkpass.c -lcrypt

Führen Sie nun in der Befehlszeile einfach Folgendes aus:

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

Es ist vielleicht ein langer Weg, aber es sollte klappen!

Antwort4

Da ich kein Fan davon bin, zusätzliche Software zu installieren und nicht mit herumspielen möchte sudoers, habe ich letztendlich Folgendes getan:

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

und überprüfen Sie anschließend den Exit-Code in Ansible. Wenn das Passwort korrekt war, ist der Exit-Code 0, andernfalls 5.

Dies funktioniert natürlich nur, wenn in Ihrer SSH-Serverkonfiguration die Kennwortauthentifizierung zugelassen ist.

verwandte Informationen