
विंडोज़ प्रिंट स्पूलर विशेषाधिकार वृद्धि भेद्यता (CVE-2019-1040/CVE-2019-1019) को पैठ परीक्षण के लिए Reflective DLL के रूप में लागू किया गया है।
PrintSpoofer एक उपकरण है जो Windows Print Spooler सेवा (CVE-2019-1040 / CVE-2019-1019) में एक भेद्यता का फायदा उठाकर स्थानीय विशेषाधिकार वृद्धि (local privilege escalation) करता है। यह परियोजना PrintSpoofer एक्सप्लॉइट को Reflective DLL प्रारूप में लागू करती है, जिससे यह Cobalt Strike जैसे पैठ परीक्षण (penetration testing) ढाँचों के साथ उपयोग के लिए उपयुक्त हो जाता है।
PrintSpoofer Windows Print Spooler सेवा में एक भेद्यता का फायदा उठाता है जो कम-विशेषाधिकार वाले उपयोगकर्ता को SYSTEM-स्तरीय विशेषाधिकार प्राप्त करने की अनुमति देता है। यह एक्सप्लॉइट Print Spooler सेवा द्वारा नामित पाइप (named pipes) को संभालने के तरीके का दुरुपयोग करता है।
PrintSpoofer निम्नलिखित चरणों को निष्पादित करके कार्य करता है:
एक्सप्लॉइट पहले जाँचता है कि वर्तमान टोकन में SE_IMPERSONATE_NAME विशेषाधिकार है या नहीं। किसी अन्य उपयोगकर्ता के टोकन का प्रतिरूपण करने के लिए यह आवश्यक है।
एक यादृच्छिक UUID का उपयोग करके एक named pipe बनाया जाता है। पाइप पथ है:
\\.\pipe\<UUID>\pipe\spoolss
बनाए गए named pipe पर एक अतुल्यकालिक (asynchronous) कनेक्शन की प्रतीक्षा की जाती है। एक event बनाया जाता है, और पाइप को आने वाले कनेक्शन स्वीकार करने के लिए तैयार किया जाता है।
एक अलग थ्रेड में, Print Spooler सेवा के लिए एक RPC कॉल की जाती है।
RpcRemoteFindFirstPrinterChangeNotificationEx को आमंत्रित करके, सेवा हमारे द्वारा बनाए गए पाइप से कनेक्ट करने का प्रयास करती है।
जब Print Spooler सेवा (SYSTEM के रूप में चल रही) named pipe से कनेक्ट होती है, तो एक्सप्लॉइट सेवा के टोकन का प्रतिरूपण करने के लिए ImpersonateNamedPipeClient का उपयोग करता है।
इसके परिणामस्वरूप SYSTEM विशेषाधिकार प्राप्त होते हैं।
SYSTEM टोकन के साथ, अब उच्च-विशेषाधिकार वाली क्रियाएँ निष्पादित की जा सकती हैं।
Windows Print Spooler सेवा नामित पाइप के माध्यम से प्रिंटर अधिसूचनाओं को संसाधित करती है। चूँकि सेवा पाइप कनेक्शन को ठीक से सत्यापित नहीं करती है, एक हमलावर इसे एक दुर्भावनापूर्ण पाइप से कनेक्ट करने के लिए मजबूर कर सकता है और फिर SYSTEM टोकन का प्रतिरूपण कर सकता है।
यह परियोजना MS-RPRN (Print System Remote Protocol) का उपयोग करके Print Spooler सेवा के साथ संचार करती है। यह प्रोटोकॉल एक IDL (Interface Definition Language) फ़ाइल के माध्यम से परिभाषित किया गया है और RPC कॉल को सक्षम बनाता है।
एक reflective DLL मानक DLL से अलग व्यवहार करती है:
LoadLibrary API की आवश्यकता नहीं होती हैVisual Studio में PrintSpoofer.sln फ़ाइल खोलें।
अपना Solution Platform और Configuration चुनें:
x64 या Win32 (लक्ष्य आर्किटेक्चर के आधार पर)Release (उत्पादन) या Debug (विकास)Build Solution (Ctrl+Shift+B) के माध्यम से समाधान बनाएँ।
संकलित DLL निम्न स्थान पर होगा:
PrintSpoofer\x64\Release\PrintSpoofer.dll (for x64)
PrintSpoofer\Win32\Release\PrintSpoofer.dll (for x86)
परियोजना निम्नलिखित प्रीप्रोसेसर परिभाषाओं का उपयोग करती है:
REFLECTIVE_DLL_EXPORTS: Reflective DLL निर्यात सक्षम करता हैREFLECTIVEDLLINJECTION_CUSTOM_DLLMAIN: एक कस्टम DllMain का उपयोग करता हैREFLECTIVEDLLINJECTION_VIA_LOADREMOTELIBRARYR: LoadRemoteLibraryR सक्षम करता है (Release मोड में)PrintSpoofer को Cobalt Strike के elevate कमांड के साथ उपयोग किया जा सकता है:
elevate PrintSpoofer LISTENER_NAME
जहाँ:
PrintSpoofer: एलिवेटर मॉड्यूल नामLISTENER_NAME: वह listener जो उन्नत शेल प्राप्त करेगाDLL को Reflective DLL इंजेक्शन तकनीकों का उपयोग करके मैन्युअल रूप से लोड किया जा सकता है।
एक सफल एक्सप्लॉइट निष्पादन निम्न दिखाएगा:
[+] Found privilege: SeImpersonatePrivilege
[+] Named pipe listening...
[+] ImpersonateNamedPipeClient OK
[+] Exploit successfully, enjoy your shell
dllmain.cppDllMain)PrintSpoofer.cppms-rprn.idlReflectiveLoader.cppयह उपकरण केवल शैक्षिक उद्देश्यों और अधिकृत पैठ परीक्षण के लिए है।
यह परियोजना MIT लाइसेंस के अंतर्गत लाइसेंस प्राप्त है। अधिक जानकारी के लिए, LICENSE फ़ाइल देखें।