为什么我可以移动服务的可执行文件但不能删除它?

为什么我可以移动服务的可执行文件但不能删除它?

我正在学习 Windows 上的权限提升和危险的服务配置。

事情是这样的:

  • 一项服务具有全世界可写的可执行文件 myservice.exe(坏主意)。
  • 该服务正在以系统权限运行
  • 当您尝试在 myservice.exe 运行时复制/替换它时,这将不起作用。(权限被拒绝)
  • 但是,当您第一次移动可执行文件,然后将第二个(邪恶的)myservice.exe 复制到文件夹中时,Windows 不会抱怨
  • 下次重新启动服务时,将执行邪恶的 service.exe

我的问题:哪个进程保留了 myservice.exe 的句柄以防止我删除它?同一个进程如何允许我移动文件并继续运行?

我尝试使用 Sysinternals Suite 中的 procmon.exe 自己回答这些问题,但到目前为止一无所获。

答案1

我没有确切的答案,但我确实注意到,如果移动正在运行的服务,则无法覆盖移动的文件。

例子:

覆盖“Serviio”服务使用的进程:

    cd "C:\Program Files\Serviio\bin\"
    move "ServiioService.exe" "ServiioService_original.exe"

尝试覆盖新的文件名:

copy "K:\18.2.4.1_win_add_user.exe" "C:\Program Files\Serviio\bin\ServiioService_original.
exe"
copy : The process cannot access the file 'C:\Program Files\Serviio\bin\ServiioService_original.exe' because it is
being used by another process.
At line:1 char:1
+ copy "K:\18.2.4.1_win_add_user.exe" "C:\Program Files\Serviio\bin\Ser ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Copy-Item], IOException
    + FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Commands.CopyItemCommand

相关内容