Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2019-25485 — تجاوز سعة المخزن المؤقت القائم على المكدس في R 3.4.4. استغلال كامل على x86، ولكن فقط التحكم في RIP مع تحليل الأدوات على x64 بسبب قيود البرنامج. نفس الثغرة عبر معماريتين، مما يؤدي إلى مسارات استغلال مختلفة. | Kitploit
أدوات/GitHubGitHub/themalwareguardian/cve-2019-25485
تحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةشيل كودمصممي الأخطاءالتعلم والتعليمتطوير الحمولاتاستغلال الملفات الثنائية
GitHub
themalwareguardian/cve-2019-25485

CVE-2019-25485

تجاوز سعة المخزن المؤقت القائم على المكدس في R 3.4.4. استغلال كامل على x86، ولكن فقط التحكم في RIP مع تحليل الأدوات على x64 بسبب قيود البرنامج. نفس الثغرة عبر معماريتين، مما يؤدي إلى مسارات استغلال مختلفة.

عرض المستودع
3منذ 5 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

🐞 CVE-2019-25485: R 3.4.4 - تجاوز سعة المخزن المؤقت المستند إلى المكدس (x86 و x64)

تجاوز سعة المخزن المؤقت المستند إلى المكدس في R 3.4.4. استغلال كامل على x86، ولكن فقط التحكم في RIP مع تحليل القطع على x64 بسبب قيود البرنامج. نفس الثغرة عبر معماريتين، مما يؤدي إلى مسارات استغلال مختلفة.




📑 جدول المحتويات

  • لماذا يوجد هذا المستودع
  • لماذا هذه الثغرة مثيرة للاهتمام
  • السياق والبرنامج المتأثر
  • حول الثغرة
  • إحداث التعطل
  • الاستغلال



🎓 لماذا يوجد هذا المستودع

هذا المستودع جزء من المواد التي أستخدمها عند تدريس استغلال تلف الذاكرة (بالإضافة إلى عملي المعتاد، أدرس أيضًا في دورات مختلفة في الأمن السيبراني حيث أساعد في تدريب الجيل القادم من مهندسي الهندسة العكسية).

CVE-2019-25485 هي الحالة التي أستخدمها عندما أريد من الطلاب العمل على نفس الثغرة على معماريتين مختلفتين ورؤية ما يتغير بينهما بأنفسهم. يأتي R 3.4.4 في إصدارات x86 و x64، ونفس التجاوز موجود في كليهما، نفس حقل واجهة المستخدم الرسومية، نفس معالج الإدخال، نفس التعطل. تم توثيق كليهما واستغلالهما هنا كتمرينين منفصلين:

  • إصدار x86 يتبع المنهجية الكلاسيكية لتجاوز EIP. يصل التجاوز إلى EIP، ويتم العثور على قطعة JMP ESP في وحدة بدون ASLR، ويتم وضع شيلكود بعد تجاوز EIP، ويتم تحقيق شل عكسي فعال. إنه استغلال نظيف ومباشر يوضح أساسيات تجاوزات سعة المخزن المؤقت المستندة إلى المكدس.
  • إصدار x64 يصل إلى التحكم في RIP ويؤكد الإزاحة، لكن لا يتم تحقيق RCE كاملة. هذا متعمد وهو هدف التمرين. توثق محاولة استغلال x64 عملية البحث عن القطع بالكامل، وتحلل سبب فشل كل فئة من القطع في هذا السياق المحدد، وتشرح قيد البايت الفارغ الذي يفرضه معالج الإدخال، وتصف هيكل سلسلة ROP التي ستكون مطلوبة لتجاوز DEP ولماذا لا يمكن بناؤها نظرًا لقيود وسيلة الإدخال هذه. المسار النظري الوحيد المتبقي للاستغلال الكامل من هذه الثغرة الواحدة هو JOP، البرمجة الموجهة بالقفز، التي تربط القطع التي تنتهي بـ JMP بدلاً من RET ولا تعتمد على المكدس لتدفق التحكم. بناء سلسلة JOP يدويًا دون أي منطقة قابلة للكتابة يمكن التحكم فيها بعد تجاوز RIP هو تحدٍ مفتوح متقدم يخرج عن نطاق هذا التمرين. الفشل ليس فجوة في المنهجية. إنه الدرس.



