Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
FEP3370-advanced-ethical-hacking — استغلال DHCP باستخدام DynoRoot (CVE-2018-1111) | Kitploit
أدوات/GitHubGitHub/baldassarrefe/fep3370-advanced-ethical-hacking
تحليل الثغرات الأمنيةالاستغلالأمن الشبكاتاختبار الاختراقالتعلم والتعليممختبرات وتدريب عملي
GitHubbaldassarrefe/fep3370-advanced-ethical-hacking

FEP3370-advanced-ethical-hacking

استغلال DHCP باستخدام DynoRoot (CVE-2018-1111)

عرض المستودعالموقع الإلكتروني
6منذ 5 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

DynoRoot CVE-2018-1111

المشروع النهائي لمقرر الاختراق الأخلاقي المتقدم في KTH، ستوكهولم

يعرض هذا المشروع ثغرة أمنية معروفة في أجهزة Fedora وRedHat تتعلق بتطبيق غير آمن من جانب العميل لبروتوكول الإعداد الديناميكي للمضيفين (DHCP). يمكن لخادم DHCP مارق صياغة عروض DHCP بحمولة خبيثة يتم تنفيذها في غلاف جذر (root shell) على جهاز الضحية.

تُنسب هذه الثغرة إلى Felix Wilhelm وتُعرف باسم CVE-2018-1111 أو "DynoRoot".

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

  • مقدمة
    • خلفية
    • الثغرة
    • المصادر
  • الإعداد
    • أساسيات
    • جهاز البوابة
    • المهاجم
    • ضحية Fedora
  • تنفيذ الهجوم
    • البوابة
    • المهاجم
    • الضحية
    • التحليل
  • العمل المستقبلي
  • الاعتمادات

مقدمة

خلفية

يُعد بروتوكول الإعداد الديناميكي للمضيفين (DHCP) مكوّنًا غالبًا ما يُغفَل في الأنظمة الشبكية. يتمثل دوره في السماح بالتكوين الديناميكي لأجهزة المضيفين التي تتصل بشبكة قائمة. حالة الاستخدام الأكثر شيوعًا هي تعيين عنوان IP للمضيفين المتصلين حديثًا وإعلامهم بالمسارات الموجودة للوصول إلى شبكات أخرى. يمكن تحديد خيارات إضافية، مثل عنوان خادم DNS المحلي والنطاق الذي يخدمه، أو موقع ملف الإقلاع.

دعونا نحلّل بروتوكول الخطوات الأربع الذي يُتّبع عندما يريد مضيف جديد الانضمام إلى شبكة بعد الاتصال بها ماديًا عبر اتصال إيثرنت أو لاسلكي.

  1. يبث العميل، الذي يفتقر إلى عنوان IP، رسالة DISCOVER إلى الشبكة.
  2. يرد خادم DHCP المسؤول عن تلك الشبكة برسالة OFFER تحتوي على: عنوان IP، وقناع الشبكة الفرعية، وعنوان الموجّه، وخيارات أخرى.
  3. يرد العميل برسالة REQUEST، طالبًا رسميًا استئجارَ عنوان IP الذي تم عرضه.
  4. يختتم الخادم التبادل برسالة ACK، للإشارة إلى أن العميل مسموح له باستخدام عنوان IP لفترة زمنية محددة.

بعد التبادل الأولي، يمكن للعميل تجديد العقد بمجرد إرسال رسالة REQUEST أخرى. سيتحقق الخادم من وجود عقد بعنوان IP وعنوان MAC الخاصين بالعميل ويرد برسالة ACK.

جلسة DHCP (شكل من ويكيميديا كومنز، بموجب رخصة CC BY-SA 4.0).

بعض الأمور الجديرة بالملاحظة:

  • يمكن للعميل أيضًا تخطي مرحلة DISCOVER وطلب عنوان عبر REQUEST مباشرة. وهذا شائع في السيناريوهات التي يكون فيها العميل قد اتصل بالشبكة سابقًا ويتذكر العنوان السابق. في هذه الحالة، يتحقق الخادم من توفر العنوان، وإذا كان متاحًا يرد بـ ACK على الطلب، أو إذا لم يكن العقد متاحًا، يرسل NACK.
  • عند قطع الاتصال، يمكن للعملاء إرسال رسالة RELEASE لإبلاغ الخادم بأن العنوان أصبح متاحًا الآن. ومع ذلك، لا يُلزِم البروتوكول بذلك، وسيقوم الخادم بشكل دوري بجمع العقود منتهية الصلاحية.
  • يدير كل خادم DHCP مجموعة محدودة من عناوين IP، وبمجرد تخصيصها جميعًا، لن يتمكن الخادم من عرض OFFER لعقود جديدة على العملاء.
  • يمكن أن توجد عدة خوادم DHCP على نفس الشبكة، وإذا تلقى العميل عروض OFFER متعددة، فإنه سيقبل واحدًا فقط، بينما تلاحظ الخوادم الأخرى رسالة REQUEST المبثوثة وتبطل العرض.

الثغرة

