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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/lmol/cve-2021-3156
تصعيد الامتيازاتتوليد الحمولةتحليل الثغرات الأمنيةالاستغلالاختبار الاختراقالتعلم والتعليمالفريق الأحمراستغلال الملفات الثنائية
GitHublmol/cve-2021-3156

CVE-2021-3156

مولّد استغلال لثغرة sudo CVE-2021-3156

عرض المستودع
41منذ 5 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

عنوان المشروع

مولّد استغلال لثغرة CVE-2021-3156 في sudo

التثبيت

  1. ثبّت التبعيات: ./install.sh
  2. شغّل مولّد الاستغلال: ./run.sh
  3. إذا كانت نسخة sudo المثبتة على النظام قابلة للاستغلال، يُولَّد استغلال للنسخة المثبتة
  4. يُولَّد الاستغلال في exploit.c والملف الثنائي ./exploit

المتطلبات

  1. gdb gcc make python3 python3-distro
  2. glibc مع tcache
  3. حالياً أنظمة التشغيل Ubuntu و Debian.

تم اختباره على

  • Ubuntu 20.04.1
  • Ubuntu 20.04.2
  • Ubuntu 20.10
  • Ubuntu 18.04.5
  • Debian 10.7.0

المؤلف

  • Luis Molina Garzón - (https://gitlab.iesvirgendelcarmen.com/luis/CVE-2021-3156/)

  • Qualys Research Team. (https://blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit)

الثغرة

  • يُفلت sudo المحارف الأولية في الدالة parse_args الموجودة في main
  • لاحقاً، في set_cmnd، تُزال محارف الهروب التي لا يتبعها مسافة
  • يفترض sudo أن parse_args شرط مسبق لـ set_cmnd.
  • المشكلة أن الشروط تختلف في كل محلل. الأول يُنفَّذ إذا كان الوضع (MODE_RUN && MODE_SHELL). والثاني يُنفَّذ إذا كان الوضع (MODE_RUN | MODE_EDIT | MODE_CHECK) و(MODE_SHELL|MODE_LOGIN_SHELL)
  • توجد طريقة لعدم تنفيذ المحلل الأول مع تنفيذ الثاني: sudoedit -s
  • تحسب set_cmnd حجم الوسائط وتنشئ كتلة (chunk) في الكومة (heap) لربطها. بعد ذلك تنسخ كل وسيط حتى تعثر على بايت فارغ (null byte) ثم تتابع بالوسيط التالي. إذا انتهت وسيطة الإدخال بـ '\' تتخطى set_cmnd محرف الهروب، وتنسخ البايت الفارغ لكنها تواصل نسخ الوسيط التالي كما لو كان هو نفسه. ينتج عن هذا تجاوز في سعة المخزن المؤقت في الكومة.
  • لذلك إذا انتهت الوسيطة الأخيرة بـ '\' فإن set_cmnd تفيض المخزن المؤقت بمحتوى أول متغير بيئة. وإذا انتهى متغير البيئة هذا بـ '\' فستواصل نسخ المتغير التالي.

مولّد الاستغلال

  • تُستخدم الطريقة الثانية الموصوفة في (https://packetstormsecurity.com/files/161160/Sudo-Heap-Based-Buffer-Overflow.html)
  • يستخدم sudo مكتبة glibc مع nsswitch لقراءة قاعدة بيانات group بعد التجاوز.
  • ينشئ nsswitch بنية بيانات service_table في الكومة تحتوي على جميع قواعد البيانات والخدمات الموجودة في nsswitch.conf.
  • خدمات group من النوع struct service_user.
  • تحتوي البنية على حقل name يحمل اسم الخدمة.
  • يقوم nsswitch بتحميل مكتبة libnss_[اسم_الخدمة]_.so.2 ديناميكياً وفقاً لإعدادات /etc/nsswitch.conf لكل خدمة من خدمات قاعدة بيانات group.
  • يجب إعادة كتابة المؤشر library بقيمة NULL لتجنب الانهيار (crash). كما يؤدي هذا إلى إعادة تحميل المكتبة في الذاكرة، وهذه المرة تكون مكتبة محلية تحتوي على الشيل كود.
  • تُستخدم تقنية heap grooming أو feng shui. تُنشأ متغيرات بيئة "محلية" بأحجام متغيرة لإنشاء تخطيط (layout) في الكومة يسمح بتقريب الكتلة التي تنسخ فيها set_cmnd الوسائط من الهدف، وهو بنية service_user الخاصة بـ group.
  • قبل تنفيذ malloc الخاصة بـ set_cmnd مباشرةً، تُفحص tcache الخاصة بالكومة لمعرفة أولى الكتل التي سيُعاد تدويرها وأحجامها.
  • تُرتَّب الكتل التي تشكل قواعد بيانات وخدمات nsswitch وتُمسح بترتيب منتظم. يُخزَّن عنوان الذاكرة الخاص بالكتلة الهدف والكتلة السابقة لها.
  • يُبحث في tcache bin عن كتلة تقع ضمن ذلك النطاق.
  • بمجرد معرفة موضع الكتلة وحجمها، يُولَّد الاستغلال.
  • يُستخدم وسيط ينتهي بـ '\' وبايت فارغ (null byte) بالحجم الدقيق لإعادة تدوير تلك الكتلة.
  • تُنشأ متغيرات البيئة 'المحلية' الدقيقة لإنشاء التخطيط المناسب.
  • قبل متغيرات البيئة 'المحلية' هذه، يُنشأ متغير بيئة بالحجم اللازم للوصول إلى البنية الهدف.
  • تُعاد كتابة البنية الهدف ببايتات فارغة باستخدام مصفوفات من السلاسل تحتوي على محرف الهروب '\'؛ وهذا يجعل set_cmnd تكتب بايتاً فارغاً.
  • يُعاد كتابة حقل name الخاص بـ service_user بالقيمة 'x/x' ليتم لاحقاً تحميل المكتبة 'libnss_x/x.so.2'
  • يُنشأ داخل المكتبة مُنشئ (constructor) ينفّذ شيل كود.
  • وبما أن sudo يُنفَّذ مع بِت suid، فإن الصدفة (shell) تكون مملوكة لـ root.

الترخيص

هذا المشروع مرخّص بموجب GNU GPL

تنزيل الأداة