Meterpreter

El Payload de Meterpreter es un tipo específico de Payload multifacético y extensible que utiliza inyección de DLL para asegurar que la conexión con el host víctima sea estable y difícil de detectar mediante chequeos simples. Además, puede configurarse para ser persistente a través de reinicios o cambios en el sistema. Meterpreter reside completamente en la memoria del host remoto y no deja rastros en el disco duro, lo que lo hace difícil de detectar con técnicas forenses convencionales.

Se le llama el "cuchillo suizo" de la pentesting, y por una buena razón. El propósito de Meterpreter es mejorar específicamente nuestros procedimientos de post-explotación, ofreciéndonos un conjunto seleccionado de herramientas relevantes para una enumeración más sencilla del host objetivo desde dentro. Puede ayudarnos a encontrar diversas técnicas de escalada de privilegios, técnicas de evasión de antivirus, investigación de vulnerabilidades adicionales, proporcionar acceso persistente, hacer pivoteo, etc.

Para una lectura interesante, consulta este post sobre Payloads stageless de Meterpreter y este post sobre la modificación de plantillas de Metasploit para evasión. Estos temas están fuera del alcance de este módulo, pero debemos estar al tanto de estas posibilidades.

Ejecución de Meterpreter

Para ejecutar Meterpreter, solo necesitamos seleccionar cualquier versión de él de la salida de show payloads, teniendo en cuenta el tipo de conexión y el sistema operativo al que estamos atacando.

Cuando se completa el exploit, ocurren los siguientes eventos:

  1. El objetivo ejecuta el stager inicial. Esto suele ser un bind, reverse, findtag, passivex, etc.

  2. El stager carga la DLL precedida por Reflective. El stub Reflective maneja la carga/inyección de la DLL.

  3. El núcleo de Meterpreter se inicializa, establece un enlace cifrado por AES a través del socket y envía un GET. Metasploit recibe este GET y configura el cliente.

  4. Por último, Meterpreter carga extensiones. Siempre cargará stdapi y priv si el módulo otorga derechos administrativos. Todas estas extensiones se cargan a través de cifrado AES.

Cada vez que se envía y se ejecuta el Payload de Meterpreter en el sistema objetivo, recibimos un shell de Meterpreter. Podemos emitir inmediatamente el comando help para ver de qué es capaz el shell de Meterpreter.

MSF - Comandos de Meterpreter

Meterpreter

meterpreter > help

Comandos Principales

Comando
Descripción

?

Menú de ayuda

background

Envía la sesión actual a segundo plano

bg

Alias para background

bgkill

Mata un script de Meterpreter en segundo plano

bglist

Lista los scripts en segundo plano

bgrun

Ejecuta un script de Meterpreter como un hilo en segundo plano

channel

Muestra información o controla canales activos

close

Cierra un canal

disable_unicode_encoding

Desactiva la codificación de cadenas Unicode

enable_unicode_encoding

Activa la codificación de cadenas Unicode

exit

Termina la sesión de Meterpreter

get_timeouts

Obtiene los valores de tiempo de espera de la sesión

guid

Obtiene el GUID de la sesión

help

Menú de ayuda

info

Muestra información sobre un módulo Post

irb

Abre un shell interactivo de Ruby en la sesión actual

load

Carga una o más extensiones de Meterpreter

machine_id

Obtiene el ID de MSF de la máquina conectada a la sesión

migrate

Migra el servidor a otro proceso

pivot

Gestiona oyentes de pivote

pry

Abre el depurador Pry en la sesión actual

quit

Termina la sesión de Meterpreter

read

Lee datos de un canal

resource

Ejecuta los comandos almacenados en un archivo

run

Ejecuta un script de Meterpreter o módulo Post

secure

(Re)Negocia la encriptación de paquetes TLV en la sesión

sessions

Cambia rápidamente a otra sesión

set_timeouts

Establece los valores de tiempo de espera de la sesión

sleep

Obliga a Meterpreter a permanecer en silencio, luego restablece la sesión

transport

Cambia el mecanismo de transporte actual

use

Alias obsoleto para "load"

uuid

Obtiene el UUID para la sesión actual

write

Escribe datos en un canal

Algunos de estos comandos también están disponibles en la hoja de trucos del módulo para referencia.

Conceptos Clave sobre Meterpreter

La idea principal que necesitamos entender sobre Meterpreter es que es tan bueno como obtener un shell directo en el sistema operativo objetivo, pero con más funcionalidad. Los desarrolladores de Meterpreter establecieron claros objetivos de diseño para que el proyecto pudiera crecer en usabilidad en el futuro. Meterpreter necesita ser:

  • Sigiloso

  • Poderoso

  • Extensible

Sigiloso

