runas /u:yourdomain\a_test_user notepad.exe
O utilitário solicitará a senha, se a senha correta tiver sido fornecida, o bloco de notas será iniciado; caso contrário, produzirá o erro 1326: o nome de usuário ou senha está incorreto
Sim, posso ativar uma VM ou controle remoto em algo e experimentar a senha ... Eu sei ... mas existe uma ferramenta ou script que simulará um login apenas o suficiente para confirmar ou negar que a senha está correta ?
Cenário:
A senha de uma conta de serviço de servidor é "esquecida" ... mas achamos que sabemos o que é. Eu gostaria de passar as credenciais para algo e tê-lo chute de volta com "senha correta" ou "senha incorreta".
Eu até pensei em um script de mapeamento de unidade com essa conta de usuário e senha sendo passada para ver se ele mapeou a unidade com êxito ou não, mas se perdeu na lógica de fazer funcionar corretamente ... algo como:
-Script solicita nome de usuário via msgbox -script pede senha via msgbox -script tenta mapear uma unidade para um compartilhamento comum ao qual todos tenham acesso -script unmaps drive se bem sucedido -script retorna popup msgbox indicando "Senha Correta" ou "Senha Incorreta"
Qualquer ajuda é apreciada ... você pensaria que esta seria uma ocorrência rara, não exigindo uma ferramenta para apoiá-la, mas ... bem ....
Roteiro 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
}
Você também pode usar:
net use \computername\sharename [password] /USER:]username]
Se houver um compartilhamento com esse nome no computador remoto. Ou use C$ se a conta for um administrador.
Você pode escrever uma função vbscript fácil que pode verificar isso ... algo como:
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
Fontes:
Na área de trabalho do Windows, você pode usar o Active Directory Explorer pelo próprio SysInternals / MS:
Você pode usar uma das muitas ferramentas conhecidas para testar senhas. Uma que eu vi é L0phtcrack . Talvez haja até mesmo uma maneira de fazer isso offline com um despejo de seu banco de dados de autenticação. No "outro mundo", usamos "john the ripper" para coisas assim.
Usando o código acima, verifique todas as contas de domínio para ver se elas estão usando uma determinada senha.
$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}
}
Por que não usar um serviço de rede com autenticação (telnet, POP, IMAP, SMTP, o que você quer)?
Do outro lado, se você estiver na máquina, você pode tentar su - userToTest de uma conta não privada. Se a senha estiver OK, você será permitido no homedir userToTest se o shell permitir a conexão