Herramienta para probar una cuenta de usuario y contraseña (prueba de inicio de sesión)

46

Sí, puedo encender una VM o control remoto en algo y probar la contraseña ... Lo sé ... pero ¿hay alguna herramienta o script que simule un inicio de sesión lo suficiente para confirmar o negar que la contraseña es correcta?

Guión:

La contraseña de una cuenta de servicio del servidor está "olvidada" ... pero creemos que sabemos cuál es. Me gustaría pasar las credenciales a algo y hacer que se regrese con "contraseña correcta" o "contraseña incorrecta".

Incluso pensé en un script de mapeo de unidades con esa cuenta de usuario y contraseña que se pasa para ver si mapeó la unidad con éxito o no, pero se perdió en la lógica de hacer que funcione correctamente ... algo como:

-Script solicita el nombre de usuario a través de msgbox -script solicita la contraseña a través de msgbox -script intenta asignar una unidad a un recurso compartido común que todos tienen acceso a la unidad -script unmaps si se realiza correctamente -script devuelve un mensaje emergente de msgbox que indica "Contraseña correcta" o "Incorrecto" Contraseña"

Se agradece cualquier ayuda ... pensaría que esto sería una ocurrencia rara que no requiere una herramienta para soportarlo, pero ... bueno ...

El limpiador
fuente
Que sistema operativo ¿Que servicio?
Cristian Ciupitu
@Cristian - Cuentas de dominio de Windows - solo verifique si la contraseña es correcta o no
TheCleaner

Respuestas:

77
runas /u:yourdomain\a_test_user notepad.exe

La utilidad solicitará la contraseña; si se ha proporcionado la contraseña correcta, se abrirá el bloc de notas; de lo contrario, se producirá el error 1326: el nombre de usuario o la contraseña son incorrectos

Roberto Dimas
fuente
1
Roberto inteligente. +1
TheCleaner
3
Sencillo. Elegante. Me gusta.
Lopsided
55
¡Increíble! Esta solución tiene dos ventajas importantes sobre la respuesta aceptada: 1) disponible en Windows XP + fuera de la caja, no tiene que descargar nada, 2) relacionado con esto: como es de MS, no requiere que confíe en mi contraseña para alguna herramienta de terceros de procedencia desconocida.
akavel
2
Los administradores de TI de Serverfault lo saben, pero si usted es un usuario doméstico que encuentra esta respuesta en una búsqueda en la web (esta es la mejor respuesta, por cierto, usa solo cosas que vienen con Windows): en una computadora doméstica, la yourdomainparte anterior es su de ordenador nombre . Encuéntralo en Panel de control> Sistema. Uno de los valores es, literalmente, "Nombre del equipo:". Por ejemplo, si el nombre de su computadora es "smith-laptop" y su nombre de usuario es "joe", lo haríarunas /u:smith-laptop\joe notepad.exe
Daryn
1
En una autenticación exitosa, es posible que obtenga un error como1385: Logon failure: the user has not been granted the requested logon type at this computer.
mwfearnley
11

Script de 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

Incluso Mien
fuente
new-object directoryservices.directoryentry "",$username,$password- valor de retorno, credenciales funcionan, excepción, no funcionan. Tomado de esta respuesta donde está envuelto en una función ordenada: serverfault.com/q/596602/57144
TessellatingHeckler
5

También puedes usar:

uso neto \\ nombre de equipo \ nombre de recurso compartido [contraseña] / USUARIO:] nombre de usuario]

Si hay un recurso compartido con ese nombre en la computadora remota. O use C$si la cuenta es un administrador.

Greg
fuente
1

Puede escribir una función vbscript fácil que pueda verificar esto ... 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

Fuentes:

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

http://hsdn.net/category_3.html

mrTomahawk
fuente
Tenga en cuenta que esto bloqueará una cuenta después de 'n' cantidad de inicios de sesión fallidos, 'n' es cualquier política que haya establecido. Esto siempre debe ser cierto para cualquier solución que use.
mrTomahawk 01 de
Además, esa verificación podría ignorar las credenciales de los usuarios locales, a menos que la modifiques, especificando el nombre de usuario dos veces de esta manera OpenDSObject("WinNT://domain/userName,user","userName", "password", 1). Fuente .
Agostino
1

En el escritorio de Windows, puede usar Active Directory Explorer de SysInternals / MS:

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

Tomasz Modelski
fuente
Supongo que está sugiriendo el mensaje inicial "Conectar a Active Directory" como el caso de prueba de contraseña, que parece hacer el trabajo de mi prueba. La contraseña incorrecta da como resultado una solicitud de "nombre de usuario o contraseña incorrecta" con bastante rapidez, por lo que esta sería una prueba decente basada en GUI para trabajar a través de una lista mental de posibles contraseñas.
JimNim
0

Puede usar una de las muchas herramientas conocidas para probar las contraseñas. Uno que vi es L0phtcrack . Tal vez incluso haya una manera de hacer esto sin conexión con un volcado de su base de datos de autenticación. En "el otro mundo", usamos "John the Ripper" para cosas como esta.

PEra
fuente
1
No estoy hablando de descifrar contraseñas o probar su fortaleza. Estoy hablando de una herramienta que me puede decir si la contraseña que ingreso para una cuenta en particular es la contraseña de esa cuenta.
TheCleaner
@TheCleaner: Claro, puede crear una lista de palabras con todas las contraseñas posibles para una cuenta específica y usar esta lista para un conjunto de cuentas. o uno solo ... Probar con SMB o algo así es una idea bastante mala. Llena sus registros, desordena las sesiones en el servidor de archivos, genera carga en DC y servidores de archivos, etc.
PEra
0

Usando el código de arriba, verifique todas las cuentas de dominio para ver si están usando una contraseña determinada.

$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}
}
Operdale
fuente
-1

¿Por qué no utilizar un servicio de red con autenticación (telnet, POP, IMAP, SMTP, lo que desea)? Por otro lado, si está en la máquina, puede probar su - userToTestdesde una cuenta no privada. Si la contraseña es correcta, se le permitirá ingresar al directorio de usuario de prueba si el shell permite la conexión

Dom
fuente