다른 계정으로 프로세스를 실행하려고합니다. 나는 명령이있다 :
runas "/user:WIN-CLR8YU96CL5\network service" "abwsx1.exe"
그러나 이것은 암호를 요구합니다. 그러나 네트워크 서비스에 대해 설정된 암호가 없습니다.
내가하려는 것이 가능합니까?
답변:
관리자 권한 명령 프롬프트에서 실행되는 SysInternals의 PsExec.exe 를 사용 합니다.
예를 들어 NETWORK SERVICE로 실행되는 새 명령 프롬프트가 열립니다.
psexec -i -u "nt authority\network service" cmd.exe
이것은 로컬 시스템으로 실행됩니다.
psexec -i -s cmd.exe
whoami
cmd 프롬프트에서 실행 하여이를 확인할 수 있습니다 .
또한보십시오:
이 게시물에서 언급 한 것처럼 일반적으로 Windows 서비스에서 서비스 계정으로 만 가장 할 수 있습니다 .
트릭은 코드를 로컬 시스템으로 실행하는 것이며 여기에서 암호없이 적절한 사용자 이름을 사용하여 서비스 계정을 가장 할 수 있습니다. 로컬 시스템 계정으로 코드를 실행하는 한 가지 방법은 아래 표시된 기술 (이 원래 게시물 에서 가져옴 ) 을 사용하여 명령 줄 셸을 만들고 거기에서 어셈블리를 실행하는 것입니다.
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의 경우 일반 콘솔을 사용하지 못했습니다. 승격 된 콘솔을 사용하면 정상적으로 작동합니다.
이것이 오래된 스레드라는 것을 알고 있지만이 문제의 가장 큰 결과이며 Windows Server에 추가 도구를 설치하지 않고도 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"