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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2020-0022 — استغلال RCE عبر Bluetooth بدون نقر لنظام Android 8-9 (CVE-2020-0022) مع رش الكومة وتسريب العناوين وتنفيذ سلسلة JOP لتنفيذ التعليمات البرمجية عن بُعد عبر ثغرة BlueFrag. | Kitploit
أدوات/GitHubGitHub/kalibb/cve-2020-0022
أمان أندرويدأمن البلوتوثالاستغلالالهندسة العكسيةشيل كودمصممي الأخطاءCTFأمن الجوالالتعلم والتعليمأداة الوصول عن بعدتطوير الحمولاتاستغلال الملفات الثنائية
17منذ 7 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
GitHubkalibb/cve-2020-0022

CVE-2020-0022

استغلال RCE عبر Bluetooth بدون نقر لنظام Android 8-9 (CVE-2020-0022) مع رش الكومة وتسريب العناوين وتنفيذ سلسلة JOP لتنفيذ التعليمات البرمجية عن بُعد عبر ثغرة BlueFrag.

عرض المستودع

CVE-2020-0022

جزيل الشكر لـ Insinuator على مقالتهم المذهلة وكودهم!

النتائج

تم إنجاز جميع الخطوات المذكورة في مقال Insinuator، والمزيد. وهذه خطوات كثيرة لوضعها في ملف README.md، لذا لا تتردد في الاطلاع على مقال Insinuator المذكور أعلاه.

الاستغلال مكتمل تمامًا حتى النقطة التي:

  1. يتم تسريب عنوان منطقة ذاكرة كبيرة يتحكم فيها المهاجم بشكل كافٍ
  2. يتم تعديل عداد البرنامج ليُشير إلى عنوان مخصص
  3. تتم إعادة المحاولات تلقائيًا إلى الحد الذي تنخفض فيه احتمالات الفشل بشكل ملحوظ
  4. يتم تحسين الكود من حيث زمن قطع الاتصال وسرعة البحث في الذاكرة إلى الحد الذي تؤدي فيه المزيد من التحسينات إلى المساس باستقرار الاستغلال

الاختلافات والتحسينات

يختلف هذا الاستغلال عن تنفيذ Insinuator في النواحي التالية:

  1. مكتوب بلغة C بدلاً من بايثون (لأنني أحب لغة C)
  2. مكتوب بطريقة نمطية، حيث تكون كل وحدة مسؤولة عن مهمة محددة
  3. تم اختباره على Pixel 3 XL يعمل بنظام Android 9 (PQ3A.190801.002، مستوى التصحيح الأمني 2019-08-01) لأن هذا ما كان متاحًا لدي
  4. يقوم بتسريب العناوين في libandroid_runtime.so بدلاً من libicuuc.so، لأن ذلك عمل بشكل أفضل على هذا الهاتف/الهدف
  5. يتضمن سلسلتي JOP مثاليتين، إحداهما تستدعي execv مباشرةً والأخرى تستدعي fork ثم execv
  6. مصحوب بـ سكربت Ghidra مخصص يعالج ملف libandroid_runtime.so ويستخرج إزاحات الدوال والأدوات (لتسهيل نقل الاستغلال إلى أهداف أخرى)

العرض التوضيحي/لقطات الشاشة

هذا عرض فيديو يوضح الاستغلال وهو يعدّل PC ليُشير إلى عنوان مخصص: فيديو تجريبي لإثبات المفهوم

النسخة الأولى من السلسلة هي تلك التي يمكن رؤيتها في jop_experiment. تستدعي هذه السلسلة execv مباشرةً دون استدعاء fork. ويمكن العثور عليها في commit ca28fdf وهذا ما يحدث عند استخدام هذه السلسلة: سلسلة Execv

النسخة الثانية من السلسلة هي تلك التي تستدعي fork ثم execv. يمكن العثور على التفاصيل الكاملة لهذه السلسلة هنا. وهذا ما يحدث عند استخدام هذه السلسلة: سلسلة Fork

لحسن الحظ، يمتلك Pixel 3 XL حمايات تمنع عملية البلوتوث من استدعاء fork و/أو execv. فيما يتعلق بمشاركة المعرفة أو الاستعراض، فقد انتهى عملي هنا. إذا كتبت وشاركت شيئًا أكثر تقدمًا، فقد يكون مفيدًا جدًا لذوي القبعات السوداء.

