別のアカウントとしてプロセスを実行しようとしています。私はコマンドを持っています:
runas "/user:WIN-CLR8YU96CL5\network service" "abwsx1.exe"
しかし、これはパスワードを要求します。ただし、ネットワークサービスにはパスワードが設定されていません。
私がやろうとしていることは可能ですか?
回答:
使用PSEXEC.EXE昇格したコマンドプロンプトから実行しているSysinternalsの、。
たとえば、これにより、ネットワークサービスとして実行されている新しいコマンドプロンプトが開きます。
psexec -i -u "nt authority\network service" cmd.exe
これにより、ローカルシステムとして実行されます。
psexec -i -s cmd.exe
これらwhoami
は、cmdプロンプトから実行することで確認できます。
参照:
この投稿で言及されているように、通常はWindowsサービスからのサービスアカウントとしてのみ偽装できます。
秘訣は、コードをローカルシステムとして実行することです。そこから、パスワードなしで適切なユーザー名を使用して、サービスアカウントを偽装できます。ローカルシステムアカウントとしてコードを実行する1つの方法は、以下に示す手法(この元の投稿から取得)を使用してコマンドラインシェルを作成し、そこからアセンブリを実行することです。
System.Diagnostics.Debugger.Break()
コードを呼び出すと、デバッグできます。ローカルシステムアカウントで実行されるコマンドラインシェルを作成するには、新しいコマンドラインウィンドウを開いて次のように入力します。
c:\sc create testsvc binpath= "cmd /K start" type= own type= interact
に続く:
c:\sc start testsvc
新しいコマンドウィンドウが開いているはずです。そのウィンドウで、application.exeを実行します。これで、組み込みのシステムユーザーアカウントとして実行していることがわかります。テストが終了したら、次のように入力して、作成したテストサービスを削除できます。
c:\sc delete testsvc
独自のユーザーコンテキストでこれを実行しようとすると、そのような試行は失敗するはずです。
私はテストしました
PsExec -i -s cmd.exe
そして
PsExec -i -u "nt authority\network service" cmd.exe
PsExec64-v2.2では、win10-home-x64-10.0.14393およびwin10-pro-x64-10.0.15063で通常のコンソールを使用するには失敗し、昇格したコンソールを使用すると正常に動作します
これが古いスレッドであることはわかっていますが、これがこの問題の最大の結果であり、WindowsServerに追加のツールをインストールせずにPowerShellを使用してコマンドを実行できるようにしたかったのです。スケジュールされたタスクを作成して実行し、削除する次のPowerShellスクリプトを思いつきました。また、さまざまなユーザーアカウントでコマンドを実行できるように作成されています。
function InstallDotNetCoreGlobalTool($PackageId, $Action = "install", $User = "NT AUTHORITY\NETWORK SERVICE", $Password = "")
{
$TaskName = "AzureDotNetCoreGlobalToolConfiguration"
$Command = "dotnet.exe"
$Arguments = "tool $Action -g " + $PackageId
$TaskAction = New-ScheduledTaskAction -Execute $Command -Argument $Arguments
Write-Host "Setting up scheduled task to run" $Command $Arguments
Register-ScheduledTask -TaskName $TaskName -User $User -Action $TaskAction
Start-ScheduledTask -TaskName $TaskName
Write-Host ""
Write-Host "Waiting on scheduled task to complete."
while ((Get-ScheduledTask -TaskName $TaskName).State -ne 'Ready')
{
# keep waiting
}
Write-Host ""
If((Get-ScheduledTask $TaskName | Get-ScheduledTaskInfo).LastTaskResult -eq 0)
{
Write-Host $PackageId $Action "completed successfully"
}
else
{
If ($Action -eq "install")
{
Write-Host $PackageId "failed to $Action. Ensure the proper dependencies have been installed or that it isn't already installed."
}
Else {
Write-Host $PackageId "failed to $Action. It may not currently be installed."
}
}
Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false
}
InstallDotNetCoreGlobalTool "Amazon.Lambda.Tools" "uninstall"