
# استغلال rt26cx21x64.sys (عائلة Realtek PCIe GbE/2.5GbE/5GbE)
استغلال rt26cx21x64.sys (عائلة Realtek PCIe GbE/2.5GbE/5GbE)
يقوم OID 0xFF816871 بتعيين نطاق mmio الخاص ببطاقة الشبكة إلى مساحة العنوان الافتراضية للعملية المستدعية، (MmLockedPagesSpecifyCache)، ويمكن الوصول إليه من وضع المستخدم عبر \.\RealTekCard{GUID}
هذا IOCTL (0x0012C818) محمي بقيمة سجل (DrvMode=4)
بمجرد حصولنا على وصول سجلات mmio، نقوم ببرمجة حلقات واصفات الإرسال/الاستقبال الخاصة ببطاقة الشبكة في وضع الاسترجاع (loopback) لقراءة/كتابة عناوين فيزيائية عشوائية (يمنحنا AllocateUserPhysicalPages أرقام إطارات الصفحات PFNs).
IOCTL 0x12C008 (1230872) هو أول فرع توزيع قابل للاستغلال. يؤدي 0x12C00C و 0x12C010 إلى مسارات مختلفة، ويحمل a5 رمز IOCTL عبر مفتاح التبديل

قبل الوصول إلى مسار DMA، يتحقق برنامج التشغيل من علامة DrvMode العامة، ويجب تعيين البت 2 أو لن نصل أبدًا إلى مسار تعيين MMIO القابل للاستغلال.

dword_1400D0208 و 4 هو الفحص
يوجد حارسان أمام المسار القابل للاستغلال، ويجب أن يكون كلاهما خاطئًا للوصول إلى مسار DMA، وهما علامة بايت على امتداد الجهاز وفحص الوضع في الصورة السابقة

!_(_BYTE _)(a1 + 12465) سهل التجاوز، فقط علينا التأكد من أن الجهاز غير مهيأ.
sub_14001B67C سهل أيضًا بشكل تافه.
يقوم برنامج التشغيل بتخصيص MDL فوق عنوان فيزيائي يوفره المستدعي دون أي تحقق، لا يوجد تحقق من الحدود أو النطاق، لا شيء على الإطلاق.

يتم تعيين MDL في مساحة العنوان الافتراضية للنواة ويتم إعطاء العنوان الأساسي للمستدعي، 0x40000010 هو MAP_NO_EXECUTE و MmNonCached.

ينتج MmMapLockedPagesSpecifyCache عنوان VA المعين الذي يُكتب إلى *a2 ويُعاد إلى وضع المستخدم، وهذا يمنحنا بدائية قراءة/كتابة فيزيائية عشوائية.
nic.h.شغّل كمسؤول.
بعد التشغيل الأول، سيتم تعيين قيم السجل وستحتاج إلى إعادة تشغيل جهاز الكمبيوتر.
لكي يعمل هذا، يجب أن تكون بطاقة الشبكة في حالة ارتباط UP (حتى نتمكن من معالجة الواصفات).
إما:
أو
$ cmake -B build
$ cmake --build build --config Release