خلاصة الاستغلال

أعتبر هذا الاستغلال مكتملًا. التحسينات المستقبلية قد تشمل:

  • كتابة سلسلة JOP لاستدعاء dlsym ثم mprotect لتشغيل شيل كود مخصص
  • جمع وحفظ قاعدة بيانات للإزاحات لأهداف مختلفة
  • اختبار الاستغلالات على أهداف متعددة بهدف تحقيق عالمية نسبية
  • دمج الاستغلال مع استغلال على مستوى نظام التشغيل للحصول على صلاحيات الجذر (مثل استغلال CVE-2019-2215 السابق لي)
  • والمزيد...

كل هذه الأمور تحوّل هذا المشروع من مشروع ممتع لمشاركة المعرفة إلى استغلال للقبعات السوداء يمكن تسليحه، لذا فهنا تنتهي رحلتي، في الوقت الحالي.... إذا كانت لديك أي أسئلة، لا تتردد في التواصل معي.

الاستخدام

لتشغيل الاستغلال، قم فقط بتشغيل:

root@kitploit:~
make build run ARGS="00:00:00:00:00:00" 

حيث 00:00:00:00:00:00 هو عنوان MAC لجهاز الهدف/الضحية. وبخلاف make clean، فإن باقي أهداف البناء مفيدة فقط إذا كنت تحاول تعديل الاستغلال أو تحسينه أو إعادة تنفيذه، لذا لا حاجة لذكرها بالتفصيل.

التصحيح

  • يمكن العثور على ثنائي gdbserver الخاص بنظام أندرويد في مجلد NDK
  • استخدم هذا لتصحيح أخطاء الهدف (غير موصى به):
root@kitploit:~
# On target
/data/local/tmp/gdbserver 0.0.0.0:1234 --attach $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}')

# On host
adb forward tcp:1234 tcp:1234
gdb-multiarch -q -x ./gdbinit
  • مباشرةً على الهاتف عبر gdb الخاص بـ termux (موصى به):
root@kitploit:~
# On host
adb push ./gdbinit /data/local/tmp/gdbinit

# On target
su
/data/data/com.termux/files/usr/bin/gdb -q -x /data/local/tmp/gdbinit -p $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}') 
# OR
/data/data/com.termux/files/usr/bin/gdb -q -p $(ps -A | grep -i "com.android.bluetooth" | awk '{print $2}') 

يمكنك إعادة تشغيل خدمة البلوتوث على جهاز المهاجم في حال توقفت عن العمل:

root@kitploit:~
sudo systemctl restart bluetooth.service

ملاحظات

يشرح هذا القسم بعض الظواهر التي لوحظت أثناء تطوير هذا الاستغلال:

  • يتم إيقاف SSP (عند إنشاء واصف مقبس HCI) لمنع انتهاء المهلة على الهدف البعيد:

مهلة SSP PIN

  • نقوم برش حزم تنظيف الكومة لتقليل فرصة تعطل الهدف بسبب تجاوز غير مقصود في الذاكرة يعدّل جداول vtables لكائن base::MessageLoop المستخدم عبر get_message_loop:

تعطل CFI MessageLoop

  • لم يتم شرح هذا جيدًا في مقال Insinuator. نقوم بتسريب عنوان حزمة من خلال محاولة استهداف قطع malloc ذات الـ32 بايت، والتي تتضمن عنصر قائمة مرتبطة واحدًا لكل عنصر في unordered_map الخاص بـ partial_packets. تم اكتشاف ذلك باستخدام map_experiment لا يتطابق map_experiment مع ما يتم تسريبه في البرنامج الفعلي، لذا اتبعت ببساطة نمط Insinuator واستخدمت نمطًا آخر (والذي اكتشفته أيضًا بالتجربة).
نتيجة map_experiment

نتيجة تجربة الخريطة

  • يتسبب الانهيار والكتابة فوق PC في تعطل كائن إشارة chrome بنجاح

تعطل كائن إشارة LibChrome

  • تمت محاكاة سلسلة JOP باستخدام jop_experiment. تم شرح سلسلة JOP الكاملة (الأولى، التي تستدعي execv فقط) في JOP_PLAN.md

نتيجة تجربة JOP

تنزيل الأداة