Ferramenta para testar uma conta de usuário e senha (teste de login)


46

Sim, posso iniciar uma VM ou controle remoto em algo e tentar a senha ... eu sei ... mas existe uma ferramenta ou script que simule um login apenas o suficiente para confirmar ou negar que a senha esteja correta?

Cenário:

A senha de uma conta de serviço de servidor é "esquecida" ... mas achamos que sabemos o que é. Gostaria de passar as credenciais para algo e tê-lo retrocedido 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 passadas para ver se ele mapeou a unidade com sucesso ou não, mas se perdeu na lógica de fazê-la funcionar corretamente ... algo como:

-Script pede nome de usuário via msgbox -script pede senha por msgbox -script tenta mapear uma unidade para um compartilhamento comum que todos tenham acesso à unidade -script unmaps se bem-sucedida -script retorna pop-up msgbox informando "Senha correta" ou então "Incorreta Senha"

Qualquer ajuda é apreciada ... você pensaria que isso seria uma ocorrência rara, não exigindo uma ferramenta para apoiá-lo, mas ... bem ...


Qual SO? Que serviço?
Cristian Ciupitu 23/09/09

@Cristian - contas de domínio do Windows - basta verificar se a senha está correta ou não
TheCleaner

Respostas:


77
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, ocorrerá o erro 1326: o nome de usuário ou a senha estão incorretos.


1
Roberto inteligente. +1
TheCleaner 10/10

3
Simples. Elegante. Eu gosto disso.
Lopsided

5
Impressionante! Esta solução tem duas vantagens importantes sobre a resposta aceita: 1) disponível no Windows XP + imediatamente, não precisa baixar nada; 2) relacionado a isso: como é da MS, não exige que eu confie no meu senha para alguma ferramenta de origem desconhecida.
Akavelvel 19/05

2
Os administradores de TI com falha no servidor sabem disso, mas se você é um usuário doméstico encontrando essa resposta em uma pesquisa na web (esta é a melhor resposta, use apenas o que acompanha o Windows): em um computador doméstico, a yourdomainparte acima é sua do computador nome . Encontre isso em Painel de Controle> Sistema. Um dos valores é literalmente "Nome do Computador:". Por exemplo, se o nome do estiver computador é "smith-laptop" e seu nome de usuário é "joe", você fariarunas /u:smith-laptop\joe notepad.exe
Daryn

1
Em uma autenticação bem-sucedida, você pode apenas receber um erro como1385: Logon failure: the user has not been granted the requested logon type at this computer.
mwfearnley

11

Script do 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- valor de retorno, credenciais funcionam, exceção, elas não funcionam. Tomado de esta resposta onde ele está envolto em uma função puro: serverfault.com/q/596602/57144
TessellatingHeckler

5

Você também pode usar:

net use \\ nome_do_computador \ nome_do_arquivo [senha] / USUÁRIO:] nome_de_usuário]

Se houver um compartilhamento com esse nome no computador remoto. Ou use C$se a conta for um administrador.


1

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:

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

http://hsdn.net/category_3.html


Observe que isso bloqueará uma conta após a falha de 'n' na quantidade de logins, sendo n a política que você definiu. Isso sempre deve ser verdade para qualquer solução que você usar.
MrTomahawk 01/10/09

Além disso, essa verificação pode ignorar as credenciais dos usuários locais, a menos que você a ajuste, especificando o nome de usuário duas vezes assim OpenDSObject("WinNT://domain/userName,user","userName", "password", 1). Fonte .
Agostino

1

Na área de trabalho do Windows, você pode usar o Active Directory Explorer da própria SysInternals / MS:

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


Suponho que você esteja sugerindo o prompt inicial "Conectar-se ao Active Directory" como o caso de teste de senha - que parece fazer o trabalho dos meus testes. A senha incorreta resulta em um prompt "nome de usuário ou senha incorreta" rapidamente, portanto, esse seria um teste decente baseado em GUI para trabalhar com uma lista mental de possíveis senhas.
JimNim

0

Você pode usar uma das muitas ferramentas conhecidas disponíveis para testar senhas. Um que vi foi o L0phtcrack . Talvez haja até uma maneira de fazer isso offline com um despejo do seu banco de dados de autenticação. No "outro mundo", usamos "john the ripper" para coisas como essa.


1
Não estou falando de quebrar senhas ou testar sua força. Estou falando de uma ferramenta que pode me dizer se a senha digitada para uma conta específica é a senha dessa conta.
TheCleaner 22/09/09

@ TheCleaner: Claro, você pode criar uma lista de palavras com todas as senhas possíveis para uma conta específica e usar essa lista para um conjunto de contas. ou um único ... Testar com SMB ou algo assim é uma péssima idéia. Ele preenche seus logs, bagunça as sessões com o servidor de arquivos, gera carga nos controladores de domínio e servidores de arquivos e assim por diante.
Pera

0

Usando o código acima, verifique todas as contas de domínio para ver se 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}
}

-1

Por que não usar um serviço de rede com autenticação (telnet, POP, IMAP, SMTP, o que você deseja)? Por outro lado, se você estiver na máquina, poderá tentar a su - userToTestpartir de uma conta não privada. Se a senha estiver correta, você poderá acessar o homedir userToTest se o shell permitir a conexão

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.