Pergunta

Atualmente estou executando o Vista e gostaria de concluir manualmente as mesmas operações do meu serviço do Windows.Como o serviço do Windows está sendo executado na conta do sistema local, gostaria de emular esse mesmo comportamento.Basicamente, gostaria de executar o CMD.EXE na conta do sistema local.

Encontrei informações on -line, o que sugere que o cmd.exe usando o agendador de tarefas do DOS no comando, mas recebi um aviso do Vista que "devido a aprimoramentos de segurança, essa tarefa será executada no momento exceto, mas não interativamente". Aqui está um comando de amostra:

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 apenas inicia 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.

Também tentei usar os Runas, mas acho que estou enfrentando a mesma restrição encontrada ao executar uma tarefa agendada.

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

Foi útil?

Solução

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

No entanto, me deparei com isso artigo que demonstra o uso de PSTools de SysInternals (que foi adquirida pela Microsoft em julho de 2006.) Iniciei a linha de comando através do seguinte e de repente estava executando na 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.

Outras dicas

  1. Baixe psexec.exe da Sysinternals.
  2. Coloque-o na unidade C:\.
  3. Faça logon como usuário padrão ou administrador 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.exe onde -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 for iniciado, observe o nome "sistema" na barra do menu Iniciar.Agora você pode excluir alguns arquivos no diretório system32 que, como administrador, você não pode excluir ou, como administrador, você teria que se esforçar para alterar as permissões para excluir esses arquivos.

Os usuários que tentam renomear ou excluir arquivos do sistema em qualquer diretório protegido do Windows devem saber que todos os arquivos do Windows são protegidos por DACLS. Ao renomear um arquivo, você deve 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, então 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ê estará 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

Encontrei uma resposta aqui o 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 era interativo (não consegui ver a janela).

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ê poderia simplesmente usar o log para determinar o que está acontecendo, em vez de executar o exe como sistema local ...

Eu recomendo que você determine o conjunto mínimo de permissões que seu serviço realmente precisa e use-o, em vez do contexto de 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 a sessão 0 isolamento.

uma alternativa para isso é Process hacker se você for executado como...(Interactive não funciona para pessoas com os aprimoramentos de segurança, mas isso não importa) e quando a caixa abre, coloque o serviço no tipo de caixa e coloque o sistema na caixa de usuário e coloque C: Usuários Windows System32 cmd.exe Deixe o resto clique em OK E Boch, você tem uma janela com CMD e corre como o sistema agora dá os outros passos para si mesmo, porque estou sugerindo que você os conhece

Usando o Secure Desktop para executar cmd.exe como system

Podemos obter acesso ao kernel através CMD no 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. Correr CMD como 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. Então corra osk (teclado na tela).Ele ainda não funciona com o nível de integridade do sistema se você verificar através do Process Explorer, mas se você puder usar o OSK na sessão de serviço, ele será executado como NT Authority\SYSTEM

então tive a ideia de executá-lo no Secure Desktop.

Inicie qualquer arquivo como Administrador.Quando os prompts do UAC aparecerem, basta pressionar Ganhar+você e começar OSK e vai começar CMD em vez de.Em seguida, no prompt elevado, digite whoami e você vai conseguir NT Authority\System.Depois disso, você pode iniciar o Explorer a partir do shell de comando do sistema e usar o perfil do sistema, mas está um tanto limitado no que pode fazer na rede por meio de privilégios de SYSTEM por motivos de segurança.Acrescentarei mais explicações mais tarde, pois descobri há um ano.

Uma breve explicação de como isso acontece

Correndo Cmd.exe Na conta do sistema local sem usar PsExec.Este método executa a técnica Debugger Trap que foi descoberta anteriormente, bem, esta técnica tem seus próprios benefícios, ela pode ser usada para capturar algum worm ou malware astuto/malicioso no depurador e executar algum outro exe para impedir a propagação ou dano temporário.aqui, esta chave de registro captura o teclado na tela no depurador nativo do Windows e executa o cmd.exe, mas o cmd ainda será executado com privilégios de usuários conectados, no entanto, se executarmos o cmd na sessão0, poderemos obter o shell do sistema.então adicionamos aqui outra ideia: abrangemos 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, deverá responder ao prompt do UAC e aos prompts do UAC em uma área de trabalho escura e não interativa e, ao vê-lo, deverá pressionar Ganhar+você e selecione OSK você vai ter CMD.exe executando sob privilégios do sistema local.Existem ainda mais maneiras de obter acesso ao sistema local com CMD

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

se você puder escrever um arquivo em lote que não precise ser interativo, tente executar esse arquivo em lote como um serviço para fazer o que precisa ser feito.

Eu uso o RunAsTi utilitário para ser executado como Instalador confiável (alto privilégio).O utilitário pode ser usado mesmo no modo de recuperação do Windows (o modo que você entra fazendo Shift+Restart), o psexec utilitário não funciona lá.Mas você precisa adicionar seu C:\Windows e C:\Windows\System32 (não X:\Windows e X:\Windows\System32) caminhos para o PATH variável de ambiente, caso contrário RunAsTi não funcionará no modo de recuperação, apenas imprimirá: AdjustTokenPrivileges para SeImpersonateName:Nem todos os privilégios ou grupos referenciados são atribuídos ao chamador.

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

Não há necessidade de instalar nada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top