En la primera parte sobre Network Hacking con Impacket se ha explicado para qué sirve esta librería y un par de utilidades interesantes que explotan sus características, concretamente smbexec.py y wmiexec.py. Ambas utilidades entran en la categoría de “ejecución remota” en donde es posible generar una shell o ejecutar comandos contra un sistema Windows siempre y cuando se tenga una cuenta valida en dicho sistema y se cumplan las condiciones necesarias. Por ejemplo, tal como se ha mencionado en dicho post, la cuenta de usuario debe tener permisos de administrador en dicha máquina, ya sea una cuenta local o de dominio, pero tiene que tener un nivel de privilegios lo suficientemente alto como para crear un servicio en dicha máquina. Hay otras utilidades disponibles en Impacket que cumplen con el mismo objetivo pero empleando otras técnicas a las mencionadas en el post anterior con WMI y SMB que se explicarán a continuación.
En la utilidad psexec.py se revive el proyecto RemCom el cual lleva detenido más de 10 años y que en su momento fue creado con el objetivo de extender las funcionalidades incluidas en la herramienta pstools de Sysinternals pero con un enfoque más orientado a la ejecución remota de instrucciones y generación de una shell totalmente funcional que permite operar de forma remota con el sistema. psexec.py sigue el mismo flujo de funcionamiento de RemCom, en primer lugar establece una conexión con el servicio SMB y el intercambio de información entre cliente y servidor se lleva a cabo por medio de Named Pipes y protocolo RPC. Una vez se establece la conexión, sube un fichero muy liviano que representa un servicio que se creará en el sistema el cual permitirá la generación de una shell entre cliente y servidor. Una vez finaliza la interacción, el servicio y las trazas sobre su existencia se borran, haciendo de esta manera una limpieza del entorno. Como se puede apreciar es muy similar a la utilidad smbexec.exe explicada en el post anterior y por lo tanto también se deben cumplir con varias premisas como por ejemplo, la cuenta de usuario que se utilice debe tener permisos suficientes y debe existir un recurso compartido en el que se pueda subir el ejecutable para el servicio.
En las trazas se puede apreciar lo explicado anteriormente y queda bastante más claro el funcionamiento del script, el cual basa su comportamiento en el RemCom. Se podría decir que es un script que representa la migración Python e Impacket de la herramienta RemCom.
El script “atexec.py” es otra de las utilidades disponibles en Impacket para la ejecución remota y como las anteriores que se han explicado, es necesario contar con una cuenta y credenciales validas así como permisos suficientes para la creación de una tarea programada. En este caso el script intenta ejecutar un comando contra el sistema remoto utilizando el servicio de Task Scheduler disponible en Windows. No genera una shell como las herramientas mencionadas anteriormente, pero permite la ejecución de un comando arbitrario.
Como se puede apreciar en la imagen, si el script se ejecuta con las credenciales de un usuario sin privilegios suficientes para crear una tarea programada, se produce un acceso denegado.
La especificación COM de Microsoft es un elemento fundamental en la estructura de muchos de sus productos, incluyendo evidentemente el sistema Windows. Se trata de una serie de reglas que deben seguir los componentes desplegados en el sistema para poder interactuar entre ellos. Esto significa que COM no es un lenguaje de programación o una tecnología concreta, es la representación de un modelo o protocolo deben seguir los objetos creados para que puedan interactuar correctamente, estos objetos son conocidos como componentes y pueden ser binarios ejecutables, programas en algún lenguaje concreto, librerías DLL, utilidades en Powershell, etc. Por otro lado, DCOM representa un protocolo para el acceso a objetos COM utilizando el protocolo MS-RPC. Existe una buena cantidad de objetos COM que se pueden utilizar de forma remota utilizando DCOM y que en algunos casos, pueden ser útiles para la ejecución remota de comandos e incluso para llevar a cabo movimientos laterales sobre un sistema. La utilidad dcomexec.py en Impacket permite precisamente la ejecución los componentes COM MMC20.Application, ShellWindows y ShellBrowserWindow solamente hay que indicar cuál se debe utilizar con la opción “-object”.
Impacket no solamente permite la ejecución remota de instrucciones con los scripts vistos en este y en el anterior post, cuenta con muchas más utilidades orientadas a entornos de Active Directory que se explorarán con más detalle en las siguientes partes de esta serie.
Un saludo y Happy Hack!
Adastra.