Да, я могу запустить виртуальную машину или удаленное устройство и попробовать пароль ... Я знаю ... но есть ли инструмент или сценарий, который имитирует вход в систему, достаточный для подтверждения или опровержения правильности пароля?
Сценарий:
Пароль учетной записи серверной службы «забыт» ... но мы думаем, что знаем, что это такое. Я хотел бы передать кому-то учетные данные и получить ответ с «правильным паролем» или «неправильным паролем».
Я даже подумал о скрипте сопоставления дисков с этой учетной записью и паролем, передаваемым, чтобы увидеть, успешно ли он сопоставил диск, но потерялся в логике его правильной работы ... что-то вроде:
-Script запрашивает имя пользователя через msgbox -script запрашивает пароль через msgbox -script пытается сопоставить диск с общим ресурсом, к которому у всех есть доступ -script отключает отображение диска в случае успеха -script возвращает всплывающее окно msgbox с сообщением «Правильный пароль» или «Неверно» Пароль"
Любая помощь приветствуется ... можно подумать, что это редкое явление, для которого не требуется инструмент для поддержки, но ... ну ....
runas /u:yourdomain\a_test_user notepad.exe
Утилита запросит пароль, если введен правильный пароль, запустится блокнот, в противном случае выдаст ошибку 1326: неверное имя пользователя или пароль.
Скрипт 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
Вы также можете использовать:
net use \\ computername \ sharename [пароль] / USER:] имя пользователя]
Если на удаленном компьютере есть общий ресурс с таким именем. Или используйте C$
если учетная запись является администратором.
Вы можете написать простую функцию vbscript, которая может это проверить ... что-то вроде:
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
Источники:
На рабочем столе Windows вы можете использовать Active Directory Explorer от самого SysInternals / MS:
https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer
Вы можете использовать один из многих хорошо известных инструментов для проверки паролей. Я видел L0phtcrack. Возможно, есть даже способ сделать это в автономном режиме с помощью дампа вашей базы данных аутентификации. В «другом мире» мы используем «Джон-потрошитель» для подобных вещей.
Используя приведенный выше код, проверьте все учетные записи домена, чтобы узнать, используют ли они определенный пароль.
$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}
}
Откройте PowerShell с помощью права администратора и введите следующие команды:
изменить стоимость
your_password
и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
Используя это, мы создаем учетные данные с username
и password
, и передайте эти учетные данные Start-Process
.Так как whoami
не открывает программу в фоновом режиме, поэтому нам не важно, как ее закрыть.
Если вы пытаетесь проверить пароли пользователей на ПК-А с ПК-В, вы можете сделать это с помощью WinRM и Python.
Включите WinRM на ПК-A и pip install pywinrm
на ПК-Б. Передайте предыдущую команду в winrm.Session().run_ps()
проверьте результат status_code, 0 - правильный, а 1 - ложный.
Ссылка
Документация Start-Process: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6
Создать учетные данные: http://duffney.io/AddCredentialsToPowerShellFunctions
Как включить WinRM: https://docs.microsoft.com/en-us/windows/win32/winrm/installation-and-configuration-for-windows-remote-management
Быстрая настройка WinRM: https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/set-wsmanquickconfig?view=powershell-6
Базовая конфигурация WinRM от Ansible: https://docs.ansible.com/ansible/latest/user_guide/windows_setup.html
Почему бы не использовать сетевой сервис с аутентификацией (telnet, POP, IMAP, SMTP, что хотите)? С другой стороны, если вы на машине, вы можете попробовать su - userToTest
с непривилегированного аккаунта. Если пароль в порядке, вам будет разрешено в userToTest homedir, если оболочка разрешит соединение