2008-09-22 20 views

Antwort

28

Passwort: Nein, dies wird aus Sicherheitsgründen nicht beibehalten - es wird verwendet, dann verworfen. Sie könnten das verschlüsselte Kennwort für diesen Benutzer aus der Registrierung abrufen, vorausgesetzt, dass es über ausreichende Berechtigungen verfügt, und entschlüsseln Sie es dann unter Verwendung von etwa rainbow tables, aber das ist extrem ressourcenintensiv und zeitaufwändig mit den aktuellen Methoden. Viel besser, um den Benutzer aufzufordern.

Alternativ, wenn Sie eine Art von Single-Sign-on-System wie Novell implementieren möchten, sollten Sie es entweder über eine GINA (Pre-Vista) oder Credential Provider (Vista) tun, was zu Ihrem Code führt Bei der Anmeldung erhalten Sie den Benutzernamen und das Passwort, die einzige Zeit, zu der das Passwort verfügbar ist.

Für Benutzername, erhalten Sie den aktuellen Benutzername (derjenige, der Ihren Code ausführt) ist einfach: die Funktion GetUserName in AdvApi32.dll genau dies für Sie.

Wenn Sie als Dienst ausgeführt werden, müssen Sie sich daran erinnern, dass niemand "eingeloggter Benutzer" ist: Es gibt mehrere, wie LocalSystem, NetworkService, SYSTEM und andere Konten, zusätzlich zu allen tatsächlichen Menschen. This article provides some sample code and documentation dafür.

+0

Danke - Ich möchte nicht das Passwort knacken, ich wollte nur den Benutzer einen Schritt speichern, aber da es keine "gute" Möglichkeit, das zu tun, werde ich nur den Benutzer dafür auffordern. – dennisV

3

Ich würde es einen riesigen Sicherheitsfehler betrachten, wenn das möglich wäre!

+1

Ja, genau das denke ich auch, aber ich wollte noch einmal überprüfen, dass ich nichts verpasst habe ... – dennisV

2

GetUserName erhalten Sie den Namen, aber das Passwort können Sie nicht erhalten. Es ist nicht einmal etwas, das Windows speichert, AFAIK - nur ein Hash deines Passwortes.

Je nachdem, was Sie versuchen zu erreichen (Sie können uns ein bisschen mehr ..) ist es möglich, einen angemeldeten Benutzer zu imitieren und Sachen in seinem Namen zu tun.

+0

Danke - das habe ich mir gedacht. – dennisV

4

Sie können das Passwort eines Benutzers nicht erhalten, da es verschlüsselt ist (ganz zu schweigen davon, dass es eine Standardpraxis ist, keine Passwörter im Klartext zu speichern).

Für den Benutzernamen bekommen, können Sie GetUserName oder NPGetUser

0

Sie können mit GetUserName den Benutzernamen erhalten(), aber Sie können das Passwort nicht erhalten; dies würde die Sicherheit für Dummies 101 verletzen.

+0

Danke - muss den Benutzer, denke ich, fragen. – dennisV

0

re "Network Password Recovery" Werkzeug
Fenster (bis XP) speichert eine Kopie des passwd mit einem einfacheren leicht zu brechen Verschlüsselung - für die Verbindung mit älteren LANManager-Netzwerkfreigaben. Die Tools versuchen im Allgemeinen alle möglichen Passwörter dagegen, indem sie Rainbow-Tabellen (vorberechnete verschlüsselte Versionen von Wörterbuchwörtern) verwenden.

In XPsp2/Vista ist diese Funktion entfernt. Die neue Verschlüsselung ist viel schwieriger zu knacken und benötigt viele Stunden, um alle möglichen Werte auszuprobieren. Es gibt Online-Dienste, die auf einer großen Anzahl von Computern laufen, um Ihnen eine schnelle Antwort zu einem Preis zu geben.

Um das ursprüngliche Poster zu beantworten - speichern Sie das Passwort im Allgemeinen nicht und vergleichen Sie es mit dem, was der Benutzer typisiert. Sie verschlüsseln (tatsächlich Hash) das eingegebene Passwort und speichern das. Um ein Passwort zu überprüfen, führen Sie die gleiche Verschlüsselung für jeden Benutzer durch und vergleichen Sie das. Es ist im Allgemeinen unmöglich, von dem verschlüsselten Formular zurück zu dem echten Passwort zu gelangen.

EDIT Ich vermute, dass Sie hier die falsche Frage stellen - warum wollen Sie das Passwort, was versuchst du zu verifizieren und wann?

+0

Ja, ich verstehe. Es ist sicherer, den Benutzer zu fragen, nur ein bisschen "ungewöhnlich", da ich nicht zu viele Anwendungen gesehen habe, die das tun. – dennisV

+0

Ich möchte das Passwort nicht verifizieren, ich möchte die Serviceeinstellungen für die Anmeldung als Benutzer einstellen und dafür benötige ich den Benutzernamen und das Passwort. Ich dachte, ich könnte einen Benutzer etwas Ärger sparen, wenn ich diese Information automatisch bekommen könnte, aber ich kann nicht, muss also ein GUI haben, um danach zu fragen. – dennisV

+0

@dennisV hast du irgendeine lösung dafür gefunden? – lucacerone

2

Für die vielen Kommentatoren, die glauben, dass es nicht möglich ist, das Kennwort des aktuell angemeldeten Benutzers zu offenbaren, sehen Dump cleartext passwords of logged in user(s) die zeigt, wie mimikatz zu verwenden, genau das zu tun:

mimikatz # privilege::debug 
Demande d'ACTIVATION du privilège : SeDebugPrivilege : OK 

mimikatz # sekurlsa::logonPasswords full 
... 
Utilisateur principal  : user 
Domaine d'authentification : domain 
     kerberos : 
     * Utilisateur : user 
     * Domaine  : domain 
     * Mot de passe : pass 
1

ich nicht wissen über das Windows-Login-Passwort ... aber Sie können Klartext-Passwörter definitiv aus dem Credentials Manager ziehen. Zum Beispiel ist hier ein Programm, um das Passwort für TFS zu ziehen. In den meisten Fällen entspricht dies der Windows-Anmeldung.

namespace ShowPassword 
{ 
    using Microsoft.TeamFoundation.Client; 
    using System; 
    using System.Net; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var tpc = new TfsTeamProjectCollection(new Uri("http://mycompany.com/tfs")); 
      var nc = tpc.Credentials as NetworkCredential; 
      Console.WriteLine("the password is " + nc.Password); 
     } 
    } 
} 

ich dies als "Konsole" app kompiliert unter vs 2015 mit Nuget Paket TeamFoundation ExtendedClient.

Verwandte Themen