Pregunta

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

Encontré información en línea que sugiere que laudando el cmd.exe utilizando el programador de tareas de DOS en el comando, pero recibí una advertencia de Vista que "debido a mejoras de seguridad, esta tarea se ejecutará en el momento excepto 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 genera 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 mediante 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 intenté usar Runas, pero creo que me encuentro con la misma restricción que encontré al ejecutar una tarea programada.

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

¿Fue útil?

Solución

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 mis pruebas y las de Bryant, hemos identificado que el mismo enfoque no funciona con Vista o Windows Server 2008, muy probablemente debido a la seguridad adicional y al interruptor /interactive que está en desuso.

Sin embargo, me encontré con esto artículo que demuestra el uso de PSHerramientas de Sistemas internos (que fue adquirida por Microsoft en julio de 2006). Inicié la línea de comando a través de lo siguiente y de repente estaba ejecutando bajo la cuenta de administrador local como por arte de magia:

psexec -i -s cmd.exe

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

Muchas gracias a quienes ofrecieron ayuda.

Otros consejos

  1. Descargar psexec.exe desde Sysinternals.
  2. Colóquelo en su unidad C:\.
  3. Inicie sesión como usuario estándar o administrador y utilice el siguiente comando: cd \.Esto lo ubica en el directorio raíz de su disco, donde se encuentra psexec.
  4. Utilice el siguiente comando: psexec -i -s cmd.exe donde -i es para interactivo y -s es para cuenta del sistema.
  5. Cuando se complete el comando, se iniciará un shell cmd.Tipo whoami;dirá "sistema"
  6. Abra el administrador de tareas.Elimina 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 del menú de inicio.Ahora puede eliminar algunos archivos en el directorio system32 que, como administrador, no puede eliminar o, como administrador, tendría que esforzarse para 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. Al cambiar el nombre de un archivo, debe cambiar el propietario y reemplazar TrustedInstaller, que es el propietario del archivo, y hacer que cualquier usuario sea como 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 ejecuta el Explorador de Windows con privilegios del kernel, está algo limitado en términos de acceso a la red por razones de seguridad y todavía es un tema de investigación. para que pueda recuperar el acceso

Encontré una respuesta aquí lo 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 fue interactivo (no pude ver la ventana).

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

Le recomendaría que determine el conjunto de permisos mínimo que su servicio realmente necesita y lo utilice, en lugar del contexto del sistema local, que es 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 a sesión 0 aislamiento.

una alternativa a esto es Process hacker si entras en ejecución como...(Interactive no funciona para las personas con las mejoras de seguridad, pero eso no importa) y cuando se abre el cuadro, ponga el servicio en el tipo de cuadro y ponga el sistema en el cuadro de usuario y ponga C: Users Windows System32 cmd.exe Deje el descanso Haga clic en Aceptar Aceptar y boch tienes una ventana con cmd y ejecutar como sistema ahora haz los otros pasos por ti mismo porque estoy sugiriendo que los conozcas

Usando Secure Desktop para ejecutar cmd.exe como system

Podemos obtener acceso al kernel a través de CMD en Windows XP/Vista/7/8.1 fácilmente adjuntando 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. Correr CMD como administrador

  2. Luego use este comando en 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. Entonces corre osk (teclado en pantalla).Todavía no se ejecuta con el nivel de integridad del sistema si verifica a través del explorador de procesos, pero si puede usar OSK en la sesión de servicio, se ejecutará como NT Authority\SYSTEM

Entonces se me ocurrió la idea de ejecutarlo en Secure Desktop.

Inicie cualquier archivo como administrador.Cuando aparezcan mensajes de UAC, simplemente presione Ganar+Ud. y empezar OSK y comenzará CMD en cambio.Luego, en el mensaje elevado, escriba whoami y obtendrás NT Authority\System.Después de eso, puede iniciar Explorer desde el shell de comandos del sistema y usar el perfil del sistema, pero está algo limitado en 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 adelante, ya que lo descubrí hace un año.

Una breve explicación de cómo sucede esto.

Correr Cmd.exe En cuenta del sistema local sin usar PsExec.Este método ejecuta la técnica Debugger Trap que se descubrió anteriormente; bueno, esta técnica tiene sus propios beneficios: se puede usar para atrapar algún gusano o malware astuto/malicioso en el depurador y ejecutar algún otro archivo ejecutable para detener la propagación o el daño temporal.aquí, esta clave de registro atrapa el teclado en pantalla en el depurador nativo de Windows y ejecuta cmd.exe en su lugar, pero cmd aún se ejecutará con privilegios de usuarios registrados; sin embargo, si ejecutamos cmd en session0 podemos obtener el shell del sistema.Entonces agregamos aquí otra idea: abarcamos el cmd en el escritorio seguro. Recuerde que el escritorio seguro se ejecuta en la sesión 0 en la cuenta del sistema y obtenemos el shell del sistema.Entonces, cada vez que ejecute algo tan elevado, debe responder las indicaciones de UAC y las indicaciones de UAC en un escritorio oscuro y no interactivo y, una vez que lo vea, debe presionar Ganar+Ud. y luego seleccione OSK conseguirás CMD.exe ejecutándose bajo privilegios del sistema local.Hay incluso más formas de obtener acceso al sistema local con CMD

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

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 sea necesario.

Yo uso el RunAsTi utilidad para ejecutar como Instalador de confianza (alto privilegio).La utilidad se puede utilizar incluso en el modo de recuperación de Windows (el modo al que ingresa haciendo Shift+Restart), el psexec La utilidad no funciona allí.Pero necesitas agregar tu C:\Windows y C:\Windows\System32 (no X:\Windows y X:\Windows\System32) caminos hacia el PATH variable de entorno, de lo contrario RunAsTi no funcionará en modo de recuperación, solo imprimirá: Ajustar privilegios de token para SeImpersonateName:No todos los privilegios o grupos a los que se hace referencia están asignados a la persona que llama.

Usando el programador de tareas, programe una ejecución de CMDKEY bajo SISTEMA con los argumentos apropiados de /add:/usuario:y /pasar:

No es necesario instalar nada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top