تقع الثغرة في /etc/NetworkManager/dispatcher.d/11-dhclient، وهو ملف يتم تنفيذه بواسطة العميل لتحليل الخيارات المستلمة عبر DHCP وتعيينها.

  • declare هي أمر مدمج في bash، وعند استخدامه بدون وسائط، يسرد جميع المتغيرات المُصرَّح بها
  • grep يفلتر جميع المتغيرات المرتبطة بـ DHCP
  • while read opt يتكرر على متغيرات DHCP واحدًا تلو الآخر، ويقوم ببعض التحليل ويطبع سطرًا مثل export new_optionname=value لكل خيار
  • ثم يتم تقييم عبارات التصدير بواسطة الغلاف (shell) عبر `eval````bash eval "$( declare | LC_ALL=C grep '^DHCP4_[A-Z_]=' | while read opt; do optname=${opt%%=} optname=${optname,,} optname=new_${optname#dhcp4_} optvalue=${opt#*=} echo "export $optname=$optvalue" done )"
<!-- omit in toc -->
#### التشغيل العادي
في الظروف العادية، سيعمل الكود بشكل جيد ويحلل خيارات DHCP الجديدة.
على سبيل المثال، الكود التالي:```bash
DHCP4_OPTION_ONE=42
DHCP4_OPTION_TWO="bla bla"

declare | LC_ALL=C grep '^DHCP4_[A-Z_]*=' | while read opt; do
  optname=${opt%%=*}
  optname=${optname,,}
  optname=new_${optname#dhcp4_}
  optvalue=${opt#*=}
  echo "export $optname=$optvalue"
done

سيقوم بطباعة عبارتي export هاتين ليتم تقييمهما بواسطة eval:```bash export new_option_one=42 export new_option_two='bla bla'

<!-- omit in toc -->
#### حقن الكود
ومع ذلك، ونظرًا لاستخدام `eval` غير الآمن، فمن الممكن حقن أوامر bash:```bash
DHCP4_OPTION_ONE="x'& echo Hacked! #"
DHCP4_OPTION_TWO='bla bla'

eval "$(                             
  declare | LC_ALL=C grep '^DHCP4_[A-Z_]*=' | while read opt; do
    optname=${opt%%=*}
    optname=${optname,,}
    optname=new_${optname#dhcp4_}
    optvalue=${opt#*=}
    echo "export $optname=$optvalue"
  done
)"

سوف ينتج عن ذلك تنفيذ echo Hacked!:```text [1] 1541 Hacked!

### المصادر
- [إدخال قاعدة بيانات الاستغلال](https://www.exploit-db.com/exploits/44890)
- [إعلان RedHat](https://access.redhat.com/security/vulnerabilities/3442151)
- [منشور مدونة Tenable](https://www.tenable.com/blog/advisory-red-hat-dhcp-client-command-injection-trouble)
- [مستودع GitHub](https://github.com/kkirsche/CVE-2018-1111)
- [إعلان تويتر](https://twitter.com/_fel1x/status/996388421273882626?lang=en)

## الإعداد
يتكون الإعداد الأدنى لتوضيح الاستغلال من جهازين فقط: جهاز `victim`
الذي يعمل بنظام Fedora 28، وجهاز `attacker`. في هذا الإعداد، يحتاج المهاجم فقط إلى تقديم
خدمة DHCP وانتظار اتصال الضحية.

<figure style="text-align:center">
  <img src="https://raw.githubusercontent.com/baldassarrefe/fep3370-advanced-ethical-hacking/HEAD/media/network_simple.svg" style="max-width:400px;" width="90%"/>
  <figcaption>الإعداد الأدنى للاستغلال.</figcaption>
</figure>

إعداد أكثر واقعية يضع الأجهزة على شبكة خاصة، حيث يتم تكوين جهاز ثالث، وهو
`gateway`، ليكون خادم DHCP غير ضار وبوابة إلى الإنترنت الخارجي.
في هذا الإعداد، يجب على المهاجم منع الضحية من الاتصال بخادم DHCP الشرعي
قبل أن يأمل في تنفيذ الهجوم.

<figure style="text-align:center">
  <img src="https://raw.githubusercontent.com/baldassarrefe/fep3370-advanced-ethical-hacking/HEAD/media/network.svg" style="max-width:800px;" width="90%"/>
  <figcaption>إعداد الشبكة الخاصة مع جهاز بوابة واحد يعمل كخادم DHCP وموجه وجدار ناري.</figcaption>
</figure>

في الأقسام التالية سنقوم بـ:
1. تثبيت VirtualBox
2. إنشاء 3 أجهزة افتراضية: `gateway`، و`attacker`، و`victim`
3. تثبيت نظام التشغيل على الأجهزة (المستخدمون، الشبكة، ووصول SSH)
4. تكوين البوابة لاستضافة خادم DHCP غير الضار
   للشبكة الداخلية الافتراضية المقدمة من VirtualBox
5. تثبيت تبعيات بايثون للهجوم

للقفز مباشرة إلى [التنفيذ العملي للهجوم](#performing-the-attack) وتخطي الإعداد اليدوي، يمكن
تشغيل سكربت [`setup.sh`](https://github.com/baldassarrefe/fep3370-advanced-ethical-hacking/blob/main/ansible/setup.sh) في مجلد `ansible`، والذي سيقوم (تقريبًا)
بشكل تلقائي بإنشاء الأجهزة الافتراضية وتكوينها باستخدام
[أدوار Ansible](https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html).
فقط تأكد من تثبيت Ansible و VirtualBox قبل تشغيل `setup.sh`.

### مقدمات

#### تثبيت VirtualBox
الإرشادات التالية مأخوذة من [دليل التثبيت الرسمي](https://www.virtualbox.org/wiki/Downloads).
تنزيل الأداة