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
PIL-CVE-2017-8291-study — Laboratorio educativo que demuestra CVE-2017-8291 (PIL/GhostScript RCE) mediante la subida de un archivo EPS manipulado con extensión PNG, incluyendo configuración de Docker y ejecución del PoC. | Kitploit
Herramientas/GitHubGitHub/shun1403/pil-cve-2017-8291-study
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebAprendizaje y EducaciónLabs y Práctica
GitHubshun1403/pil-cve-2017-8291-study

PIL-CVE-2017-8291-study

Laboratorio educativo que demuestra CVE-2017-8291 (PIL/GhostScript RCE) mediante la subida de un archivo EPS manipulado con extensión PNG, incluyendo configuración de Docker y ejecución del PoC.

Ver Repositorio
5hace 1 añoAú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

PIL-CVE-2017-8291

  • Baek Seunghoon(@shun1403), clase 13 del 3er ciclo de White Hat School https://github.com/shun1403/PIL-CVE-2017-8291.git
  • Entorno: Ubuntu Linux

Configuración del entorno

  • Actualice a V2 mediante sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • Si hay errores al ejecutar, restablezca Docker con los siguientes comandos
  • sudo apt remove docker docker-engine docker.io containerd runc -y
  • sudo apt update
  • sudo apt install -y ca-certificates curl gnupg lsb-release
  • sudo mkdir -p /etc/apt/keyrings
  • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  • echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • sudo apt update
  • sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • docker compose version
  • Cuando verifique la versión, si aparece correctamente, estará listo.
  • git clone

    git clone https://github.com/vulhub/vulhub.git

    • Después de clonar, acceda a la ruta de la vulnerabilidad a explotar

    • Aquí: /vulhub/python/PIL-CVE-2017-8291

    • Realice el ejercicio consultando el siguiente archivo yml

    • docker compose up -d: comando para crear el contenedor y ejecutarlo en segundo plano

    • Luego acceda a localhost:8000/ para ver la página web donde se pueden subir archivos image

    • Suba el archivo poc.png manipulado que se encuentra en la misma ruta

    • Al subirlo, podrá ver que aparece lo siguiente image

    • En una funcionalidad normal, después de subir un archivo PNG, se mostrarían las dimensiones (ancho y alto) de la imagen. Sin embargo, dado que el backend clasifica el tipo de imagen basándose en la cabecera del archivo (no en la extensión), es posible ignorar la extensión y subir un archivo EPS que contenga comandos ejecutables cambiándole la extensión a PNG.

    • Al aprovechar esto, al subir el archivo poc.png se puede ejecutar el comando 'touch /tmp/aaaaa', y si se cambia el comando dentro del archivo POC por un comando de reverse shell, es posible obtener una shell.

    • Después de subir el archivo, al acceder al contenedor Docker y revisar /tmp, se puede verificar que se ha creado el archivo aaaaa debido al comando.

    root@kitploit:~
    command = ["gs",
                "-q",                         # modo silencioso (minimizar salida)
                "-g%dx%d" % size,             # establecer tamaño de imagen de salida (en píxeles)
                "-r%fx%f" % res,              # establecer resolución de imagen de entrada (DPI)
                "-dBATCH",                    # finalizar automáticamente al completar el trabajo
                "-dNOPAUSE",                  # ejecutar de forma continua sin pausas entre páginas
                "-dSAFER",                    # activar modo seguro
                "-sDEVICE=ppmraw",            # establecer dispositivo de salida como ppmraw
                "-sOutputFile=%s" % outfile,  # especificar ruta del archivo de salida
                "-c", "%d %d translate" % (-bbox[0], -bbox[1]), 
                                                # corregir el origen de la imagen (desplazamiento)
                "-f", infile,                 # especificar archivo de entrada
              ]
    

    Código omitido para verificar la instalación de GhostScript

    root@kitploit:~
    try:
        with open(os.devnull, 'w+b') as devnull:
            subprocess.check_call(command, stdin=devnull, stdout=devnull)
        im = Image.open(outfile)
    

    Resultado

    image

    Conclusión

    Esta vulnerabilidad se origina en Python Imaging Library (PIL) y se ha probado contra CVE-2017-8291. La vulnerabilidad se debe a que PIL determina el tipo de imagen basándose en la cabecera del archivo y no en la extensión. Por lo tanto, aunque el archivo sea realmente EPS, si se cambia su extensión a PNG y se sube, el servidor llamará a GhostScript y se podrán ejecutar comandos arbitrarios insertados en el archivo.

    Durante el proyecto, al subir el archivo poc.png manipulado se comprobó la creación del archivo /tmp/aaaaa en el servidor, reproduciendo así que la vulnerabilidad puede conducir a una ejecución remota de comandos (RCE, Remote Code Execution). Además, se pudo verificar que esta vulnerabilidad, al explotar la funcionalidad original de procesamiento de imágenes, puede ampliarse a ataques avanzados como una reverse shell.

    Descargar herramienta