Enumeración en Windows para Post-Explotación – Parte 1.
Enumeración en Windows para Post-Explotación – Parte 2.
Enumeración en Windows para Post-Explotación – Parte 3.
Enumeración en Windows para Post-Explotación – Parte 4.

Aunque los comandos e instrucciones que se han listado en las partes anteriores a este post incluyen las actividades típicas para la enumeración de sistemas Windows, es conveniente tener cierta habilidad y libertad a la hora de moverse por el sistema y esto no siempre es tan sencillo. En ocasiones la shell con la que se cuenta no permite ejecutar ciertos comandos o puede ser inestable. También puede ocurrir que no se cuenta con los elementos o herramientas necesarias para la transferencia de ficheros, especialmente si se trata de un sistema Windows antiguo o con una cuenta que tiene muy pocos privilegios. Este tipo de cuestiones son las que normalmente se encuentran en una auditoría y es vital saber qué hacer en esas situaciones. En este post se verán algunos “tips” que pueden ser útiles para solventar o mitigar algunos problemas comunes en el proceso de post-explotación.

Transferencia de ficheros en post-explotación

Para muchas de las operaciones que implican la post-explotación es necesario subir ficheros a la máquina comprometida o bien descargar información. Para ello existen múltiples alternativas que pueden ser aplicables al objetivo en cuestión. En este caso se verán algunas de las más comunes y en otro artículo se explicará como ejecutar procesos de exfiltración más enfocados a campañas de Red Team.
En primer lugar se podría hablar de la posibilidad de subir o descargar ficheros con Meterpreter, se trata de una de las alternativas más típicas y que pueden venir bien si se cuenta con una sesión de este tipo.

Si no se cuenta con una sesión Meterpreter, se pueden utilizar algunas de las herramientas disponibles en el sistema comprometido para descargar ficheros (exfiltrar) y en este punto resulta conveniente revisar el proyecto LOLBas, del que se hablará más adelante en otro post. Desde la máquina del atacante se puede levantar muy fácilmente un servidor Web o FTP para la transferencia de ficheros a la víctima. Para ello se puede utilizar Python y los módulos que se encuentran disponibles para ello.

Al sistema comprometido se pueden transferir ficheros fácilmente utilizando Powershell o herramientas disponibles en el propio sistema operativo como certutil, mshta, bitsadmin o ftp.

Se trata de las alternativas “clásicas” y que funcionan bastante bien, sin embargo existe otra forma que puede venir muy bien en el caso de que sea necesario ejecutar un binario en el sistema comprometido sin necesidad de escribir nada en disco. De hecho, a menos que en el objetivo no hayan soluciones de seguridad perimetral o se encuentren desactivadas, es recomendable no ejecutar las instrucciones anteriores para evitar una posible detección. Dicho esto, crear una unidad compartida en la máquina del atacante y utilizar el protocolo SMB para la transferencia de información y ejecución “fileless” puede ser un mejor enfoque. Para ello se puede crear un servidor Samba en la máquina del atacante y configurarlo, se trata de algo sencillo y que en pocos minutos se puede conseguir, sin embargo a efectos prácticos se puede utilizar la implementación de pruebas del servidor SMB que viene incluido en el proyecto Impacket.

A partir de este punto se pueden transferir ficheros en ambos sentidos utilizando el protocolo SMB.

 

Y por supuesto, también sería posible la ejecución “fileless” de un binario.

En la imagen anterior se puede apreciar la ejecución de un binario que se encuentra almacenado en la unidad compartida del atacante. No obstante, aunque la transferencia se ha efectuado, dicho fichero no se ha guardado en disco y aún así se obtiene una sesión meterpreter. Es simplemente un ejemplo más sobre cómo aplicar esta técnica, aunque como se ha mencionado anteriormente también sería posible hacerlo con un servidor Samba en la máquina del atacante. El resultado será el mismo.

Windows Shell Upgrade.

Una vez comprometido el sistema es posible que la shell que se ha obtenido no sea lo suficientemente estable o resulte incómodo trabajar con ella, por ejemplo a la hora de ejecutar comandos interactivos o debido a que no se tiene la posibilidad de autocompletar, siendo una característica de Powershell que permite ahorrar tiempo y facilita el trabajo. En este sentido, se explican algunas técnicas útiles para contar con una shell robusta que será perfecta para post-explotación.

WebDelivery Metasploit Framework

El “WebDelivery” de Metasploit Framework es un modulo que se encarga de generar un comando en una sola línea, el cual tras ejecutarse en el objetivo, lanza el payload indicado utilizando el interprete seleccionado en la opción “TARGET” del módulo (Python, Powershell, PHP, Regsvr32, etc.)

Como se puede apreciar, el modulo tiene opciones que permiten indicar cómo se debe levantar el servidor (job de MSF) el cual se encargará de recibir las peticiones por parte de las víctimas y generar una sesión Meterpreter o lo que sea que se haya indicado en el payload.

Al establecer el TARGET a “PSH” el comando generado incluye una instrucción Powershell y tal como se puede ver, el payload propiamente dicho se encuentra codificado en Base64, dicha cadena se decodifica y ejecutan las instrucciones decodificadas. Resulta bastante simple y permite generar, en este caso concreto, una sesión meterpreter perfectamente funcional y que es posiblemente mucho más interesante de cara a la post-explotación que una shell cruda.

Dado que este post está quedando bastante largo, en el siguiente se hablará sobre otras técnicas útiles para la generación de shells robustas y otras cuestiones interesantes en la post-explotación de sistemas Windows como es el caso del proyecto LOLBas.

Un saludo y Happy Hack!
Adastra.