¿Cómo ejecuta CMD.exe en la cuenta del sistema local?

144

Actualmente estoy ejecutando Vista y me gustaría completar manualmente las mismas operaciones que mi Servicio de Windows. Como el servicio de Windows se ejecuta con la cuenta del sistema local, me gustaría emular este mismo comportamiento. Básicamente, me gustaría ejecutar CMD.EXE bajo la cuenta del sistema local.

Encontré información en línea que sugiere iniciar CMD.exe utilizando el comando AT del Programador de tareas DOS, pero recibí una advertencia de Vista de que "debido a mejoras de seguridad, esta tarea se ejecutará en el momento exceptuado pero no de manera interactiva". Aquí hay un comando de muestra:

AT 12:00 /interactive cmd.exe

Otra solución sugirió crear un Servicio de Windows secundario a través del Control de Servicio (sc.exe) que simplemente inicia CMD.exe.

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

En este caso, el servicio no se inicia y le da el siguiente mensaje de error:

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

La tercera sugerencia fue iniciar CMD.exe a través de una tarea programada. Aunque puede ejecutar tareas programadas en varias cuentas, no creo que la cuenta del sistema local sea una de ellas.

También he intentado usar Runas, pero creo que me encuentro con la misma restricción que se encuentra al ejecutar una tarea programada.

Hasta ahora, cada uno de mis intentos ha terminado en fracaso. ¿Alguna sugerencia?

Ben Griswold
fuente

Respuestas:

221

Aunque no lo he probado personalmente, tengo buenas razones para creer que la solución AT COMMAND mencionada anteriormente funcionará para XP, 2000 y Server 2003. Según las pruebas de Bryant y yo, hemos identificado que el mismo enfoque no funciona con Vista o Windows Server 2008, muy probablemente debido a la seguridad adicional y al interruptor / interactivo en desuso.

Sin embargo, me encontré con este artículo que demuestra el uso de PSTools de SysInternals (que fue adquirido por Microsoft en julio de 2006). Lancé la línea de comando a través de lo siguiente y de repente estaba corriendo bajo la cuenta de administrador local como magia:

psexec -i -s cmd.exe

PSTools funciona bien. Es un conjunto de herramientas ligero y bien documentado que proporciona una solución adecuada a mi problema.

Muchas gracias a quienes ofrecieron ayuda.

Ben Griswold
fuente
11
Esto me gusta más con -dagregado, para que pueda seguir usando la consola desde la que la inicié.
SamB
1
Acabo de probar Vista x64 y obtuve "El servicio PsExec ejecutándose en ... es una versión incompatible". Intenté directamente desde \\ live.sysinternals.com \ tools \ psexec y el último binario. No parece haber una versión x64
ZXX
52
  1. Descargue psexec.exe de Sysinternals .
  2. Colóquelo en su unidad C: \.
  3. Inicio de sesión como un usuario estándar o de administrador y use el siguiente comando: cd \. Esto lo ubica en el directorio raíz de su unidad, donde se encuentra psexec.
  4. Use el siguiente comando: psexec -i -s cmd.exedonde -i es para interactiva y -s es para cuenta del sistema.
  5. Cuando se complete el comando, se iniciará un shell de cmd. Tipo whoami; dirá "sistema"
  6. Abra el administrador de tareas. Mata a explorer.exe.
  7. Desde un tipo de shell de comando elevado start explorer.exe.
  8. Cuando se inicia el explorador, observe el nombre "sistema" en la barra de menú de inicio. Ahora puede eliminar algunos archivos en el directorio system32 que, como administrador, no puede eliminar o como administrador, tendría que intentar cambiar los permisos para eliminar esos archivos.

Los usuarios que intentan cambiar el nombre o eliminar archivos del sistema en cualquier directorio protegido de Windows deben saber que todos los archivos de Windows están protegidos por DACLS mientras que al cambiar el nombre de un archivo debe cambiar el propietario y reemplazar TrustedInstaller que posee el archivo y hacer que cualquier usuario sea un usuario que pertenece al grupo de administradores como propietario del archivo, luego intente cambiarle el nombre después de cambiar el permiso, funcionará y mientras está ejecutando Windows Explorer con privilegios de kernel, está algo limitado en términos de acceso a la red por razones de seguridad y sigue siendo un tema de investigación para que tenga acceso de nuevo

