Explicación e implementación básica#
PsExec es una herramienta que permite ejecutar procesos en otros sistemas de la red sin tener que instalar nada manualmente. Hay varias implementaciones de la herramienta:
Por defecto, al ejecutar psexec.exe:
- El programa copia el ejecutable
PSEXESVC.exe, ubicado dentro del propiopsexec.exe, al shareADMIN$del objetivo (A través de SMB, y que apunta aC:\Windows) - Mediante el API de servicios de Windows (SVCCTL RPC), contactando con él a través de MSRPC (p135) o de named pipes (Share
$IPC, p139,445), crea un nuevo servicio con el ejecutable subido antes, con privilegiosSYSTEM. - Ese nuevo servicio crea varios named pipes nuevos en el share a través de los cuales tendrá lugar la comunicación.
- Al terminar, PsExec detiene el servicio y lo borra del sistema, pero el binario de
C:\Windowspuede quedar ahí, lo que deja rastro de la conexión.
Por esto último hay otras implementaciones, algunas que siguen el modelo original, pero reescritas en otros lenguajes, y otras que se ejecutan únicamente en memoria.
Otras implementaciones#
- Impacket PsExec: Versión en python, usa
RemComSvcen lugar dePSEXESVC.exe - Impacket SMBExec: Monta un servidor SMB en la máquina local en el que la víctima escribe el output de los comandos.
- Impacket Atexec: Crea una tarea inmediata en el task scheduler de Windows por cada comando, escribe su output al share, lo lee y lo borra. (Solo permite comandos individuales, no sesiones interactivas)
- Netexec: Herramienta de post-explotación que integra muchas de éstas.
- Metasploit psexec_psh: Implementación en memoria, sin tocar el disco, usando IEX de Powershell. Más info aquí
Uso#
Para usar cualquier implementación de PSExec generalmente necesitaremos privilegios administrativos (y en este caso también nos sirven hashes, así que podremos usar PtH)
Para Impacket-PsExec/-AtExec/-SMBExec:
| |
Para netexec/crackmapexec:
| |
Por defecto netexec usa atexec, tenemos que especificar manualmente si queremos otra implementación.

