Làm cách nào để 'chạy với tư cách' 'Dịch vụ Mạng'?


83

Tôi đang cố gắng chạy một quy trình với tư cách là một tài khoản khác. Tôi có lệnh:

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

nhưng sau đó điều này yêu cầu mật khẩu. Tuy nhiên, không có mật khẩu nào được đặt cho dịch vụ mạng.

Điều tôi đang cố gắng làm có khả thi không?

Câu trả lời:


124

Sử dụng PsExec.exe từ SysInternals, chạy từ dấu nhắc lệnh nâng cao.

ví dụ như điều này sẽ mở ra một dấu nhắc lệnh mới chạy dưới dạng DỊCH VỤ MẠNG:

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

điều này sẽ chạy nó dưới dạng HỆ THỐNG ĐỊA PHƯƠNG:

psexec -i -s cmd.exe 

Bạn có thể xác minh những điều này bằng cách chạy whoamitừ dấu nhắc cmd.

Xem thêm:


@stej - Không dành cho tôi. Hãy thử chạy nó từ một dấu nhắc lệnh nâng cao, tức là chạy dấu nhắc lệnh của bạn với tư cách Quản trị viên.
Rory

Không có ý tưởng, phiên bản psexec là 2.11. Tôi cũng đã thử nó trên winerver 2012 chạy dưới dạng dịch vụ đám mây Azure từ bảng điều khiển nâng cao, nhưng nó vẫn yêu cầu mật khẩu.
stej

Yêu cầu mật khẩu cho tôi quá.
Anderson Fortaleza,

1
Điều này dường như không hoạt động trên máy 64-bit. Một giải pháp thay thế là sử dụng devxexec , cách này hoạt động.
mellamokb

3
@Rory: Tôi nghĩ rằng tôi đã tìm ra nó. Đối với Dịch vụ Mạng (ít nhất là trong Vai trò Azure), có vẻ như bạn phải chỉ định đường dẫn chính xác đầy đủ đến cmd.exe. Đối với một số lý do nó không có một biến PATH mặc định hoặc một cái gì đó ...
mellamokb

15

Trong Bộ lập lịch tác vụ, hãy tạo một tác vụ để chạy ứng dụng dưới người dùng DỊCH VỤ MẠNG. Sau đó, bạn có thể chạy tác vụ từ dòng lệnh bằng cách sử dụng

schtasks / run / TN "tên tác vụ"

Trong đó taskname là tên nhiệm vụ của bạn.


làm thế nào để tạo tác vụ này bằng cách sử dụng nt Authority \ localervice?
Cobaia

Có thể chạy mmc.exe như localervice không?
Cobaia

6

Thông thường, bạn chỉ có thể mạo danh là tài khoản dịch vụ từ một dịch vụ Windows, như bài đăng này đề cập:

Bí quyết là chạy mã của bạn dưới dạng Hệ thống cục bộ và từ đó bạn có thể mạo danh tài khoản dịch vụ bằng cách sử dụng tên người dùng thích hợp mà không cần mật khẩu. Một cách để chạy mã của bạn với tư cách là tài khoản Hệ thống cục bộ là tạo một trình bao dòng lệnh bằng cách sử dụng kỹ thuật được hiển thị bên dưới (lấy từ bài đăng ban đầu này ) và thực thi hợp ngữ của bạn từ đó. Gọi System.Diagnostics.Debugger.Break()trong mã của bạn cho phép bạn gỡ lỗi.

Để tạo một trình bao dòng lệnh chạy trong tài khoản hệ thống cục bộ, hãy mở một cửa sổ dòng lệnh mới và nhập:

c:\sc create testsvc binpath= "cmd /K start" type= own type= interact

theo dõi bởi:

c:\sc start testsvc

Một cửa sổ lệnh mới đã được mở ra. Trong cửa sổ đó, hãy chạy application.exe của bạn - bạn sẽ thấy rằng bạn hiện đang chạy với tư cách là tài khoản người dùng Hệ thống tích hợp sẵn. Sau khi thử nghiệm xong, bạn có thể xóa dịch vụ thử nghiệm bạn đã tạo bằng cách nhập:

c:\sc delete testsvc

Nếu bạn cố gắng làm điều đó trong ngữ cảnh người dùng của riêng mình, thì những nỗ lực đó sẽ thất bại.


3

tôi đã thử rồi

PsExec -i -s cmd.exe

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

trên PsExec64-v2.2, cho win10-home-x64-10.0.14393 và win10-pro-x64-10.0.15063 để sử dụng bảng điều khiển bình thường, nó không thành công, hãy sử dụng bảng điều khiển nâng cao, nó hoạt động tốt


Cách tiếp cận này có thể được xác nhận bằng cách sử dụng lệnh "whoami", hoạt động cả trong cmd.exe và Powershell.exe.
Tore Aurstad

1

Tôi biết đây là một chuỗi cũ nhưng đó là kết quả hàng đầu cho sự cố này và tôi muốn có thể chạy lệnh bằng PowerShell mà không cần phải cài đặt bất kỳ công cụ bổ sung nào trên Windows Server của chúng tôi. Tôi đã nghĩ ra đoạn mã PowerShell sau để tạo một tác vụ đã lên lịch, chạy nó và sau đó xóa nó. Nó cũng được viết để cho phép bạn chạy lệnh trong các tài khoản người dùng khác nhau.

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"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.