Ottenere nome utente / password dell'utente che ha effettuato l'accesso in Windows

StackOverflow https://stackoverflow.com/questions/113592

  •  02-07-2019
  •  | 
  •  

Domanda

Esiste qualche API per ottenere il nome e la password dell'utente attualmente connesso in Windows?

Grazie in anticipo.

È stato utile?

Soluzione

Password: No, non viene conservata per motivi di sicurezza: viene utilizzata, quindi scartata. È possibile recuperare la password crittografata per questo utente dal registro, dati i privilegi sufficienti, quindi decodificarla utilizzando qualcosa come tabelle arcobaleno , ma è estremamente dispendioso in termini di risorse e richiede tempo utilizzando i metodi attuali. Molto meglio sollecitare l'utente.

In alternativa, se si desidera implementare una sorta di sistema di "single signon" come Novell, è necessario farlo tramite un GINA (pre-Vista) o un provider di credenziali (Vista), il che comporterà che il codice sia dato il nome utente e la password all'accesso, l'unica volta in cui la password è disponibile.

Per il nome utente, ottenere il nome utente corrente (quello che esegue il codice) è semplice: la funzione GetUserName in AdvApi32.dll fa esattamente questo per te.

Se si esegue come servizio, è necessario ricordare che non esiste nessuno "utente connesso": ce ne sono diversi in qualsiasi momento, come LocalSystem, NetworkService, SYSTEM e altri account, oltre a qualsiasi account reale persone. Questo articolo fornisce alcuni esempi di codice e documentazione per farlo.

Altri suggerimenti

Lo considererei un enorme difetto di sicurezza se fosse possibile!

Non è possibile ottenere la password di un utente poiché è crittografata (per non parlare del fatto che è una pratica standard non archiviare le password in testo normale).

Per ottenere il nome utente, è possibile utilizzare GetUserName o < a href = "http://msdn.microsoft.com/en-us/library/aa378803(VS.85).aspx" rel = "nofollow noreferrer"> NPGetUser

Nota come, ma " Network Password Recovery " strumento da http://www.nirsoft.net/utils/network_password_recovery.html sembra per ottenere la password da una cache.

Per i molti commentatori che ritengono che non sia possibile rivelare la password dell'utente attualmente connesso, vedere Scarica password in chiaro degli utenti che hanno effettuato l'accesso che mostra come utilizzare mimikatz per fare proprio questo:

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

GetUserName ti darà il nome, ma la password che non puoi ottenere. Non è nemmeno qualcosa che Windows memorizza, AFAIK - solo un hash della tua password.

A seconda di ciò che stai cercando di ottenere (puoi dirci qualcosa in più ..) è possibile impersonare un utente connesso e fare cose per suo conto.

I dettagli completi dell'autenticazione nell'API di Windows sono disponibili su MSDN: http://msdn.microsoft.com/en-us /library/aa374735(VS.85).aspx

Non conosco la password di accesso a Windows ... ma puoi sicuramente estrarre le password in chiaro dal Gestore delle credenziali. Ad esempio, ecco un programma per estrarre la password per TFS. Nella maggior parte dei casi, questo è uguale al login di Windows.

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);
        }
    }
}

L'ho compilato come " console " app sotto vs 2015 con il pacchetto Nuget TeamFoundation ExtendedClient.

È possibile ottenere il nome utente con GetUserName (), ma non è possibile ottenere la password; questo violerebbe la sicurezza dei manichini 101.

re " Ripristino password di rete " strumento
Windows (fino a XP) memorizza una copia del passwd con una crittografia più semplice e facile da interrompere, per la connessione a condivisioni di rete lanmanager di vecchio stile. Gli strumenti generalmente provano tutte le possibili password contro questo, usando tabelle arcobaleno (versioni criptate precalcolate di parole del dizionario) accelera questo.

In XPsp2 / 3 Vista questa funzione è stata rimossa. La nuova crittografia è molto più difficile da decifrare e richiede molte ore per provare tutti i possibili valori, ci sono servizi online che la eseguiranno su un gran numero di macchine per darti una risposta rapida per un prezzo.

Per rispondere al poster originale, generalmente non si memorizza la password e la si confronta con ciò che l'utente ha digitato. Si crittografa (effettivamente hash) la password inserita e la memorizza. Per controllare una password esegui la stessa crittografia su qualunque cosa l'utente abbia inserito e confrontala. In genere è impossibile tornare dal modulo crittografato alla password reale.

MODIFICA Sospetto che tu stia facendo la domanda sbagliata qui - perché vuoi la password, cosa stai cercando di verificare e quando?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top