Siguiendo con lo que se ha explicado durante la primera parte de estas entradas sobre enumeración y post-explotación básica en sistemas Windows, se listan a continuación otros detalles interesantes que hay que explorar, teniendo en cuenta que aunque hay scripts y herramientas que ya hacen este tipo de labores de forma automática, resulta conveniente saber cómo llevar a cabo el proceso y seguir la metodología manualmente. Hacerlo así le permite al pentester analizar de una forma más detallada la información, evitar cualquier descuido o pasar por alto algún detalle interesante/importante.
Búsqueda de ficheros y directorios.
En sistemas Linux es común ejecutar comandos como "find" o "locate" con el objetivo de encontrar ficheros con permisos o características especiales, por ejemplo aquellos cuyo usuario es root y tienen permisos demasiado abiertos o que tienen el SUID habilitado, entre otras cosas. Esto en Windows también se tiene en cuenta durante el proceso de enumeración. Se cuenta con los comandos dir, icacls o find.
El comando dir permite realizar búsquedas muy especificas sobre un directorio concreto y listar aquellos contenidos que pueden resultar de interés. La sintaxis es simple, el siguiente comando permite buscar por un fichero concreto en la estructura de directorios:
C:\> dir /b /s [Directorio]\[NombreFichero]
Por ejemplo, algunas instrucciones útiles con dir incluyen:
dir /s *pass* == *cred* == *vnc* == *.config*
findstr /si password *.xml *.ini *.txt
El comando "find" en Windows es similar al "grep" en Linux y permitirá filtrar los resultados, por ejemplo se podrá simplemente contar el número de resultados devueltos por el comando "dir" sin enseñar los resultados con un comando como el siguiente:
C:\> [ComandoDIR] | find /c /v ""
Con la opción /c se cuenta el número de líneas devueltas y con /v indica que enseñe las lineas que no contienen nada ("").
El comando icacls también resulta útil para obtener información sobre permisos débiles en ficheros almacenados en el sistema. Por ejemplo:
icacls "C:\Program Files\*" | findstr "(F)" | findstr "Everyone"
icacls "C:\Program Files (x86)\*" | findstr "(F)" | findstr "Everyone"
Permitirá listar aquellos ficheros en los directorios indicados que tienen todos los permisos habilitados para todos los usuarios.
Entorno de red
En la etapa de post-explotación y enumeración del sistema también interesa obtener detalles sobre el entorno de red, por ejemplo, conexiones que se encuentran establecidas con otros sistemas, puertos abiertos e interfaces de red. Esto último es especialmente interesante de cara a aplicar técnicas de pivoting y port-forwarding. Para ello se cuenta con los típicos comandos ipconfig, netstat, arp y route
El comando netsh también resulta útil en esta etapa con el objetivo de ver el estado del firewall e incluso, en algunos casos, para crear túneles que permitan pivotar en un entorno de red local que podría no ser accesible para el atacante.
Netsh en sistemas Windows es muy flexible y potente a la hora de configurar el entorno de red. Permite establecer el modo de asignación de IPs, ya sea vía DHCP o asignación manual. También permite habilitar o deshabilitar el Firewall de Windows, si se cuenta con los privilegios adecuados como resulta evidente.
Por otro lado, el comando route también es importante para entender el entorno de red en el que se encuentra el sistema comprometido.
Tareas programadas.
Otro elemento importante de la lista de pruebas que se deben efectuar en la etapa de enumeración del sistema consiste en obtener información sobre las tareas programadas que se encuentran en ejecución. Ver detalles como por ejemplo el usuario con el que se ejecutan dichas tareas, la periodicidad o si se puede cambiar su configuración son cuestiones de gran interés a la hora de elevar privilegios. Nuevamente, existen comandos en sistemas Windows que permiten obtener este tipo de información de cara a un proceso de elevación de privilegios o de post-explotación.
Por otro lado, aunque lo siguiente realmente se probaría en la etapa del listado de servicios y características, es importante detectar aquellos servicios que pueden ser vulnerables a Unquoted Service Path. Para ello se puede utilizar WMIC y listar aquellos servicios que se encuentran habilitados en el sistema y se prestan a dicha situación.
En este caso, se puede ver concretamente un servicio cuyo binario no se ha especificado con las comillas dobles, si se ubica un programa malicioso en "C:\\Program.exe", ¿qué hará Windows? 🙂
En este post se han listado algunas otras pruebas que se llevan a cabo en post-explotación de sistemas Windows, siendo aún cuestiones muy básicas y tal como se ha mencionado en la entrada anterior, este tipo de operaciones también se pueden realizar con Powershell o incluso con herramientas automatizadas como Metasploit Framework, Empire Framework ( del que ya se ha hablado en este blog) o incluso IBombShell, de la que se hablará próximamente.
Un saludo y Happy Hack!
Adastra.