Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/daniilorchikov/pil-cve-2017-8291
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebAprendizaje y EducaciónExplotación de BinariosLabs y Práctica
GitHubdaniilorchikov/pil-cve-2017-8291

PIL-CVE-2017-8291

PoC educativo para CVE-2017-8291 (GhostButt) que demuestra ejecución remota de comandos a través del procesamiento de imágenes EPS con Python PIL/Pillow y evasión del sandbox de GhostScript.

Ver Repositorio
10hace 9 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Python PIL/Pillow Ejecución Remota de Comandos (GhostButt / CVE-2017-8291)

中文版本(Chinese version)

Python PIL (Pillow) es una biblioteca popular de procesamiento de imágenes para Python. Soporta varios formatos de imagen y proporciona potentes capacidades de manipulación de imágenes.

El módulo de procesamiento de imágenes de Python PIL (Pillow) está afectado por la vulnerabilidad GhostButt (CVE-2017-8291) porque internamente llama a GhostScript para procesar imágenes EPS. Esta vulnerabilidad permite a los atacantes ejecutar comandos arbitrarios en el sistema objetivo.

Cuando PIL procesa una imagen, determina el tipo de imagen basándose en la cabecera del archivo (Magic Bytes). Si identifica un archivo EPS (cabecera que comienza con %!PS), pasa el archivo a PIL/EpsImagePlugin.py para su procesamiento.

En este módulo, PIL llama al comando GhostScript del sistema (gs) para procesar el archivo de imagen:

root@kitploit:~
command = ["gs",
            "-q",                         # quiet mode
            "-g%dx%d" % size,             # set output geometry (pixels)
            "-r%fx%f" % res,              # set input DPI (dots per inch)
            "-dBATCH",                    # exit after processing
            "-dNOPAUSE",                  # don't pause between pages,
            "-dSAFER",                    # safe mode
            "-sDEVICE=ppmraw",            # ppm driver
            "-sOutputFile=%s" % outfile,  # output file
            "-c", "%d %d translate" % (-bbox[0], -bbox[1]),
                                            # adjust for image origin
            "-f", infile,                 # input file
            ]

# Code to check if GhostScript is installed is omitted
try:
    with open(os.devnull, 'w+b') as devnull:
        subprocess.check_call(command, stdin=devnull, stdout=devnull)
    im = Image.open(outfile)

Aunque se establece el indicador -dSAFER (modo seguro), una vulnerabilidad de omisión del sandbox en GhostScript (GhostButt CVE-2017-8291) permite eludir este mecanismo de seguridad, habilitando la ejecución de comandos arbitrarios.

Al momento de escribir esto, incluso la última versión oficial de GhostScript 9.21 sigue afectada por esta vulnerabilidad. Por lo tanto, mientras GhostScript esté instalado en el sistema operativo, PIL es vulnerable a la ejecución de comandos.

Referencias:

  • Explotando la Vulnerabilidad de Ejecución de Comandos del Módulo PIL de Python
  • Detalles de CVE-2017-8291
  • Aviso de Seguridad de GhostScript

Configuración del Entorno

Ejecute el siguiente comando para iniciar una aplicación web vulnerable a la vulnerabilidad CVE-2017-8291:

root@kitploit:~
docker compose up -d

Después de iniciar, visite http://your-ip:8000/ para acceder a la página de carga.

Explotación de la Vulnerabilidad

La funcionalidad normal de esta aplicación permite a los usuarios cargar un archivo PNG. El backend utiliza PIL para cargar la imagen y mostrar sus dimensiones. Sin embargo, podemos explotar esto cambiando la extensión de un archivo EPS ejecutable a PNG y subiéndolo. Dado que el backend determina el tipo de imagen basándose en la cabecera del archivo en lugar de la extensión, se puede omitir la verificación de la extensión del archivo.

Por ejemplo, podemos cargar poc.png, que ejecutará el comando touch /tmp/aaaaa en el servidor. Modificando el comando en el POC a un comando de reverse shell, podemos obtener acceso a la shell del servidor:

Explotación de la Vulnerabilidad

Descargar herramienta