Como você executa o CMD.exe na conta do sistema local?

144

No momento, estou executando o Vista e gostaria de concluir manualmente as mesmas operações do meu Serviço Windows. Como o Serviço Windows está sendo executado na Conta do Sistema Local, eu gostaria de imitar esse mesmo comportamento. Basicamente, eu gostaria de executar o CMD.EXE na conta do sistema local.

Encontrei informações on-line que sugerem o lançamento do CMD.exe usando o comando AT Task Scheduler do DOS, mas recebi um aviso do Vista de que "devido a aprimoramentos de segurança, essa tarefa será executada no momento, exceto por interatividade". Aqui está um exemplo de comando:

AT 12:00 /interactive cmd.exe

Outra solução sugeriu a criação de um serviço secundário do Windows por meio do Service Control (sc.exe), que simplesmente lança o CMD.exe.

C:\sc create RunCMDAsLSA binpath= "cmd" type=own type=interact
C:\sc start RunCMDAsLSA

Nesse caso, o serviço falha ao iniciar e resulta na seguinte mensagem de erro:

FAILED 1053: The service did not respond to the start or control request in a timely fashion.

A terceira sugestão foi iniciar o CMD.exe por meio de uma tarefa agendada. Embora você possa executar tarefas agendadas em várias contas, não acredito que a conta do sistema local seja uma delas.

Tentei usar o Runas também, mas acho que estou com a mesma restrição encontrada na execução de uma tarefa agendada.

Até agora, cada uma das minhas tentativas terminou em fracasso. Alguma sugestão?

Ben Griswold
fonte

Respostas:

221

Embora eu não tenha testado pessoalmente, tenho boas razões para acreditar que a solução AT COMMAND acima mencionada funcionará para XP, 2000 e Server 2003. Nos testes de Bryant e Bryant, identificamos que a mesma abordagem não funciona com o Vista ou Windows Server 2008 - provavelmente devido à segurança adicionada e à opção / Interactive sendo preterida.

No entanto, deparei com este artigo que demonstra o uso do PSTools da SysInternals (que foi adquirida pela Microsoft em julho de 2006.) Lancei a linha de comando da seguinte maneira e, de repente, estava executando a Conta de administrador local como mágica:

psexec -i -s cmd.exe

PSTools funciona bem. É um conjunto de ferramentas leve e bem documentado que fornece uma solução apropriada para o meu problema.

Muito obrigado a quem ofereceu ajuda.

Ben Griswold
fonte
11
Eu gosto mais disso com o -dadded, para que eu possa continuar usando o console do qual o iniciei.
SamB 02/07/10
1
Acabei de experimentar o Vista x64 e obtive "O serviço PsExec em execução ... é uma versão incompatível". Tentei direto de \\ live.sysinternals.com \ tools \ psexec e o último binário. Parece que não existe a versão x64
ZXX 15/08
52
  1. Faça o download do psexec.exe no Sysinternals .
  2. Coloque-o na sua unidade C: \.
  3. Logon como um usuário padrão ou admin e use o seguinte comando: cd \. Isso coloca você no diretório raiz da sua unidade, onde o psexec está localizado.
  4. Use o seguinte comando: psexec -i -s cmd.exeonde -i é para interativo e -s é para conta do sistema.
  5. Quando o comando for concluído, um shell cmd será iniciado. Tipo whoami; vai dizer 'sistema "
  6. Abra o gerenciador de tarefas. Mate o explorer.exe.
  7. De um tipo de shell de comando elevado start explorer.exe.
  8. Quando o explorer é iniciado, observe o nome "sistema" na barra do menu Iniciar. Agora você pode excluir alguns arquivos no diretório system32 que, como administrador, não é possível excluir ou como administrador, você deve tentar alterar as permissões para excluir esses arquivos.

Os usuários que tentam renomear ou excluir os arquivos do sistema em qualquer diretório protegido do Windows devem saber que todos os arquivos do Windows são protegidos pelo DACLS ao renomear um arquivo. É necessário alterar o proprietário e substituir o TrustedInstaller que possui o arquivo e tornar qualquer usuário como um usuário que pertence ao grupo de administradores como proprietário do arquivo e, em seguida, tente renomeá-lo após alterar a permissão, ele funcionará e enquanto você estiver executando o Windows Explorer com privilégios de kernel, você ficará um pouco limitado em termos de acesso à rede por razões de segurança e ainda é um tópico de pesquisa para eu ter acesso de volta

