
إساءة استخدام كائن DCOM لبعض الخدمات وامتياز SeImpersonatePrivilege.
يستخدم DCOM مستوى انتحال RPC_C_IMP_LEVEL_IDENTIFY كإعداد افتراضي لاستدعاء IUnknown الصادر الافتراضي، انظر https://learn.microsoft.com/en-us/windows/win32/com/com-security-defaults. بالطبع، يمكن لخادم COM تجاوز ذلك عن طريق استدعاء CoInitializeSecurity صراحةً.
نعلم أن معظم خدمات ويندوز تسجّل خادم DCOM الخاص بها لتوفير الميزات، ويتم استضافة Shared Process Service بواسطة svchost، ويُقرأ مستوى انتحال الشخصية الافتراضي من السجل.
إذا مرّرنا كائن IUnknown خبيث كوسيط في بعض استدعاءات DCOM، فستقوم عملية الخدمة باستدعاء IRemUnknown::RemQueryInterface/RemRelease/RemAddref على كائن الوكيل (ProxyObject)، وعندها يمكننا الحصول على رمز SecurityImpersonation عبر CoImpersonateClient لأننا أصبحنا 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 (خطاف vtbl لكائن IUnknown، انظر McpManagementPotato).
csc /unsafe PrinterNotifyPotato.cs
csc /unsafe McpManagementPotato.cs
McpManagementPotato/PrinterNotifyPotato <command>


شكرًا لـ UnmarshalPwn!
(وأحب قطتي، Vanilla، هل يمكن لأحدهم تحويلها إلى nekogirl؟)