Muy buenas a todos!
Esta semana hablaremos de la post-explotación en Windows a través de la conexión que obtuvimos el otro día. Repasaremos las principales funciones de Meterpreter y os explicaré como funcionan.
Antes de comenzar, es necesario que leáis la entrada anterior (si no lo habéis hecho ya) para poneros en situación. A continuación os dejo el link: Camuflando payloads en Windows con Shellter
Hasta ahora, habíamos hablado de explotación a través de un RAT, inyectando un payload o incluso a través de una conexión a escritorio remoto. Pero, qué hacemos una vez que estamos dentro del sistema?
Sinceramente, las opciones son infinitas. Podríamos utilizar millones de herramientas, o incluso si tenemos los conocimientos técnicos suficientes, conseguir nuestro objetivo utilizando únicamente una shell.
Por desgracia, el post de hoy no es lo suficientemente largo para hablar de todas ellas, así que aprovecharemos la conexión de la entrada anterior para aprender a utilizar Meterpreter.
A pesar de lo que pueda parecer a simple vista, esta herramienta es muy fácil de utilizar. Vamos a consultar los comandos básicos con help, a ver que puede ofrecernos:
Como podéis ver en la imagen anterior, hay muchísimas funciones con su correspondiente explicación a la derecha de cada una de ellas. En nuestro caso solo utilizaremos las que nos interesan, que son las siguientes:
• sysinfo: Obtendremos información del sistema operativo
• getuid: Obtendremos información del usuario actual
• getpid: Obtendremos el identificador del proceso actual
• ps: Listaremos todos los procesos activos
• getsystem: Intentará elevar los privilegios al máximo
• migrate: Migrará nuestro payload a otro proceso
• shell: Obtendremos una consola del sistema
Ahora que ya conocemos las instrucciones, vamos a simular la parte final de un CTF. En esta situación ficticia, lo que haremos será conseguir la flag ubicada en el escritorio del administrador.
Vamos a por ello, lo primero que haremos será obtener la mayor información posible del sistema con sysinfo, getuid y getpid:
A continuación comprobaremos en que proceso nos estamos inyectando y cuales están disponibles con el comando ps:
Como podéis ver en la imagen, actualmente estamos inyectados en el proceso HWMonitor_x32.exe. Pero, qué pasaría si el usuario cerrase la aplicación infectada? Pues que perderíamos la conexión y todos nuestros esfuerzos serían en vano.
Por eso, antes de continuar con el pentesting lo primero que tenemos que hacer es migrar a otro proceso con el comando migrate. Pero antes de hacerlo, necesitamos tener algunos conceptos claros para no levantar sospechas:
• Nuestra conexión siempre será visible desde netstat
• No debemos utilizar procesos que normalmente no se conectan a la red
• Solo podremos migrar a procesos con los mismos permisos
• Si buscamos persistencia tendremos que elevar privilegios
• Inyectarnos en procesos del sistema puede generar inestabilidad
Después de analizar los procesos en ejecución por el usuario, nos vemos en la obligación de migrar a una aplicación del sistema. Para ello, primero elevaremos privilegios con el comando getsystem:
Ahora procedemos a migrar al proceso svchost.exe, que sabemos que realiza conexiones con el exterior (ya bien sea por telemetría, actualizaciones del sistema, etc..)
En este punto podrían pasar varias cosas:
• Que nos detecte el antivirus
• Que la migración no se complete y perdamos la conexión
• Que el sistema falle y a la víctima le aparezca un bsod
De todas maneras, lo intentaremos con el comando migrate seguido del pid donde queremos inyectar nuestro payload:
Por suerte para nosotros, la migración se ha completado con éxito y hemos conseguido acceso completo al sistema, con los máximos privilegios posibles y con la certeza de que no perderemos la conexión mientras el equipo continúe activo.
Ahora ya podemos pasar a la recta final, en la que conseguiremos la flag del administrador con el comando shell:
Conseguido! 🙂
Si esto hubiera sido una auditoría real, podríamos haber obtenido las credenciales del sistema con hashdump, hacer un movimiento lateral con pivoting o incluso capturar las contraseñas tecleadas por el usuario con keyscan_dump o tomando un screenshot del escritorio.
Espero que os haya gustado y os resulte útil en vuestras próximas auditorías.
Nos vemos en la próxima!