Як мені запустити як "Мережева служба"?


83

Я намагаюся запустити процес як інший обліковий запис. У мене є команда:

runas "/user:WIN-CLR8YU96CL5\network service" "abwsx1.exe"

але потім запитує пароль. Однак пароль мережі не встановлений.

Чи можливо те, що я намагаюся зробити?

Відповіді:


124

Використовуйте PsExec.exe від SysInternals, що працює з підвищеного командного рядка.

наприклад, це відкриє новий командний рядок, що працює як СЕТЕВА СЛУЖБА:

psexec -i -u "nt authority\network service" cmd.exe 

це запустить його як ЛОКАЛЬНУ СИСТЕМУ:

psexec -i -s cmd.exe 

Ви можете перевірити їх, запустивши whoamiз підказки cmd.

Дивіться також:


@stej - Не для мене. Спробуйте запустити його з підвищеного командного рядка, тобто запустіть свій командний рядок як Адміністратор.
Рорі

Не знаю, версія psexec - 2.11. Я також спробував його на winserver 2012, який працює як хмарна служба Azure з підвищеної консолі, але він все ще запитує пароль.
stej

Запитує пароль і для мене.
Андерсон Форталеза

1
Здається, це не працює на 64-розрядних машинах. Обхідним шляхом є використання devxexec замість цього, який працює.
mellamokb

3
@Rory: Я думаю, я це зрозумів. Для мережевої служби (принаймні в ролі Azure), схоже, потрібно вказати повний точний шлях до cmd.exe. Чомусь у нього немає змінної PATH за замовчуванням чи чогось іншого ...
mellamokb

15

У Планувальнику завдань створіть завдання для запуску програми під користувачем NETWORK SERVICE. Потім ви можете запустити завдання з командного рядка за допомогою

schtasks / run / TN "ім'я завдання"

Де TaskName це ім'я вашого завдання.


як створити це завдання за допомогою nt Authority \ localservice?
Cobaia

Чи можна запустити mmc.exe як локальну службу?
Cobaia

6

Ви можете видавати себе за обліковий запис служби лише зі служби 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

Якщо ви намагаєтесь зробити це у своєму власному контексті користувача, то такі спроби не повинні пройти.


4

Я тестував

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 використовувати нормальну консоль не вдалося, використовуйте підвищену консоль, вона працює нормально


Цей підхід можна підтвердити за допомогою команди "whoami", яка працює як в cmd.exe, так і в Powershell.exe.
Торе Аурстад

1

Я знаю, що це стара тема, але це найкращий результат для цієї проблеми, і я хотів мати можливість запускати команду за допомогою PowerShell без необхідності встановлювати будь-які додаткові інструменти на нашому Windows Server. Я придумав такий сценарій 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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.