Strumento per testare un account utente e una password (test login)


46

Sì, posso accendere una VM o un telecomando in qualcosa e provare la password ... Lo so ... ma esiste uno strumento o uno script che simulerà un accesso quanto basta per confermare o negare che la password sia corretta?

Scenario:

La password di un account del servizio server è "dimenticata" ... ma pensiamo di sapere di cosa si tratta. Vorrei trasferire le credenziali a qualcosa e farlo ripartire con "password corretta" o "password errata".

Ho anche pensato a uno script di mappatura dell'unità con l'account utente e la password passati per vedere se mappava l'unità correttamente o meno ma si perdeva nella logica di farlo funzionare correttamente ... qualcosa come:

-Script richiede il nome utente tramite msgbox -script richiede la password tramite msgbox -script tenta di mappare un'unità su una condivisione comune a cui tutti hanno accesso a -script annulla l'unità in caso di successo -script restituisce msgbox popup indicando "Password corretta" oppure "Non corretto Parola d'ordine"

Qualsiasi aiuto è apprezzato ... penseresti che questo sarebbe un evento raro che non richiede uno strumento per supportarlo ma ... beh ...


Quale sistema operativo? Quale servizio?
Cristian Ciupitu,

@Cristian - Account di dominio Windows - verifica solo se la password è corretta o meno
TheCleaner

Risposte:


77
runas /u:yourdomain\a_test_user notepad.exe

L'utilità richiederà la password, se è stata fornita la password corretta, il blocco note verrà avviato, in caso contrario produrrà errore 1326: il nome utente o la password non sono corretti


1
Clever Roberto. +1
TheCleaner,

3
Semplice. Elegante. Mi piace.
Sbilenco il

5
Eccezionale! Questa soluzione presenta due importanti vantaggi rispetto alla risposta accettata: 1) disponibile su Windows XP + out of the box, non è necessario scaricare nulla, 2) correlati a questo: poiché proviene da MS, non mi richiede di fidarmi del mio password per alcuni strumenti di terze parti di provenienza sconosciuta.
Akavel,

2
Gli amministratori IT Serverfault lo sanno, ma se sei un utente domestico che trova questa risposta da una ricerca web (questa è la migliore risposta tra l'altro - usa solo cose fornite con Windows): su un computer di casa, la yourdomainparte sopra è la tua nome del computer . Trovalo in Pannello di controllo> Sistema. Uno dei valori è letteralmente quello, "Nome computer:". Ad esempio, se il nome del tuo computer è "smith-laptop" e il tuo nome utente è "joe", lo farestirunas /u:smith-laptop\joe notepad.exe
Daryn

1
Se l'autenticazione è 1385: Logon failure: the user has not been granted the requested logon type at this computer.
andata

11

Script Powershell:

#usage: Test-UserCredential -username UserNameToTest -password (Read-Host)

Function Test-UserCredential { 
    Param($username, $password) 
    Add-Type -AssemblyName System.DirectoryServices.AccountManagement 
    $ct = [System.DirectoryServices.AccountManagement.ContextType]::Machine, $env:computername 
    $opt = [System.DirectoryServices.AccountManagement.ContextOptions]::SimpleBind 
    $pc = New-Object System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ct 
    $Result = $pc.ValidateCredentials($username, $password).ToString() 
    $Result 
} 

http://powershellcommunity.org/Forums/tabid/54/aft/8034/Default.aspx


new-object directoryservices.directoryentry "",$username,$password- valore di ritorno, credenziali funzionanti, eccezione, non funzionano. Tratto da questa risposta in cui è racchiuso in una funzione ordinata: serverfault.com/q/596602/57144
TessellatingHeckler

5

Puoi anche usare:

net use \\ nomecomputer \ nomecondivisione [password] / UTENTE:] nome utente]

Se è presente una condivisione con quel nome sul computer remoto. Oppure, utilizzare C$se l'account è un amministratore.


1

Puoi scrivere una semplice funzione vbscript che può verificare questo ... qualcosa come:

Function GoodPassword(strAdminUsername, strAdminPassword, strNTDomain)
    Const ADS_SECURE_AUTHENTICATION = 1

    On Error Resume Next
    Set objIADS = GetObject("WinNT:").OpenDSObject("WinNT://" & _
                        strNTDomain, strAdminUserame, _
                        strAdminPassword, _
                        ADS_SECURE_AUTHENTICATION)
    if err.number = 0 then
       GoodPassword = True
    Else
       GoodPassword = False
    End If
    On Error GoTO 0
End Function

fonti:

http://www.4guysfromrolla.com/webtech/061202-1.shtml

http://hsdn.net/category_3.html


Tieni presente che questo bloccherà un account dopo che "n" ha effettuato accessi non riusciti, "n" è la politica che hai impostato. Questo dovrebbe essere sempre vero per qualsiasi soluzione che usi.
sig

Inoltre, tale controllo potrebbe ignorare le credenziali degli utenti locali, a meno che non lo modifichi, specificando il nome utente due volte in questo modo OpenDSObject("WinNT://domain/userName,user","userName", "password", 1). Fonte .
Agostino,

1

Sul desktop di Windows è possibile utilizzare Active Directory Explorer da SysInternals / MS stesso:

https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer


Suppongo che stai suggerendo il prompt iniziale "Connetti ad Active Directory" come caso di test della password, che sembra fare il lavoro dai miei test. Una password errata provoca un prompt "nome utente o password errata" abbastanza rapidamente, quindi si tratterebbe di un test decente basato sulla GUI per elaborare un elenco mentale di possibili password.
JimNim,

0

È possibile utilizzare uno dei tanti strumenti noti per testare le password. Uno che ho visto è L0phtcrack . Forse c'è anche un modo per farlo offline con un dump del tuo database di autenticazione. In "l'altro mondo", usiamo "john the ripper" per cose come questa.


1
Non sto parlando di crackare le password o testarne la forza. Sto parlando di uno strumento che può dirmi se la password che inserisco per un determinato account è la password di quell'account.
TheCleaner,

@TheCleaner: Certo, puoi creare un elenco di parole con tutte le possibili password per un account specifico e utilizzare questo elenco per un set di account. o uno solo ... Testare con SMB o qualcosa del genere è una pessima idea. Riempie i log, rovina le sessioni sul file server, genera carico su controller di dominio e file server e così via.
PE

0

Usando il codice dall'alto, controlla tutti gli account di dominio per vedere se stanno usando una determinata password.

$usernames = Get-ADUser -Filter * | select -ExpandProperty SamAccountName

foreach ($username in $usernames) {
$password = "Password"
Add-Type -AssemblyName System.DirectoryServices.AccountManagement 
$ct = [System.DirectoryServices.AccountManagement.ContextType]::Machine, $env:computername 
$opt = [System.DirectoryServices.AccountManagement.ContextOptions]::SimpleBind 
$pc = New-Object System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ct 
$Result = $pc.ValidateCredentials("domain\$username", $password).ToString() 
If ($Result -eq "True") {echo "$username" >> C:\result.txt}
}

-1

Perché non utilizzare un servizio di rete con autenticazione (telnet, POP, IMAP, SMTP, quello che vuoi)? Dall'altro lato, se sei sulla macchina puoi provare su - userToTestda un account non privato. Se la password è OK, l'utente sarà autorizzato nell'homeToTest homedir se la shell consente la connessione

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.