
Un script de explotación completamente refactorizado y compatible con Python 3 para Tomcat Ghostcat (CVE-2020-1938 / CNVD-2020-10487) Inclusión Local de Archivos AJP
Este proyecto proporciona un script de verificación en Python para validar la vulnerabilidad de inclusión local de archivos en el protocolo AJP de Apache Tomcat (comúnmente conocida como Ghostcat, CVE-2020-1938 / CNVD-2020-10487).
Este script se basa en la versión original de Python 2 que circulaba inicialmente, pero ha sido completamente reestructurado y corregido, con compatibilidad total con Python 3. Se han solucionado los problemas de compatibilidad relacionados con StringIO, la codificación base64 y la concatenación de datos binarios con cadenas, mejorando su estabilidad en los sistemas operativos modernos.
Al procesar el protocolo AJP (Apache JServ Protocol), Apache Tomcat habilita por defecto el puerto 8009 y no realiza una validación de seguridad estricta de los atributos de las peticiones entrantes.
Un atacante puede construir peticiones AJP maliciosas para inyectar atributos como javax.servlet.include.request_uri, javax.servlet.include.path_info y :
javax.servlet.include.servlet_pathDefaultServlet de Tomcat para leer cualquier archivo dentro del directorio de la aplicación web (por ejemplo, WEB-INF/web.xml, archivos de configuración, etc.).JspServlet a interpretar y compilar ese archivo como JSP, logrando así la ejecución remota de comandos.Nota: esta vulnerabilidad solo admite inclusión local de archivos (LFI), no inclusión remota de archivos (RFI) directa.
Sintaxis de línea de comandos:
python CNVD-2020-10487-Tomcat-Ajp-lfi.py <IP_objetivo> [-p puerto_objetivo] [-f ruta_del_archivo_objetivo]
target (obligatorio): dirección IP o nombre de dominio del host objetivo.-p, --port (opcional): puerto AJP, por defecto 8009.-f, --file (opcional): ruta relativa del archivo objetivo que se desea leer, por defecto WEB-INF/web.xml.Detección básica (lee el web.xml por defecto):
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 127.0.0.1
Especificar puerto y archivo (lee un archivo de configuración personalizado):
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.100 -p 8009 -f WEB-INF/classes/application.properties
Si su sistema se ve afectado por esta vulnerabilidad, se recomienda adoptar de inmediato las siguientes medidas de protección:
<Connector port="8009" protocol="AJP/1.3" ... /> en conf/server.xml.requiredSecret (en Tomcat 8.5.51/9.0.31 y versiones posteriores es secret) al conector AJP para forzar la autenticación.Este script es exclusivamente para investigación en seguridad, educación y auditorías de seguridad internas que cumplan con las normas de la empresa. No utilice este script para realizar sondeos o ataques ilegítimos contra objetivos no autorizados. El usuario debe cumplir con las leyes y regulaciones locales al usar este script. Cualquier consecuencia derivada del uso indebido o ilegal será responsabilidad exclusiva del usuario.