cuervo
fuente
Utilizo este truco, para iniciar el explorador como usuario elevado a menudo. Especialmente, cuando se conecta a través de VNC a una PC, donde necesita establecer la configuración de red, por ejemplo. +1 de mi parte
TPAKTOPA
Este truco parece inválido ahora. Mi sistema operativo es Windows 7 SP1. He ido tan lejos como para ver el "sistema" en la barra de menú de inicio. Pero aún así, al cambiar el nombre de un archivo en la carpeta system32, dice que se ha denegado el permiso. La carpeta system32 ahora es propiedad de TrustedInstaller, e incluso la cuenta del sistema local solo tiene permisos especiales.
Shaohua Li
Si intenta cambiar el nombre o eliminar cualquier archivo que esté en cualquier directorio protegido de Windows que sea propiedad de TrustedInstaller, su usuario actual debe ser propietario del archivo cambiando el permiso, luego puede cambiarle el nombre o eliminarlo. Esto se usa a menudo para eliminar slmgr. exe y otros archivos del sistema para obtener acceso ilimitado a la versión de prueba de Windows sin pagar por ello
cuervo
10

Encontré una respuesta aquí que parece resolver el problema agregando / k start al parámetro binPath. Entonces eso te daría:

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

Sin embargo, Ben dijo que eso no funcionó para él y cuando lo probé en Windows Server 2008 creó el proceso cmd.exe en el sistema local, pero no era interactivo (no podía ver la ventana).

No creo que haya una manera fácil de hacer lo que pides, pero me pregunto por qué lo estás haciendo. ¿Estás tratando de ver qué sucede cuando ejecutas tu servicio? Parece que podría usar el registro para determinar qué está sucediendo en lugar de tener que ejecutar el exe como sistema local ...

Bryant
fuente
Hola bryant Esta solución se describe esencialmente en la pregunta. ¿Funciona realmente para ti? Está resultando en un fracaso para mí. Gracias.
Ben Griswold
Bryant, tengo un Servicio que gestiona la instalación y desinstalación de otro componente. Quiero darle a nuestro grupo de soporte una manera fácil de desinstalar "forzosamente" el componente si mi Servicio no cumple con su trabajo. Durante las pruebas, me gustaría poder "forzar" la desinstalación también. Gracias por la ayuda ..
Ben Griswold
1
@Ben: ¿Tiene el tipo de inicio del servicio "Detección de servicios interactivos" configurado en "Manual" o "Desactivado"?
Hola71
1
Para permitir servicios interactivos para Server 2012, HKLM\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServicesdebe establecer como 0 (Predeterminado 1)
Ivan Chau
6

Le recomendaría que calcule el conjunto mínimo de permisos que su servicio realmente necesita y lo use, en lugar del contexto de sistema local demasiado privilegiado. Por ejemplo, servicio local .

Los servicios interactivos ya no funcionan, o al menos, ya no muestran la interfaz de usuario, en Windows Vista y Windows Server 2008 debido al aislamiento de la sesión 0 .

Mike Dimmick
fuente
44
Mike, gracias por la respuesta. Aunque estoy de acuerdo con su recomendación y creo que todos se beneficiarán de su respuesta, no creo que haya respondido la pregunta.
Ben Griswold el
@Ben Griswold: Él, sin embargo, señala exactamente qué es lo que hace que la vieja forma falle en Vista. +1.
SamB
1
La pregunta es "¿Cómo ejecuta CMD.exe en la cuenta del sistema local?"
Jaco Pretorius
2
@SamB, y para eso están los comentarios, cuando tienes algo que aportar que en realidad no es una respuesta .
Synetech
6

Usando Secure Desktop para ejecutar cmd.execomosystem

Podemos obtener acceso al núcleo a través CMDde Windows XP / Vista / 7 / 8.1 fácilmente conectando un 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. Ejecutar CMDcomo administrador

  2. Luego use este comando en Elevated:

     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. Luego, ejecuta osk(teclado en pantalla). Todavía no se ejecuta con el nivel de integridad del sistema si revisa el explorador de procesos, pero si puede usar OSK en la sesión de servicio, se ejecutará comoNT Authority\SYSTEM

así que tuve la idea de que tienes que ejecutarlo en Secure Desktop.

