
कुछ सेवा DCOM ऑब्जेक्ट और SeImpersonatePrivilege दुरुपयोग।
DCOM डिफ़ॉल्ट प्रतिरूपण स्तर के रूप में RPC_C_IMP_LEVEL_IDENTIFY का उपयोग करता है, डिफ़ॉल्ट आउट-बाउंड IUnknown कॉल के लिए, देखें https://learn.microsoft.com/en-us/windows/win32/com/com-security-defaults। बेशक, COM सर्वर CoInitializeSecurity को स्पष्ट रूप से कॉल करके इसे ओवरराइड कर सकता है।
हम जानते हैं कि अधिकांश विंडोज़ सेवाएँ सुविधाएँ प्रदान करने के लिए अपने DCOM सर्वर को पंजीकृत करती हैं, साझा प्रक्रिया सेवा svchost द्वारा होस्ट की जाती है, registry से डिफ़ॉल्ट प्रतिरूपण स्तर पढ़ें।
यदि हम किसी DCOM कॉल पर पैरामीटर के रूप में एक दुर्भावनापूर्ण IUnknown ऑब्जेक्ट पास करते हैं, तो सेवा प्रक्रिया ProxyObject पर IRemUnknown::RemQueryInterface/RemRelease/RemAddref को कॉल करेगी, अब हम CoImpersonateClient द्वारा SecurityImpersonation टोकन प्राप्त कर सकते हैं क्योंकि हम इस समय DCOM Server हैं।
निम्नलिखित डिफ़ॉल्ट इंस्टॉलेशन में ImpersonationLevel को स्पष्ट रूप से RPC_C_IMP_LEVEL_IMPERSONATE के रूप में सेट किया गया था:
#after 12r2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\print@ImpersonationLevel
#2022 only
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\McpManagementServiceGroup@ImpersonationLevel
सेवाएँ PrinterNotify और McpManagementService हैं, जो SYSTEM के रूप में चल रही हैं।
ध्यान दें कि यह कोड केवल x64 और NetFX 4.x को सपोर्ट करता है, लेकिन आप FX2.0/x86 संगतता के लिए थोड़ा बदलाव कर सकते हैं (IUnknown vtbl हुक, McpManagementPotato देखें)।
csc /unsafe PrinterNotifyPotato.cs
csc /unsafe McpManagementPotato.cs
McpManagementPotato/PrinterNotifyPotato <command>


UnmarshalPwn के लिए धन्यवाद!
(और मेरी बिल्ली, Vanilla से प्यार करें, क्या कोई इसे नेकोगर्ल बना सकता है?)