ええ、VMまたはリモートで何かを起動してパスワードを試すことができます...わかっています...しかし、確認または確認するのに十分なログインをシミュレートするツールまたはスクリプトはありますか?パスワードが正しいことを否定しますか?
シナリオ:
サーバーサービスアカウントのパスワードは「忘れられました」...しかし、それが何であるかはわかっています。資格情報を何かに渡し、「正しいパスワード」または「誤ったパスワード」でそれをキックバックさせたいのですが。
そのユーザーアカウントとパスワードが渡されたドライブマッピングスクリプトを考えて、ドライブが正常にマップされたかどうかを確認しましたが、正しく機能させるロジックで失われました...次のようなもの:
-スクリプトはmsgboxを介してユーザー名を要求します-scriptはmsgboxを介してパスワードを要求します-scriptはドライブが誰にでもアクセスできる共通の共有にドライブをマッピングしようとしますパスワード"
助けていただければ幸いです...これは、それをサポートするツールを必要としないまれな出来事だと思いますが...まあ...
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 [password]/USER:] username]
リモートコンピュータにその名前の共有がある場合。または、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デスクトップでは、SysInternals/MS自体でActive Directory Explorerを使用できます。
https://docs.Microsoft.com/en-us/sysinternals/downloads/adexplorer
上記のコードを使用して、すべてのドメインアカウントをチェックし、特定のパスワードを使用しているかどうかを確認します。
$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}
}
admin権限で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
はバックグラウンドでプログラムを開かないため、それを閉じる方法は気にしません。
PC-BからPC-Aでユーザーパスワードをテストする場合は、WinRMとPythonを使用してテストできます。
PC-AでWinRMをオンにし、PC-Bで_pip install pywinrm
_をオンにします。前のコマンドをwinrm.Session().run_ps()
に渡し、結果のstatus_codeを確認します。0は正しいが、1はfalseです。
参照
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
Ansibleからの基本的なWinRM構成: https://docs.ansible.com/ansible/latest/user_guide/windows_setup.html
世の中にある有名なツールの1つを使用してパスワードをテストすることができます。私が見たのは L0phtcrack です。認証データベースのダンプを使用してオフラインでこれを行う方法さえあるかもしれません。 「異世界」では「ジョン・ザ・リッパー」を使っています。