Meterpreter, cuando se lanza y llega al objetivo, reside completamente en la memoria y no escribe nada en el disco. No se crean nuevos procesos, ya que Meterpreter se inyecta en un proceso comprometido. Además, puede realizar migraciones de procesos de un proceso en ejecución a otro.

Con la ahora actualizada msfconsole-v6, todas las comunicaciones del payload de Meterpreter entre el host objetivo y nosotros están cifradas usando AES para asegurar la confidencialidad e integridad de las comunicaciones de datos.

Todo esto proporciona pruebas forenses limitadas y también poco impacto en la máquina víctima.

Poderoso

El uso de un sistema de comunicación canalizado entre el host objetivo y el atacante demuestra ser muy útil. Podemos notar esto de primera mano cuando inmediatamente generamos un shell del sistema operativo dentro de nuestro escenario de Meterpreter abriendo un canal dedicado para ello. Esto también permite el uso de tráfico cifrado por AES.

Extensible

Las características de Meterpreter pueden aumentarse constantemente en tiempo de ejecución y cargarse a través de la red. Su estructura modular también permite agregar nueva funcionalidad sin necesidad de recompilarlo.

Usando Meterpreter

Ya hemos explorado los conceptos básicos de Meterpreter en la sección de Payloads. Ahora, observaremos las verdaderas fortalezas del shell de Meterpreter y cómo puede mejorar la efectividad de la evaluación y ahorrar tiempo durante un compromiso. Comenzaremos realizando un escaneo básico contra un objetivo conocido. Haremos esto a la carta, haciendo todo desde dentro de msfconsole para beneficiarnos del seguimiento de datos en nuestro objetivo.

MSF - Escaneando el Objetivo

A continuación, buscamos información sobre los servicios que se ejecutan en esta máquina. Específicamente, queremos explorar el puerto 80 y qué tipo de servicio web se está alojando allí.

MSF - Búsqueda de Exploits

Procedemos a establecer los parámetros necesarios. Por ahora, estos serían LHOST y RHOST, ya que todo lo demás en el objetivo parece estar en la configuración predeterminada.

MSF - Configuración del Exploit y Payload

Tenemos nuestro shell de Meterpreter. Sin embargo, echemos un vistazo más de cerca a la salida anterior. Podemos ver que hay un archivo .asp llamado metasploit28857905 que existe en el sistema objetivo en este momento. Una vez que se obtiene el shell de Meterpreter, como se mencionó antes, residirá en la memoria. Por lo tanto, el archivo no es necesario y se intentó eliminar mediante msfconsole, que falló debido a permisos de acceso. Dejar rastros como estos no es beneficioso para el atacante y crea una gran responsabilidad.

Desde la perspectiva del administrador del sistema, encontrar archivos que coincidan con este tipo de nombre o ligeras variaciones de él puede ser beneficioso para detener un ataque en medio de su ejecución. Dirigir coincidencias de regex contra nombres de archivos o firmas como las anteriores no permitirá ni siquiera que un atacante genere un shell de Meterpreter antes de ser neutralizado por las medidas de seguridad configuradas correctamente.

Procedemos con nuestros exploits. Al intentar ver qué usuario estamos ejecutando, recibimos un mensaje de acceso denegado. Debemos intentar migrar nuestro proceso a un usuario con más privilegios.

MSF - Migración de Meterpreter

Ahora que hemos establecido al menos un nivel de privilegio en el sistema, es hora de escalar ese privilegio. Así que, miramos alrededor en busca de algo interesante, y en la ubicación C:\Inetpub\ encontramos una carpeta interesante llamada AdminScripts. Sin embargo, desafortunadamente, no tenemos permiso para leer lo que hay dentro.

MSF - Interacción con el Objetivo

Podemos decidir fácilmente ejecutar el módulo de sugerencia de exploits locales, adjuntándolo a la sesión activa de Meterpreter. Para hacerlo, enviamos la sesión de Meterpreter actual al segundo plano, buscamos el módulo que necesitamos y configuramos la opción SESSION al número de índice para la sesión de Meterpreter, vinculando el módulo a ella.

MSF - Manejo de Sesiones

Ejecutar el módulo de recon nos presenta con una multitud de opciones. Al revisar cada uno por separado, llegamos a la entrada ms15_051_client_copy_image, que resulta ser exitosa. Este exploit nos coloca directamente en un shell de root, dándonos el control total sobre el sistema objetivo.

MSF - Escalación de Privilegios

Desde aquí, podemos proceder a usar la gran cantidad de funcionalidades de Meterpreter. Por ejemplo, extraer hashes, suplantar cualquier proceso que deseemos, entre otros.

MSF - Extracción de Hashes

MSF - Volcado de Secretos LSA

Last updated

Was this helpful?