Есть ли способ запустить команду PowerShell как NT AUTHORITY\SYSTEM
из скрипта?
Я знаю, что могу использовать psexec
и получите приглашение PowerShell, работающее как NT AUTHORITY\SYSTEM
, но мне было интересно, есть ли способ сделать это из «обычного» сценария.
Ты можешь использовать Invoke-TokenManipulation.ps1 сценарий:
Для этого сценария требуются права администратора. Он может перечислять доступные токены входа и использовать их для создания новых процессов. Это позволяет вам использовать учетные данные других пользователей по сети, создавая процесс с их токенами входа. Это будет работать даже с защитой Windows 8.1 LSASS.
Скопируйте и вставьте его или сохраните вместе со своим скриптом как Invoke-TokenManipulation.ps1
и используйте точечный источник для загрузки:
$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
. (Join-Path -Path $ScriptDir -ChildPath 'Invoke-TokenManipulation.ps1')
И тогда вы можете использовать Invoke-TokenManipulation
функция.
Пример:
# This command fails on my machine, even with admin rights
Get-ChildItem C:\Windows\CSC
# Makes the current PowerShell thread impersonate SYSTEM.
Invoke-TokenManipulation -ImpersonateUser -Username "nt authority\system"
# Now we can get contents of this folder
Get-ChildItem C:\Windows\CSC
# Stop impersonating an alternate users Token
Invoke-TokenManipulation -RevToSelf
# Check again
Get-ChildItem C:\Windows\CSC
https://github.com/mkellerman/Invoke-CommandAs
Сделал функцию Invoke-Command как SYSTEM или предоставил учетные данные для локального / удаленного компьютера. Возвращает объекты PSObjects, обрабатывает прерывания сети и решает любые проблемы с двойным прыжком.
Попробуйте, дайте мне знать, решит ли это ваши проблемы.