10 enero, 2019

Ejecutar una CMD en un equipo remoto con psexec

Esto es algo que suelo utilizar en muchos casos cuando los servicios para administraciones remotas que necesito en ese momento no están habilitados en el equipo remoto.

O bien me conecto con este tip para ejecutar una CMD en el equipo remoto y habilitar los servicios que sean necesarios para posteriormente administrar el equipo remoto de forma más cómoda a través del registro remoto (regedit) o los snap-ins MSC (administrador de dispositivos, impresoras, firewall, servicios, etc.) de administración remota añadidos a través de una MMC (Microsoft Management Console).

Como levantamos una CMD con privilegios administrativos ya sea de un administrador local o de dominio podemos ejecutar acciones remotas mediante la consola, "netsh" para la administración de redes o Firewall, "sc" para servicios, "reg" para la manipulación de entradas del registro, "wmic" instrumental de administración de Windows, etc. Aunque como comentaba anteriormente es más cómodo invocar las propias consolas de administración remotas MSC de Microsoft.

Para esto será necesario descargar psexec, parte de la colección de herramientas de Sysinternals de Microsoft.

Haciendo uso de PsExec ejecutamos lo siguiente en una CMD con privilegios de nuestro equipo local.
psexec \\EquipoRemoto -u UserAdmin -p Password cmd.exe
  • EquipoRemoto: nombre o IP del equipo remoto al que nos queremos conectar.
  • UserAdmin: usuario con privilegios de administrador local o de dominio sobre la máquina remota.
  • Password: Passoword del usuario establecido anteriormente.
  • Seguidamente indicamos la aplicación a ejecutar de forma remota, en este caso sería una CMD remota, por lo tanto "cmd.exe" o indicar la ruta absoluta para este binario o el que sea. "C:\Windows\System32\cmd.exe"
  • Con el parámetro psexec /i indicamos una interacción GUI con ventana del equipo remoto. "C:\Windows\regedit.exe", etc.
Podemos usar el parámetro -h para ejecutar el token de elevación si en el sistema remoto tiene habilitado el UAC. Y el parámetro -s cmd.exe para ejecutar el proceso remoto en la cuenta del sistema.

En la siguiente captura se puede ver un ejemplo y una comprobación consultando las IPs y un whoami de como realmente estamos estamos dentro del equipo remoto.
Ejecución de una CMD en un equipo remoto con psexec
Figura 1: Ejecución de una CMD en un equipo remoto con psexec.

En el caso de que obtengamos un error de acceso denegado, comparto el siguiente artículo como referencia para realizar la configuración previa WinRM.

7 comentarios:

  1. Llevo años usando las herramientas de SysInternals y realmente no se me había ocurrido esta opción... es increíble que aun con todo lo que han avanzado con powershell, sea tan difícil hacer una tarea que con psexec sea tan sencilla... no sé como no se me ocurrió antes, pero gracias por postearlo!!! me ayudó como no sabes

    Gracias y saludos

    ResponderEliminar
  2. puedes cambiar dns... un bat de un driver de bios... MARAVILLOSO!!!!

    ResponderEliminar
  3. a mi me da error che me dice que el usuario o contraseña esta mal cuando estan bien :( llevo tiempo queriendo ejecutar de manera remota cmd en otro equipo y no puedo

    ResponderEliminar
    Respuestas
    1. Hola @maxi,

      Para equipos que formen parte de un dominio y siempre que tengas privilegios con el usuario que intentas establecer la conexión RPC no tendrías problemas.

      Ahora bien, si se trata en un equipo fuera de dominio pero si tienes un usuario privilegiado tipo Administrador local. Deberás establecer hostname\userAdminLocal y password. Teniendo en cuenta que el equipo remoto debe tener habilitado el servicio de administración remota WinRM y las reglas en el firewall para permitir este tipo de gestión remota.

      Un saludo,
      Adrián.

      Eliminar
    2. Lo sabia! faltaba leer las letras chiquitas :(

      Eliminar
  4. Al lanzar el comando psexec /i en la maquina destino me lanza el app con problemas de visualizacion, que no pasa cuando la ejecuto localmente, hay algo que pueda hacer?

    ResponderEliminar
  5. Al ejecutar el comando psexec /i la app se ejecuta con problemas de visualizacion, cosa que no pasa cuando lo hago de manera local, hay alguna solucion para esto?

    ResponderEliminar