Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
php2shell-deep-dive — Analisi tecnica approfondita di PHP2Shell: concatenazione di due CVE del core di PHP, da un crash per esaurimento della memoria e un use-after-free a heap grooming, leak di ASLR ed esecuzione di codice remoto. | Kitploit
Strumenti/GitHubGitHub/djad04/php2shell-deep-dive
Memory ForensicsAnalisi delle VulnerabilitàExploitReverse EngineeringSfruttamento di Applicazioni WebCTFPaper e RicercaApprendimento e FormazioneBinary Exploitation
GitHubdjad04/php2shell-deep-dive

php2shell-deep-dive

Analisi tecnica approfondita di PHP2Shell: concatenazione di due CVE del core di PHP, da un crash per esaurimento della memoria e un use-after-free a heap grooming, leak di ASLR ed esecuzione di codice remoto.

635 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi RepositorySito web

Ho iniziato a scrivere questa ricerca il 26 ottobre 2026, e non sono del tutto sicuro di quando la terminerò.

Al momento della stesura, ci sono ancora pochissime informazioni disponibili su PHP2Shell, in particolare per quanto riguarda l'analisi tecnica dettagliata delle vulnerabilità e del processo di sfruttamento.

Onestamente, mi stavo stancando di trovare spiegazioni che grattavano solo la superficie senza mostrare realmente cosa accadeva internamente. Volevo fare qualcosa di diverso: una trattazione tecnica approfondita e adeguata che esplorasse l'intero processo, esaminando ogni dettaglio importante e spiegando non solo COSA accade, ma PERCHÉ e COME accade.

Questa ricerca si basa sulla mia personale comprensione del codice sorgente di PHP, sui miei esperimenti e sulle indagini che ho condotto nel tentativo di comprendere queste vulnerabilità. Volevo mettere insieme tutti questi pezzi, condividere le mie scoperte e, si spera, rendere alcuni dei concetti sottostanti più facili da comprendere per gli altri.

Uno dei miei obiettivi principali era rendere tutto questo accessibile senza sacrificare la profondità tecnica. Voglio che qualcuno con conoscenze di base del linguaggio C e un'esperienza di programmazione generale possa seguire il discorso, anche senza alcuna precedente esperienza nello sfruttamento della memoria a basso livello.

Spero anche che questa ricerca possa contribuire a chiarire alcune cose che attualmente sono spiegate male o fraintese. Tuttavia, voglio essere trasparente: questa è la mia personale comprensione tecnica delle vulnerabilità, non un'analisi ufficiale né un riferimento infallibile. Sto ancora imparando, indagando e collegando i punti da solo. Potrebbero esserci errori, imprecisioni o cose che ho frainteso lungo il percorso.

Se noti qualcosa di errato, hai un'interpretazione diversa o pensi che qualcosa meriti ulteriori indagini, non esitare a contattarmi. Apprezzerei sinceramente correzioni, discussioni e contributi che potrebbero aiutare a rendere questa ricerca più accurata e utile per tutti.

Dopotutto, lo scopo di condividere tutto questo è imparare insieme e aiutare più persone a capire cosa accade realmente sotto il cofano.


Navigazione rapida

Hai già familiarità con le basi?? Vai direttamente alla parte che ti interessa:

  • Prima di iniziare: stack vs heap, nozioni di base sull'allocazione della memoria
  • Quanto è pericoloso?: la storia del puntatore obsoleto, letture e scritture UAF
  • Il puntatore obsoleto: da dove viene: la storia delle origini dell'UAF all'interno dell'interazione tra session e OOM di PHP
  • Costruire la richiesta di attacco: la richiesta HTTP effettiva che scatena l'OOM
  • L'obiettivo: cosa dobbiamo leakare e perché (puntatore heap + puntatore al codice)
  • La struct bersaglio: zend_string: la struct che PHP legge quando costruisce il cookie di sessione
  • Recuperare la memoria: la richiesta #2 e la struct zend_string bersaglio
  • Approfondimento sull'heap grooming: come posizioniamo i dati falsificati nello slot di memoria esatto
  • Il mistero di multipart_buffer_read_body: l'allocazione nascosta che quasi mi ha fatto impazzire
  • Due leak, non uno: perché il leak dell'heap e quello del codice richiedono calibrazioni diverse
  • Leak del codice (Fase 3): leakare un puntatore a funzione per sconfiggere l'ASLR
  • Fingerprinting: come sappiamo di aver ottenuto il puntatore giusto
  • Analizzare il leak dell'heap: trovare la base del chunk in 256 byte di caos
  • La pipeline 1+8: come vengono effettivamente consegnati entrambi i leak
  • Riutilizzare l'allocatore per falsificare una struttura: l'idea del dirottamento di pDestructor
  • Il trigger: PHP fa il lavoro sporco, il vero codice di zend_hash_destroy
  • Tre strutture in una: ForgedArray + FakeExecuteData + FakeString in 384 byte
  • Payload finale (Fase 4): falsificare una HashTable per dirottare pDestructor e ottenere l'RCE
  • Il meccanismo del primer: come il fantasma del primer liberato in bucket[2] innesca la catena di distruzione
  • Trucco per l'output dei comandi: trovare il proprio socket TCP in /proc
  • La pipeline completa: tutte e quattro le fasi dall'inizio alla fine
  • Calibrare per una build diversa: come ogni numero deriva dall'analisi dell'heap di una specifica build di PHP
  • Attrito nel mondo reale: perché questo attacco è molto più difficile su un vero server di produzione
  • Steal My Bitcoin CTF: la challenge che ha dato inizio a tutto
  • Ringraziamenti: crediti e riferimenti

Se sei nuovo allo sfruttamento dell'heap o vuoi l'esperienza completa, continua a scorrere. L'ho scritto per essere letto dall'inizio alla fine.


Prima di iniziare

Ci sono alcune cose che tutti dovrebbero tenere a mente prima di addentrarci. Diventeranno particolarmente utili man mano che procediamo nella ricerca. Come ho accennato prima, voglio che questa guida sia accessibile a tutti, quindi mi prenderò il tempo di spiegare anche i concetti più fondamentali. Se li conosci già, sentiti libero di saltare avanti!

Stack vs. heap

In un programma tipico, la memoria è organizzata in diverse regioni, tra cui lo stack e l'heap.

Ad esempio, in 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
}

Qui, a è una variabile locale che contiene il valore 30. Il puntatore b è anch'esso una variabile locale, ma contiene l'indirizzo di un intero allocato sull'heap.

Come funziona l'allocazione della memoria

PHP è scritto principalmente in C, quindi dobbiamo capire come funziona l'allocazione della memoria.

Il sistema operativo fornisce a un processo il proprio spazio di indirizzi virtuale. L'allocatore di memoria del processo gestisce poi le allocazioni all'interno della memoria a sua disposizione.

Ad esempio, in C++ abbiamo new, malloc() e altri modi per allocare memoria.

Gli allocatori spesso cercano di riutilizzare la memoria liberata invece di richiedere nuova memoria al sistema operativo ogni volta.

Inoltre, quando il ciclo di vita di un oggetto termina, i dati che erano memorizzati nella sua memoria non vengono necessariamente cancellati immediatamente. Quella memoria può semplicemente essere contrassegnata come disponibile per il riutilizzo.


Scarica lo strumento