web-dev-qa-db-fra.com

Outil pour tester un compte utilisateur et un mot de passe (test de connexion)

Oui, je peux lancer un VM ou à distance dans quelque chose et essayer le mot de passe ... Je sais ... mais y a-t-il un outil ou un script qui simulera une connexion juste assez pour confirmer ou nier que le mot de passe est correct?

Scénario:

Le mot de passe d'un compte de service serveur est "oublié" ... mais nous pensons savoir de quoi il s'agit. Je voudrais transmettre les informations d'identification à quelque chose et le récupérer avec "mot de passe correct" ou "mot de passe incorrect".

J'ai même pensé à un script de mappage de lecteur avec ce compte d'utilisateur et ce mot de passe transmis pour voir s'il a mappé le lecteur avec succès ou non, mais s'est perdu dans la logique de le faire fonctionner correctement ... quelque chose comme:

-Script demande un nom d'utilisateur via msgbox -script demande un mot de passe via msgbox -script essaie de mapper un lecteur à un partage commun auquel tout le monde a accès à -script démappe le lecteur en cas de succès -script renvoie une msgbox popup indiquant "Correct Password" ou bien "Incorrect" Mot de passe"

Toute aide est appréciée ... vous penseriez que ce serait un événement rare ne nécessitant pas d'outil pour le prendre en charge, mais ... eh bien ...

48
TheCleaner
runas /u:yourdomain\a_test_user notepad.exe

L'utilitaire vous demandera le mot de passe, si le bon mot de passe a été fourni, le bloc-notes se lancera, sinon il produira l'erreur 1326: le nom d'utilisateur ou le mot de passe est incorrect

78
Roberto Dimas

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

11
Even Mien

Vous pouvez aussi utiliser:

Net Use \\ computername\sharename [mot de passe]/USER:] username]

S'il existe un partage portant ce nom sur l'ordinateur distant. Ou utiliser C$ si le compte est administrateur.

5
Greg

Vous pouvez écrire une fonction vbscript facile qui peut vérifier cela ... quelque chose comme:

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

Sources:

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

http://hsdn.net/category_3.html

1
mrTomahawk

Sur le bureau Windows, vous pouvez utiliser Active Directory Explorer par SysInternals/MS lui-même:

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

1
Tomasz Modelski

À l'aide du code ci-dessus, vérifiez tous les comptes de domaine pour voir s'ils utilisent un certain mot de passe.

$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}
}
0
Operdale

Ouvrez PowerShell avec privilège administrateur et entrez les commandes ci-dessous:

changez la valeur de your_password et your_username

$PlainPassword="your_password"
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText-Force
$UserName = "your_username"
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $UserName,$SecurePassword
Start-Process whoami -Credential $Credentials

En utilisant ceci, nous créons une information d'identification avec username et password, et passons cette information d'identification à Start-Process. Parce que whoami n'ouvre pas un programme en arrière-plan nous ne nous soucions donc pas de la fermeture.

Si vous essayez de tester les mots de passe utilisateur sur PC-A depuis PC-B, vous pouvez le faire avec WinRM et Python.

Activez WinRM sur PC-A et pip install pywinrm Sur PC-B. Passez la commande précédente à winrm.Session().run_ps(), vérifiez le code d'état du résultat, 0 est correct tandis que 1 est faux.

Référence

Documentation du processus de démarrage: https://docs.Microsoft.com/en-us/powershell/module/Microsoft.powershell.management/start-process?view=powershell-6

Créer des informations d'identification: http://duffney.io/AddCredentialsToPowerShellFunctions

Comment activer WinRM: https://docs.Microsoft.com/en-us/windows/win32/winrm/installation-and-configuration-for-windows-remote-management

Configuration rapide de WinRM: https://docs.Microsoft.com/en-us/powershell/module/Microsoft.wsman.management/set-wsmanquickconfig?view=powershell-6

Configuration WinRM de base d'Ansible: https://docs.ansible.com/ansible/latest/user_guide/windows_setup.html

0
milkice

Vous pouvez utiliser l'un des nombreux outils bien connus pour tester les mots de passe. Celui que j'ai vu est L0phtcrack . Il existe peut-être même un moyen de le faire hors ligne avec un vidage de votre base de données d'authentification. Dans "l'autre monde", nous utilisons "john the ripper" pour des trucs comme ça.

0
PEra