💡 لماذا هذه الثغرة مثيرة للاهتمام

R 3.4.4 هو تطبيق حوسبة إحصائية، وليس خدمة شبكة أو متصفح. يتم تشغيل التجاوز من خلال حقل واجهة مستخدم رسومية سطح المكتب، مما يعني أن سطح الهجوم مختلف تمامًا عن كل حالة أخرى أقوم بتدريسها. ما يجعل هذه الحالة مفيدة للتدريس:

  • لا يوجد مكون شبكة. يتم لصق الحمولة في حقل واجهة مستخدم رسومية، مما يقدم فئة مختلفة من القيود، خاصة كيفية معالجة معالج الإدخال لواجهة المستخدم الرسومية للبايتات قبل وصولها إلى عملية النسخ القابلة للاستغلال.
  • تم تأكيد التحكم في RIP. يصل التجاوز إلى RIP ويتم العثور على الإزاحة. هذه ليست حالة لا يمكن الوصول فيها إلى الثغرة. تم إثبات التحكم في مؤشر التعليمات بالكامل.
  • فرض العنوان القانوني يكسر النهج الكلاسيكي. على x86 تقوم بتجاوز EIP وإلحاق شيلكود. على x64 يجب أن تكون البايتات العليا لـ RIP \x00\x00 ليكون العنوان قانونيًا، وتقوم تلك البايتات الفارغة بإنهاء الإدخال فورًا بعد عنوان القطعة. لا توجد مساحة للشيلكود أو قيم سلسلة ROP بعد التجاوز.
  • تحويل البايت الفارغ يمنع ROP. يقوم حقل واجهة المستخدم الرسومية بتحويل البايتات الفارغة إلى مسافات قبل النسخ إلى المخزن المؤقت. كل عنوان x64 يحتوي على بايتات فارغة في النصف العلوي. لا يمكن وضع أي عنوان قطعة على المكدس كقيمة لسلسلة ROP، فهي تصل جميعها تالفة.
  • DEP يمنع التنفيذ المباشر. حتى لو تم إيجاد طريقة للوصول إلى مخزن الشيلكود، فإن DEP مفعل ويمنع التنفيذ على المكدس.
  • تم توثيق البحث عن القطع بالكامل. تم توثيق عملية تفريغ القطع من كل وحدة محملة، وتصفيتها حسب النوع، ومناقشة سبب فشل كل قطعة خطوة بخطوة. هذه هي المهارة الأساسية التي يحتاجها كل مطور استغلال.
  • تم شرح هيكل سلسلة ROP لـ VirtualProtect. يرى الطلاب بالضبط ما هو مطلوب لتجاوز DEP، ولماذا تهم اصطلاحات الاستدعاء، ولماذا لا يمكن بناء هذه السلسلة المحددة نظرًا لقيود الإدخال.



🔍 السياق والبرنامج المتأثر

R هي بيئة حوسبة إحصائية ورسومية متاحة لأنظمة Windows و macOS و Linux. الثغرة موجودة في مربع حوار تفضيلات واجهة المستخدم الرسومية، وتحديدًا حقل اللغة للقوائم والرسائل، الذي ينسخ إدخال المستخدم إلى مخزن مؤقت على المكدس بحجم ثابت دون التحقق من طوله.

تفاصيل فنية رئيسية:

  • نوع الثغرة: تجاوز سعة المخزن المؤقت المستند إلى المكدس
  • الإصدار المتأثر: R 3.4.4 x86_x64
  • نقطة النهاية المتأثرة: Edit -> GUI Preferences -> Language for menus and messages
  • المكون القابل للاستغلال: معالج إدخال تفضيلات واجهة المستخدم الرسومية
  • المصادقة المطلوبة: لا (تطبيق محلي)
  • التأثير: x86 - تنفيذ تعليمات برمجية عن بعد | x64 - تأكيد تدفق التحكم



⚠️ حول الثغرة