Inicie cualquier archivo como administrador. Cuando aparezcan los avisos de UAC, simplemente presione Win+ Ue inicie OSKy comenzará en su CMDlugar. Luego, en el símbolo del sistema elevado, escriba whoamiy obtendrá NT Authority\System. Después de eso, puede iniciar el Explorador desde el shell de comandos del sistema y usar el perfil del Sistema, pero tiene algunas limitaciones sobre lo que puede hacer en la red a través de los privilegios del SISTEMA por razones de seguridad. Agregaré más explicaciones más tarde como las descubrí hace un año.

Una breve explicación de cómo sucede esto

Ejecutar Cmd.exebajo la cuenta del sistema local sin usarPsExec. Este método ejecuta la técnica de trampa de depurador que se descubrió anteriormente, bueno, esta técnica tiene sus propios beneficios, puede usarse para atrapar algún gusano o malware malicioso / malicioso en el depurador y ejecutar algún otro exe para detener la propagación o el daño temporal. aquí esta clave del registro atrapa el teclado en pantalla en el depurador nativo de Windows y ejecuta cmd.exe en su lugar, pero cmd seguirá ejecutándose con privilegios de Usuarios registrados, sin embargo, si ejecutamos cmd en session0, podemos obtener el shell del sistema. así que agregamos aquí otra idea, abarcamos el cmd en el escritorio seguro, recuerda que el escritorio seguro se ejecuta en la sesión 0 bajo la cuenta del sistema y obtenemos el shell del sistema. Por lo tanto, cada vez que ejecute algo tan elevado, debe responder la solicitud de UAC y las solicitudes de UAC en un escritorio oscuro y no interactivo y una vez que lo vea, debe presionar Win+ Uy luego seleccionarOSKcomenzará a CMD.execorrer bajo los privilegios del sistema local. Hay incluso más formas de obtener acceso al sistema local conCMD

cuervo
fuente
hay aún más formas de ejecutar cmd como Elevated with NT Authority Privileges
raven
Esto esta muy bien. Muy agradable. Odio depender de complementos de terceros para hacer algo. Esto es súper rápido y fácil. Permanente también :-) El único problema es que debe ejecutar todos los comandos en la ventana UAC y que solo se abren algunas aplicaciones. Explorer.exe no se abre, por ejemplo. Quiero experimentar si hay otra forma de activar esto. Quiero poder ejecutar otras aplicaciones en el entorno de Windows nativo sin que el UAC limite ciertas aplicaciones. Grandes cosas Raven!
KonaRin
3

una alternativa a esto es Process hacker si se ejecuta como ... (Interactivo no funciona para las personas con mejoras de seguridad, pero eso no importa) y cuando se abre box, ponga Service en el tipo box y ponga SYSTEM en la carpeta user y ponga C : \ Users \ Windows \ system32 \ cmd.exe deje el resto, haga clic en Aceptar y verifique que tiene una ventana con cmd y ejecute como sistema ahora haga los otros pasos por usted mismo porque sugiero que los conozca

James5001
fuente
2

Hay otra manera Hay un programa llamado PowerRun que permite ejecutar cmd elevado. Incluso con los derechos TrustedInstaller. Permite comandos de consola y GUI.

Alexander Haakan
fuente
1

Si puede escribir un archivo por lotes que no necesita ser interactivo, intente ejecutar ese archivo por lotes como un servicio, para hacer lo que debe hacerse.


fuente
0

Uso la utilidad RunAsTi para ejecutar como TrustedInstaller (alto privilegio). La utilidad se puede usar incluso en el modo de recuperación de Windows (el modo que ingresas haciendo Shift+ Restart), la utilidad psexec no funciona allí. Pero debe agregar sus rutas C:\Windowsy C:\Windows\System32(no X:\Windowsy X:\Windows\System32) a la PATHvariable de entorno, de lo contrario RunAsTi no funcionará en modo de recuperación, solo imprimirá: AdjustTokenPrivileges for SeImpersonateName: no todos los privilegios o grupos a los que se hace referencia se asignan a la persona que llama .

anton_rh
fuente
0

Usando el programador de tareas, programe una ejecución de CMDKEY que se ejecute en SYSTEM con los argumentos apropiados de / add: / user: y / pass:

No es necesario instalar nada.

Paul Harris
fuente