Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/djad04/php2shell-deep-dive
Forensia de MemóriaAnálise de VulnerabilidadesExploraçãoEngenharia ReversaExploração de Aplicações WebCTFPapers e PesquisaAprendizado e EducaçãoExploração de Binários
GitHubdjad04/php2shell-deep-dive

php2shell-deep-dive

Análise técnica aprofundada do PHP2Shell: encadeando duas CVEs do núcleo do PHP, desde um crash por falta de memória e um use-after-free até heap grooming, vazamentos de ASLR e execução remota de código.

63há 4 diasAinda 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
Ver RepositórioSite

Comecei a escrever esta pesquisa em 26 de outubro de 2026, e não tenho certeza absoluta de quando irei concluí-la.

No momento em que escrevo, ainda há muito pouca informação disponível sobre o PHP2Shell, particularmente no que diz respeito a análises técnicas detalhadas das vulnerabilidades e do processo de exploração.

Honestamente, eu estava ficando cansado de encontrar explicações que apenas arranhavam a superfície sem realmente mostrar o que acontecia internamente. Eu queria fazer algo diferente: um passo a passo técnico adequado e aprofundado que explore todo o processo, examinando cada detalhe importante e explicando não apenas O QUE acontece, mas POR QUE e COMO acontece.

Esta pesquisa é baseada no meu próprio entendimento do código-fonte do PHP, nos meus experimentos e nas investigações que conduzi enquanto tentava entender essas vulnerabilidades. Eu queria juntar todas essas peças, compartilhar minhas descobertas e, esperançosamente, tornar alguns dos conceitos subjacentes mais fáceis de entender para os outros.

Um dos meus principais objetivos era tornar isso acessível sem sacrificar a profundidade técnica. Quero que alguém com conhecimento básico de C e experiência geral em programação consiga acompanhar, mesmo sem qualquer experiência prévia em exploração de memória de baixo nível.

Também espero que esta pesquisa possa ajudar a esclarecer algumas coisas que atualmente são mal explicadas ou mal compreendidas. No entanto, quero ser transparente: este é o meu próprio entendimento técnico das vulnerabilidades, não uma análise oficial ou uma referência infalível. Ainda estou aprendendo, investigando e conectando os pontos por conta própria. Pode haver erros, imprecisões ou coisas que eu tenha entendido mal ao longo do caminho.

Se você notar algo incorreto, tiver uma interpretação diferente ou achar que algo merece uma investigação mais aprofundada, por favor, não hesite em entrar em contato comigo. Eu realmente agradeceria correções, discussões e contribuições que pudessem ajudar a tornar esta pesquisa mais precisa e útil para todos.

Afinal, o objetivo de compartilhar tudo isso é aprender juntos e ajudar mais pessoas a entender o que realmente acontece nos bastidores.


Navegação Rápida

Já está familiarizado com o básico?? Vá direto para a parte que lhe interessa:

  • Antes de começarmos: stack vs heap, noções básicas de alocação de memória
  • Por que isso é perigoso?: a história do ponteiro obsoleto, leituras e escritas UAF
  • O Ponteiro Obsoleto: de onde ele vem: a história de origem do UAF dentro da interação entre sessão e OOM do PHP
  • Construindo a requisição de ataque: a requisição HTTP real que dispara o OOM
  • O Objetivo: o que precisamos vazar e por quê (ponteiro de heap + ponteiro de código)
  • A Struct Alvo: zend_string: a struct que o PHP lê ao construir o cookie de sessão
  • Recuperando a Memória: Requisição #2 e a struct zend_string alvo
  • Mergulho Profundo no Heap Grooming: como posicionamos os dados forjados exatamente no slot de memória certo
  • O Mistério do multipart_buffer_read_body: a alocação oculta que quase me deixou louco
  • Dois Vazamentos, Não Um: por que o vazamento de heap e o de código precisam de calibrações diferentes
  • Vazamento de Código (Estágio 3): vazando um ponteiro de função para derrotar o ASLR
  • Fingerprinting: como sabemos que obtivemos o ponteiro certo
  • Analisando o Vazamento de Heap: encontrando a base do chunk em 256 bytes de caos
  • O Pipeline 1+8: como ambos os vazamentos são realmente entregues
  • Reutilizando o Alocador para Forjar uma Estrutura: a ideia do sequestro do pDestructor
  • O Gatilho: o PHP faz o trabalho sujo, código real do zend_hash_destroy
  • Três Estruturas em Uma: ForgedArray + FakeExecuteData + FakeString em 384 bytes
  • Payload Final (Estágio 4): forjando uma HashTable para sequestrar o pDestructor e obter RCE
  • O Mecanismo do Primer: como o fantasma do primer liberado em bucket[2] dispara a cadeia de destruição
  • Truque de Saída de Comando: encontrando seu próprio socket TCP em /proc
  • O Pipeline Completo: todos os quatro estágios de ponta a ponta
  • Calibrando para uma Build Diferente: como cada número vem da análise de heap de uma build específica do PHP
  • Atrito do Mundo Real: por que esse ataque é muito mais difícil em um servidor de produção real
  • Steal My Bitcoin CTF: o desafio que deu início a tudo isso
  • Agradecimentos: créditos e referências

Se você é novo em exploração de heap ou quer a experiência completa, continue rolando. Escrevi isto para ser lido do início ao fim.


Antes de começarmos

Há algumas coisas que todos devem ter em mente antes de começarmos. Elas se tornarão particularmente úteis à medida que avançamos na pesquisa. Como mencionei anteriormente, quero que este walkthrough seja acessível a todos, então vou dedicar tempo para explicar até os conceitos mais fundamentais. Se você já está familiarizado com eles, sinta-se à vontade para pular!

Stack vs. heap

Em um programa típico, a memória é organizada em diferentes regiões, incluindo a stack e o heap.

Por exemplo, em C++:

int main() {
    int a = 30;       // Typically stored on the stack
    int* b = new int(30);  // b is typically on the stack,
                           // but the integer it points to is on the heap
}

Aqui, a é uma variável local que contém o valor 30. O ponteiro b também é uma variável local, mas contém o endereço de um inteiro alocado no heap.

Como funciona a alocação de memória

O PHP é escrito principalmente em C, então precisamos entender como funciona a alocação de memória.

O sistema operacional fornece a um processo seu próprio espaço de endereçamento virtual. O alocador de memória do processo então gerencia as alocações dentro da memória disponível para ele.

Por exemplo, em C++, temos new, malloc() e outras formas de alocar memória.

Os alocadores frequentemente tentam reutilizar memória liberada em vez de solicitar nova memória ao sistema operacional a cada vez.

Além disso, quando o tempo de vida de um objeto termina, os dados que estavam armazenados em sua memória não são necessariamente apagados imediatamente. Essa memória pode simplesmente ser marcada como disponível para reutilização.


Para entender melhor isso, vamos dar uma pequena olhada no seguinte código:

Baixar ferramenta