Raven
fonte
Eu uso esse truque, para iniciar o explorer como usuário elevado com frequência. Especialmente, quando conectar através de VNC a um PC, onde é necessário definir configurações de rede, por exemplo. +1 de mim
TPAKTOPA 17/02
Este truque parece inválido agora. Meu sistema operacional é o Windows 7 SP1. Eu cheguei a ver o "sistema" na barra do menu Iniciar. Mas ainda assim, ao renomear um arquivo na pasta system32, diz permissão negada. A pasta system32 agora pertence ao TrustedInstaller e até a conta do sistema local possui apenas permissões especiais.
Shaohua Li
se você tentar renomear ou excluir qualquer arquivo que esteja em qualquer diretório protegido do Windows que seja de propriedade do TrustedInstaller, o usuário atual terá que possuir o arquivo alterando a permissão e poderá renomeá-lo ou excluí-lo. Isso geralmente é usado para excluir slmgr. exe e outros arquivos de sistema para obter acesso ilimitado a versão de teste do Windows sem pagar por isso
corvo
10

Encontrei uma resposta aqui que parece resolver o problema adicionando / k start ao parâmetro binPath. Então isso lhe daria:

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

No entanto, Ben disse que isso não funcionou para ele e quando tentei no Windows Server 2008, ele criou o processo cmd.exe no sistema local, mas não foi interativo (não consegui ver a janela).

Eu não acho que exista uma maneira fácil de fazer o que você pede, mas estou me perguntando por que você está fazendo isso? Você está apenas tentando ver o que está acontecendo quando você executa seu serviço? Parece que você pode simplesmente usar o log para determinar o que está acontecendo, em vez de ter que executar o exe como sistema local ...

Bryant
fonte
Oi Bryant. Esta solução é essencialmente descrita na pergunta. Isso realmente funciona para você? Isso está resultando em um fracasso para mim. Obrigado.
Ben Griswold
Bryant, eu tenho um serviço que gerencia a instalação e desinstalação de outro componente. Desejo fornecer ao nosso grupo de suporte uma maneira fácil de desinstalar "forçosamente" o componente se meu Serviço falhar em fazer seu trabalho. Durante o teste, eu gostaria de poder "forçar" a desinstalação também. Thx pela ajuda ..
Ben Griswold
1
@ Ben: Você tem o tipo de início de serviço "Detecção de serviços interativos" definido como "Manual" ou "Desativado"?
Hello71
1
Para permitir que os serviços interativos para Server 2012, HKLM\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServicesprecisará definir como 0 (Padrão 1)
Ivan Chau
6

Eu recomendo que você elabore o conjunto mínimo de permissões de que seu serviço realmente precisa e use-o, em vez do contexto do sistema local muito privilegiado. Por exemplo, serviço local .

Os serviços interativos não funcionam mais - ou pelo menos não mostram mais a interface do usuário - no Windows Vista e no Windows Server 2008 devido ao isolamento da sessão 0 .

Mike Dimmick
fonte
4
Mike, obrigado pela resposta. Embora eu concorde com sua recomendação e acho que todos serão beneficiados com sua resposta, não acredito que você tenha respondido à pergunta.
Ben Griswold
@ Ben Griswold: No entanto, ele aponta exatamente o que faz com que o caminho antigo falhe no Vista. +1.
SamB 02/07
1
A pergunta é "Como você executa o CMD.exe na conta do sistema local?"
Jaco Pretorius
2
@ SamB, e é para isso que servem os comentários, quando você tem algo a contribuir, o que não é realmente uma resposta .
21416 Synetech
6

Usando o Secure Desktop para executar cmd.execomosystem

Podemos obter acesso ao kernel CMDno Windows XP / Vista / 7 / 8.1 facilmente anexando um depurador:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
  1. Executar CMDcomo administrador

  2. Em seguida, use este comando em Elevado:

     CMD REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
    
  3. Em seguida, execute osk(na tela do teclado). Ele ainda não é executado com o nível de integridade do sistema se você verificar o Process Explorer, mas se você puder usar o OSK na sessão de serviço, ele será executado comoNT Authority\SYSTEM

