
استغلال برنامج تشغيل Win10Pcap لتمكين بعض الصلاحيات في رمز العملية الخاص بنا (تصعيد صلاحيات محلي)
الفضل يعود إلى
https://twitter.com/R00tkitSMM ([email protected]) اسم المستخدم في تيليغرام : https://telegram.me/firozi
منذ بضعة أيام اكتشفت ثغرة في مشغّل win10pcap يمكن أن تؤدي إلى تصعيد الامتيازات. أبلغت عن الثغرة والآن تم إصلاح الخلل:
لذلك قررت نشر نموذج استغلال للثغرة.
Win10Pcap هي مكتبة جديدة لالتقاط حزم إيثرنت مبنية على WinPcap. على عكس WinPcap الأصلية، فإن Win10Pcap متوافقة مع نموذج مشغّلات NDIS 6.x لتعمل بثبات مع ويندوز 10. كما تدعم Win10Pcap التقاط وسوم IEEE802.1Q VLAN.
لذلك إذا قمت بتثبيت Wireshark على ويندوز 10 فستحتاج إلى هذا الشيء :)
مشغّل Win10Pcap في وضع النواة (kernel-mode) لم يتحقق من العناوين الافتراضية التي يتم تمريرها من وضع المستخدم (user-mode)، حيث تستخدم IOCTL أسلوب Neither Buffered Nor Direct I/O بدون استخدام ProbeForWrite للتحقق من العنوان المُمرَّر.
تحتاج إلى العثور على اسم الجهاز (Device name) الدقيق في وقت التشغيل لإرسال IOCTL، فاسم الجهاز المكتوب بشكل ثابت (hardcoded) لا يؤدي إلى الكود القابل للاستغلال.
معالج IOCTL يكتب سلسلة نصية في العنوان المُمرَّر، وتكون السلسلة شيئًا مثل "Global\WTCAP_EVENT_3889023063_1".
كانت هناك طرق عديدة لاستغلال هذه الثغرة، فقررت تعيين صلاحية (privilege) في رمز العملية (TOKEN) عن طريق الكتابة فوق _SEP_TOKEN_PRIVILEGES.
الكتابة فوق الرمز (token) عند العنوان 0x034 بالسلسلة "Global\WTCAP_EVENT" يمكن أن تُعيّن صلاحية SeDebugPrivilege دون إتلاف الحقول الحساسة.
81687cf8 cc int 3
2: kd> dt nt!_TOken
+0x000 TokenSource : _TOKEN_SOURCE
+0x010 TokenId : _LUID
+0x018 AuthenticationId : _LUID
+0x020 ParentTokenId : _LUID
+0x028 ExpirationTime : _LARGE_INTEGER
+0x030 TokenLock : Ptr32 _ERESOURCE
+0x034 ModifiedId : _LUID
+0x040 Privileges : _SEP_TOKEN_PRIVILEGES
+0x058 AuditPolicy : _SEP_AUDIT_POLICY
