Narzędzie do testowania konta użytkownika i hasła (testuj logowanie)

46

Tak, mogę odpalić maszynę wirtualną lub zdalną w coś i wypróbować hasło ... Wiem ... ale czy istnieje narzędzie lub skrypt, który symuluje logowanie na tyle, aby potwierdzić lub zaprzeczyć, że hasło jest prawidłowe?

Scenariusz:

Hasło konta usługi serwera jest „zapomniane” ... ale myślimy, że wiemy, co to jest. Chciałbym przekazać dane uwierzytelniające do czegoś i poprosić o odreagowanie przy użyciu „poprawnego hasła” lub „niepoprawnego hasła”.

Myślałem nawet o skrypcie mapowania dysku z tym kontem użytkownika i hasłem, aby sprawdzić, czy dysk został zamapowany pomyślnie, czy nie, ale zgubił się w logice poprawnego działania ... coś takiego:

-Script pyta o nazwę użytkownika za pośrednictwem msgbox -script pyta o hasło za pomocą msgbox -script próbuje zmapować dysk do wspólnego udziału, do którego wszyscy mają dostęp -script unmaps dysk, jeśli się powiedzie -script zwraca wyskakujące okienko msgbox z informacją „poprawne hasło” lub „niepoprawne” Hasło"

Każda pomoc jest doceniana ... można by pomyśleć, że byłoby to rzadkie zjawisko, nie wymagające narzędzia do jej obsługi, ale ... cóż ...

TheCleaner
źródło
Jaki system operacyjny Jaka usługa?
Cristian Ciupitu,
@Cristian - Konta domeny Windows - po prostu sprawdź, czy hasło jest prawidłowe, czy nie
TheCleaner

Odpowiedzi:

77
runas /u:yourdomain\a_test_user notepad.exe

Narzędzie wyświetli monit o hasło, jeśli zostało podane prawidłowe hasło, notatnik uruchomi się, jeśli nie, wyświetli się błąd 1326: nazwa użytkownika lub hasło są niepoprawne

Roberto Dimas
źródło
1
Sprytny Roberto. +1
TheCleaner,
3
Prosty. Elegancki. Lubię to.
Lopsided
5
Niesamowite! To rozwiązanie ma dwie ważne zalety w stosunku do przyjętej odpowiedzi: 1) dostępne w systemie Windows XP + od razu po wyjęciu z pudełka, nie trzeba niczego pobierać, 2) związane z tym: ponieważ pochodzi z MS, nie wymaga ode mnie zaufania hasło do narzędzia zewnętrznego nieznanego pochodzenia.
akavel
2
Awaria serwera Administratorzy IT wiedzą o tym, ale jeśli jesteś użytkownikiem domowym, znajdując tę ​​odpowiedź podczas wyszukiwania w sieci (jest to najlepsza odpowiedź przy okazji - używa tylko rzeczy dostarczanych z systemem Windows): na komputerze domowym yourdomainpowyższa część jest twoją nazwa komputera . Znajdź to w Panelu sterowania> System. Jedną z wartości jest dosłownie „Komputer Nazwa:”. Na przykład, jeśli nazwa twojego komputera to „smith-laptop”, a nazwa użytkownika to „joe”, zrobiłbyś torunas /u:smith-laptop\joe notepad.exe
Daryn,
1
Po udanym uwierzytelnieniu może pojawić się błąd taki jak1385: Logon failure: the user has not been granted the requested logon type at this computer.
mwfearnley
11

Skrypt 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

Nawet Mien
źródło
new-object directoryservices.directoryentry "",$username,$password- zwracana wartość, referencje działają, wyjątek, nie działają. Zaczerpnięte z tej odpowiedzi, gdy jest zapakowane w schludną funkcję: serverfault.com/q/596602/57144
TessellatingHeckler
5

Możesz także użyć:

użycie netto \\ nazwa_komputera \ nazwa udziału [hasło] / USER:] nazwa użytkownika]

Jeśli na komputerze zdalnym jest udział o tej nazwie. Lub użyj, C$jeśli konto jest administratorem.

Greg
źródło
1

Możesz napisać łatwą funkcję vbscript, która może to zweryfikować ... coś takiego:

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

Źródła:

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

http://hsdn.net/category_3.html

mrTomahawk
źródło
Pamiętaj, że spowoduje to zablokowanie konta po nieudanej próbie zalogowania się na kwotę „n”, niezależnie od ustawionych zasad. Powinno to zawsze dotyczyć każdego używanego rozwiązania.
mrTomahawk
Ponadto sprawdzenie to może zignorować poświadczenia lokalnych użytkowników, chyba że poprawisz je, podając nazwę użytkownika dwa razy w ten sposób OpenDSObject("WinNT://domain/userName,user","userName", "password", 1). Źródło .
Agostino,
1

Na pulpicie Windows możesz używać Active Directory Explorer przez SysInternals / MS:

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

Tomasz Modelski
źródło
Zakładam, że sugerujesz początkowy monit „Połącz z Active Directory” jako przypadek testowy hasła - wydaje się, że wykonuje to zadanie z moich testów. Nieprawidłowe hasło powoduje, że monit „nazwa użytkownika lub hasło jest niepoprawne” dość szybko, więc byłby to przyzwoity test oparty na interfejsie GUI, umożliwiający przejrzenie listy możliwych haseł.
JimNim
0

Możesz użyć jednego z wielu znanych narzędzi do testowania haseł. Jednym z nich było L0phtcrack . Być może istnieje nawet sposób na zrobienie tego offline za pomocą zrzutu bazy danych uwierzytelniania. W „drugim świecie” używamy „John the Ripper” do takich rzeczy.

PEra
źródło
1
Nie mówię o łamaniu haseł ani testowaniu ich siły. Mówię o narzędziu, które może mi powiedzieć, czy hasło, które wpisuję dla określonego konta, jest hasłem tego konta.
TheCleaner
@TheCleaner: Jasne, możesz utworzyć listę słów ze wszystkimi możliwymi hasłami do określonego konta i użyć tej listy do zestawu kont. lub pojedynczy ... Testowanie z SMB lub czymś takim jest raczej złym pomysłem. Wypełnia dzienniki, przesyła sesje do serwera plików, generuje obciążenie kontrolerów domeny i serwerów plików i tak dalej.
PEra,
0

Używając powyższego kodu, sprawdź wszystkie konta domeny, aby sprawdzić, czy używają określonego hasła.

$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
źródło
-1

Dlaczego nie skorzystać z usługi sieciowej z uwierzytelnianiem (telnet, POP, IMAP, SMTP, co chcesz)? Z drugiej strony, jeśli jesteś na komputerze, możesz spróbować su - userToTestz konta nieprywatnego. Jeśli hasło jest OK, w homedir użytkownika userToTest będzie dozwolone, jeśli powłoka zezwoli na połączenie

Dom
źródło