يقوم R 3.4.4 بمعالجة حقل اللغة للقوائم والرسائل عن طريق نسخ السلسلة المقدمة إلى مخزن مؤقت على المكدس بحجم ثابت دون التحقق من طولها. يبدو إصدار مبسط من المنطق القابل للاستغلال كالتالي:

root@kitploit:~
char language_buffer[256];

strcpy(language_buffer, user_input);

إرسال سلسلة طويلة بما يكفي يتسبب في نسخ يتجاوز نهاية المخزن المؤقت، مما يفسد المكدس حتى يتم تجاوز عنوان العودة المحفوظ. عندما تعود الدالة، يقوم المعالج بتحميل القيمة التي يتحكم فيها المهاجم من المكدس إلى RIP ويحاول القفز إليها.

على x64، يفرض Windows التحقق من العنوان القانوني قبل أي قفزة. قيمة غير قانونية مثل 0x4141414141414141 تؤدي فورًا إلى انتهاك الوصول قبل تحميل RIP، مما يعني أن التعطل يبدو مختلفًا عن x86، لا يوجد RIP = 4141414141414141 نظيف. يجب العثور على الإزاحة عن طريق قراءة النمط الدوري من المكدس بعد التعطل بدلاً من قراءتها مباشرة من RIP.




💥 إحداث التعطل

يمكن إعادة إنتاج التعطل عن طريق لصق سلسلة طويلة في حقل اللغة. لا يلزم مصادقة. مثال باستخدام بايثون لتوليد الحمولة:

root@kitploit:~
import struct

payload = b'A' * 400

with open('payload.txt', 'wb') as f:
	f.write(payload)
root@kitploit:~
افتح R 3.4.4 x64
Edit -> GUI Preferences
ألصق محتويات payload.txt في Language for menus and messages
انقر OK



تنزيل الأداة

💣 الاستغلال

الهدف من هذا المستودع ليس فقط إظهار التعطل، بل السير خلال عملية الاستغلال الكاملة على كلتا المعماريتين، وتوثيق ما ينجح على x86، وما ينهار على x64، والأهم من ذلك، لماذا.

للحفاظ على نظافة README الرئيسي، تم وضع الملاحظات التفصيلية للاستغلال والبرامج النصية وخطوات المٌصحح داخل مجلد Vulnerability 📂 في هذا المستودع، منظمة في مجلدات فرعية منفصلة x86 و x64.

هناك ستجد سير العمل الكامل لكلا المعماريتين:

x86 - الاستغلال الكامل:

  • اختبار التعتيم لحقل اللغة لتحديد التعطل.
  • اكتشاف الإزاحة لتحديد الموضع الدقيق لـ EIP على المكدس.
  • تحليل الأحرف السيئة لتحديد البايتات التي تفسد الحمولة.
  • تحديد موقع قطعة JMP ESP في stats.dll، وهي وحدة تم تجميعها بدون ASLR أو SafeSEH.
  • وضع الشيلكود وتنفيذه، تحقيق شل عكسي كامل.

x64 - التحكم في RIP وتحليل الاستغلال:

  • تكوين x64dbg لتجنب المقاطعات المستمرة من أحداث تحميل DLL.
  • اختبار التعتيم لحقل اللغة عبر ثلاث مراحل للعثور على حجم التعطل الدقيق.
  • العثور على إزاحة RIP عن طريق قراءة النمط الدوري من المكدس بدلاً من RIP.
  • تأكيد التحكم في RIP باستخدام تجاوز 6 بايت مع حشو بايت فارغ تلقائي.
  • تحديد تحويل البايت الفارغ إلى مسافة كقيد أساسي للإدخال.
  • تفريغ القطع من جميع وحدات R المحملة باستخدام rp++ وتصفيتها باستخدام PowerShell.
  • تحليل كل فئة من القطع: CALL RBX، CALL RSP، POP RSP، SUB RSP، PUSH RSP، وتوثيق سبب فشل كل منها في هذا السياق المحدد.
  • شرح هيكل سلسلة ROP المطلوبة لاستدعاء VirtualProtect وتجاوز DEP، ولماذا لا يمكن بناؤها نظرًا لقيد البايت الفارغ.
  • توثيق JOP كالمسار النظري الوحيد المتبقي ولماذا يظل تحديًا مفتوحًا.