então tive a ideia de que você deve executá-lo no Secure Desktop.

Inicie qualquer arquivo como administrador. Quando os avisos do UAC aparecerem, basta pressionar Win+ Ue iniciar, OSKe ele será iniciado CMD. Em seguida, no prompt elevado, digite whoamie você obteráNT Authority\System . Depois disso, você pode iniciar o Explorer a partir do shell de comando do sistema e usar o perfil Sistema, mas você está um pouco limitado ao que pode fazer na rede através dos privilégios de SISTEMA por motivos de segurança. Acrescentarei mais explicações mais tarde, como a descobri há um ano.

Uma breve explicação de como isso acontece

Em execução . Esse método executa a técnica de interceptação do depurador que foi descoberta anteriormente, bem, essa técnica tem seus próprios benefícios: pode ser usada para interceptar algum worm ou malware malicioso / astuto no depurador e executar outro exe para interromper a propagação ou danificar temporariamente. aqui, essa chave de registro intercepta o teclado na tela no depurador nativo do Windows e executa o cmd.exe, mas o cmd ainda será executado com os privilégios de usuários registrados, no entanto, se executarmos o cmd na sessão0, obteremos o shell do sistema. portanto, adicionamos aqui outra idéia: abrangem o cmd na área de trabalho segura. Lembre-se de que a área de trabalho segura é executada na sessão 0 na conta do sistema e obtemos o shell do sistema. Portanto, sempre que você executar algo tão elevado, terá que responder ao prompt do UAC e aos prompts do UAC na área de trabalho escura e não interativa. Depois de vê-lo, pressione +Cmd.exe conta do sistema local sem usarPsExecWinU e selecioneOSKvocê será CMD.exeexecutado sob privilégios do sistema local. Existem ainda mais maneiras de obter acesso ao sistema local comCMD

Raven
fonte
ya há ainda mais maneiras de executar cmd como elevada com privilégios de autoridade NT
corvo
Isso é muito legal. Muito agradável. Eu odeio confiar em complementos de terceiros para fazer algo. Isso é super rápido e fácil. Permanente também :-) O único problema é que você precisa executar todos os comandos na janela do UAC e que apenas alguns aplicativos são abertos. Explorer.exe não abre por exemplo. Quero experimentar se existe outra maneira de desencadear isso. Quero poder executar outros aplicativos no ambiente nativo do Windows sem que o UAC limite alguns aplicativos. Great stuff Raven!
KonaRin
3

uma alternativa a isso é Process hacker, se você executar como ... (Interativo não funciona para pessoas com aprimoramentos de segurança, mas isso não importa) e, quando a caixa é aberta, coloque Service no tipo de caixa e coloque SYSTEM na caixa de usuário e coloque C : \ Users \ Windows \ system32 \ cmd.exe deixe o resto clique em ok e boch você tem uma janela com o cmd e é executado como o sistema agora execute as outras etapas por si mesmo, porque estou sugerindo que você os conheça

James5001
fonte
2

Existe outro caminho. Existe um programa chamado PowerRun que permite a execução de cmd elevado. Mesmo com direitos TrustedInstaller. Ele permite comandos de console e GUI.

Alexander Haakan
fonte
1

se você puder gravar um arquivo em lotes que não precise ser interativo, tente executá-lo como um serviço, para fazer o que precisa ser feito.


fonte
0

Eu uso o utilitário RunAsTi para executar como TrustedInstaller (alto privilégio). O utilitário pode ser usado mesmo no modo de recuperação do Windows (o modo que você entra executando Shift+ Restart), o utilitário psexec não funciona lá. Mas você precisa adicionar seus C:\Windowse C:\Windows\System32(não X:\Windowse X:\Windows\System32) caminhos para a PATHvariável de ambiente, caso contrário RunAsTi não funcionará no modo de recuperação, ele só irá imprimir: AdjustTokenPrivileges para SeImpersonateName: Nem todos os privilégios ou grupos referenciados são atribuídos ao chamador .

anton_rh
fonte
0

Usando o agendador de tarefas, agende uma execução do CMDKEY em SYSTEM com os argumentos apropriados de / add: / user: e / pass:

Não há necessidade de instalar nada.

Paul Harris
fonte