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

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
php2shell-deep-dive — Análisis técnico en profundidad de PHP2Shell: encadenamiento de dos CVE del núcleo de PHP, desde un fallo por falta de memoria y un use-after-free hasta el heap grooming, las fugas de ASLR y la ejecución remota de código. | Kitploit
Herramientas/GitHubGitHub/djad04/php2shell-deep-dive
Forensia de MemoriaAnálisis de VulnerabilidadesExplotaciónIngeniería InversaExplotación de Aplicaciones WebCTFPapers e InvestigaciónAprendizaje y EducaciónExplotación de Binarios
GitHubdjad04/php2shell-deep-dive

php2shell-deep-dive

Análisis técnico en profundidad de PHP2Shell: encadenamiento de dos CVE del núcleo de PHP, desde un fallo por falta de memoria y un use-after-free hasta el heap grooming, las fugas de ASLR y la ejecución remota de código.

63hace 4 díasAú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
Ver RepositorioSitio web

Comencé a escribir esta investigación el 26 de octubre de 2026, y no estoy del todo seguro de cuándo la terminaré.

En el momento de escribir esto, todavía hay muy poca información disponible sobre PHP2Shell, particularmente cuando se trata de análisis técnicos detallados de las vulnerabilidades y del proceso de explotación.

Honestamente, me estaba cansando de encontrar explicaciones que solo arañaban la superficie sin mostrar realmente lo que ocurría internamente. Quería hacer algo diferente: un recorrido técnico adecuado y en profundidad que explore todo el proceso, examinando cada detalle importante y explicando no solo QUÉ ocurre, sino POR QUÉ y CÓMO ocurre.

Esta investigación se basa en mi propia comprensión del código fuente de PHP, mis experimentos y las investigaciones que he realizado mientras intentaba entender estas vulnerabilidades. Quería reunir todas estas piezas, compartir mis hallazgos y, con suerte, hacer que algunos de los conceptos subyacentes sean más fáciles de entender para los demás.

Uno de mis principales objetivos era hacer esto accesible sin sacrificar la profundidad técnica. Quiero que alguien con conocimientos básicos de C y experiencia general en programación pueda seguir el hilo, incluso sin ninguna experiencia previa en explotación de memoria de bajo nivel.

También espero que esta investigación pueda ayudar a aclarar algunas de las cosas que actualmente están mal explicadas o mal entendidas. Sin embargo, quiero ser transparente: esta es mi propia comprensión técnica de las vulnerabilidades, no un análisis oficial ni una referencia infalible. Sigo aprendiendo, investigando y conectando los puntos por mí mismo. Puede haber errores, imprecisiones o cosas que he malinterpretado en el camino.

Si notas algo incorrecto, tienes una interpretación diferente o crees que algo merece una mayor investigación, por favor no dudes en contactarme. Agradecería genuinamente correcciones, debates y contribuciones que puedan ayudar a hacer esta investigación más precisa y útil para todos.

Después de todo, el objetivo de compartir esto es aprender juntos y ayudar a más personas a entender lo que realmente ocurre bajo el capó.


Navegación rápida

¿Ya estás familiarizado con lo básico? Salta directamente a la parte que te interesa:

  • Antes de empezar: stack vs heap, conceptos básicos de asignación de memoria
  • ¿Por qué es peligroso esto?: la historia del puntero obsoleto, lecturas y escrituras UAF
  • El puntero obsoleto: de dónde viene: la historia del origen del UAF dentro de la interacción entre sesión y OOM de PHP
  • Construyendo la petición de ataque: la petición HTTP real que desencadena el OOM
  • El objetivo: qué necesitamos filtrar y por qué (puntero al heap + puntero a código)
  • La estructura objetivo: zend_string: la estructura que PHP lee al construir la cookie de sesión
  • Recuperando la memoria: Petición #2 y la estructura zend_string objetivo
  • Análisis profundo del heap grooming: cómo posicionamos los datos falsificados en la ranura de memoria exacta
  • El misterio de multipart_buffer_read_body: la asignación oculta que casi me vuelve loco
  • Dos fugas, no una: por qué la fuga del heap y la fuga de código necesitan calibraciones diferentes
  • Fuga de código (Etapa 3): filtrar un puntero a función para derrotar ASLR
  • Fingerprinting: cómo sabemos que obtuvimos el puntero correcto
  • Analizando la fuga del heap: encontrar la base del chunk en 256 bytes de caos
  • El pipeline 1+8: cómo se entregan realmente ambas fugas
  • Reutilizando el asignador para falsificar una estructura: la idea del secuestro de pDestructor
  • El disparador: PHP hace el trabajo sucio, código real de zend_hash_destroy
  • Tres estructuras en una: ForgedArray + FakeExecuteData + FakeString en 384 bytes
  • Payload final (Etapa 4): falsificar una HashTable para secuestrar pDestructor y obtener RCE
  • El mecanismo del cebador: cómo el fantasma del cebador liberado en bucket[2] desencadena la cadena de destrucción
  • Truco de salida de comandos: encontrar tu propio socket TCP en /proc
  • El pipeline completo: las cuatro etapas de principio a fin
  • Calibrando para una compilación diferente: cómo cada número proviene del análisis del heap de una compilación específica de PHP
  • Fricción del mundo real: por qué este ataque es mucho más difícil en un servidor de producción real
  • Steal My Bitcoin CTF: el desafío que inició todo esto
  • Agradecimientos: créditos y referencias

Si eres nuevo en la explotación del heap o quieres la experiencia completa, simplemente sigue desplazándote. Escribí esto para que se lea de principio a fin.


Antes de empezar

Hay algunas cosas que todos deberíamos tener en cuenta antes de sumergirnos. Serán particularmente útiles a medida que avancemos en la investigación. Como mencioné antes, quiero que este recorrido sea accesible para todos, así que me tomaré el tiempo de explicar incluso los conceptos más fundamentales. Si ya estás familiarizado con ellos, ¡siéntete libre de saltar hacia adelante!

Stack vs. heap

En un programa típico, la memoria se organiza en diferentes regiones, incluyendo el stack y el heap.

Por ejemplo, en 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
}

Aquí, a es una variable local que contiene el valor 30. El puntero b también es una variable local, pero contiene la dirección de un entero asignado en el heap.

Cómo funciona la asignación de memoria

PHP está escrito principalmente en C, por lo que tenemos que entender cómo funciona la asignación de memoria.

El sistema operativo proporciona a un proceso su propio espacio de direcciones virtuales. El asignador de memoria del proceso gestiona entonces las asignaciones dentro de la memoria disponible para él.

Por ejemplo, en C++, tenemos new, malloc() y otras formas de asignar memoria.

Los asignadores a menudo intentan reutilizar la memoria liberada en lugar de solicitar nueva memoria al sistema operativo cada vez.

Además, cuando finaliza el tiempo de vida de un objeto, los datos que se almacenaban en su memoria no necesariamente se borran de inmediato. Esa memoria simplemente puede marcarse como disponible para su reutilización.


Descargar herramienta