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.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2019-11043 — Exploit Python dockerizzato per CVE-2019-11043, una vulnerabilità critica di esecuzione remota di codice in PHP-FPM nelle configurazioni NGINX. Include setup, utilizzo e analisi dettagliata. | Kitploit
Strumenti/GitHubGitHub/kriskhub/cve-2019-11043
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneStrumento di Accesso Remoto
GitHubkriskhub/cve-2019-11043

CVE-2019-11043

Exploit Python dockerizzato per CVE-2019-11043, una vulnerabilità critica di esecuzione remota di codice in PHP-FPM nelle configurazioni NGINX. Include setup, utilizzo e analisi dettagliata.

Vedi Repository
14226 anni 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

PoC CVE-2019-11043

Un'implementazione Python dell'exploit CVE-2019-11043

L'exploit registrato come CVE-2019-11043 sfrutta un bug nell'implementazione di PHP-FPM in combinazione con un server NGINX. In determinate configurazioni, un'espressione regolare nel path_info di FastCGI causa la scrittura del modulo FPM oltre i buffer allocati nello spazio riservato ai dati del protocollo FastCGI. Di conseguenza, un utente web potrebbe essere in grado di eseguire codice in remoto. La tabella seguente mostra la valutazione della gravità dell'exploit secondo il Common Vulnerability Scoring System (CVSS).

MetricaValore
Punteggio Impatto5.9
Punteggio Base9.8
GravitàCritico
Vettore di AccessoRete
RiservatezzaAlto
IntegritàAlto
DisponibilitàAlto

Configurazione

Immagini Docker:

  • nginx@latest
  • [email protected]

Python:

  • script exploit

Per iniziare

È richiesta un'installazione di Docker e docker-compose per eseguire il progetto.

Eseguendo il seguente comando dalla directory principale del progetto, tutte le immagini docker necessarie dovrebbero essere scaricate e i container avviati nell'ordine corretto:

docker-compose up

Per eseguire la configurazione in modalità demone, esegui il seguente comando:

docker-compose up -d

Per arrestare un avvio in modalità demone, esegui il seguente comando:

docker-compose down

Esempio

# docker-compose up -d
Creating php   ... done
Creating nginx ... done

Come usare l'Exploit

# python3 exploit.py --target http://localhost:11043/index.php
🚀🚀🚀 Starting...
? Requesting target to find qsl candidates.
        [Response] Status sode is 502 for QSL 1761. Meets criteria and added as candidate
        [Response] Status sode is 502 for QSL 1762. Meets criteria and added as candidate
        [Response] Status sode is 502 for QSL 1763. Meets criteria and added as candidate
        [Response] Status sode is 502 for QSL 1764. Meets criteria and added as candidate
        [Response] Status sode is 502 for QSL 1765. Meets criteria and added as candidate
        Post processed QSL candidate(s): 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765
⚙️ Testing found candidates
        [Test] QSL Candidate:  1751
        [Test] QSL Candidate:  1752
        [Test] QSL Candidate:  1753
        [Test] QSL Candidate:  1754
        [Test] QSL Candidate:  1755
💣 Target seems vulnerable with attack parameters: (QSL:1755/HVL:8): PHPSESSID=b83281b19399d7725091ad4b2b20e530; path=/
✅ Success: Remote Code Execution exploit successfully deployed!

You should be able to run commands using:
    🌍 curl http://localhost:11043/index.php?a=bin/ls+/
    or
    🌍 curl http://localhost:11043/index.php?a=%0asleep+5%0a+/

Analisi

Il Bug

Questa vulnerabilità è stata trovata durante la Qualificazione del Real World CTF 2019, quando Andrew Danau, un ricercatore di sicurezza, ha scoperto che l'invio di un carattere di controllo nuova riga %0A provoca un'eccezione nel codice del server. Image of Bug fix L'espressione regolare nella direttiva fastcgi_split_path_info può essere rotta utilizzando il carattere di nuova riga (in forma codificata, %0A). L'espressione regolare rotta porta quindi a un PATH_INFO vuoto, che innesca il bug. Poiché env_path_info è l'indirizzo della variabile path_info, path_info è 0 quindi anche pilen è 0. slen è la lunghezza dell'URL richiesto.

Image of Bug fix

Come controllare path_info

Utilizzando una lunghezza accuratamente scelta del percorso URL e della stringa di query, un attaccante può fare in modo che path_info punti precisamente al primo byte della struttura _fcgi_data_seg. Inserendo zero, il campo char* pos si sposta all'indietro, e successivamente FCGI_PUTENV sovrascrive alcuni dati (incluse altre variabili fast cgi) con il percorso dello script. Usando questa tecnica, la vulnerabilità permette di creare una variabile FCGI PHP_VALUE falsa e quindi utilizzare una catena di valori di configurazione accuratamente scelti per ottenere l'esecuzione di codice.

Image of fcgi data seg

int ptlen = strlen(pt);
int slen = len - ptlen;
int len = script_path_translated_len;
  • len è la lunghezza del percorso URL
    • quando l'URL è http://localhost:11043/index.php/TUD%0aNetSec.php
    • script_path_translated dalla configurazione nginx è /var/www/html/index.php/TUD\nNetSec.php
  • ptlen è la lunghezza del contenuto, prima del primo slash nel percorso URL
    • quando l'URL è http://localhost:11043/index.php/TUD%0aNetSec.php
    • pt è /var/www/html/index.php

La differenza tra le due variabili "len" e "ptlen" è la lunghezza del percorso specificato nell'URL. Poiché il percorso di queste due può essere controllato, anche la variabile path_info può essere controllata.

Image of Bug fix Poiché il percorso è controllabile, possiamo impostare il valore di qualsiasi indirizzo a zero (Linea 1222). Impostando a zero il valore dell'indirizzo target, possiamo controllare il char* pos della struttura _fcgi_data_seg a zero. Con questo approccio sfruttiamo un buffer underflow e siamo in grado di scrivere variabili globali nello spazio di memoria corretto.

L'hash e la lunghezza vengono confrontati prima delle chiavi. Scegliendo attentamente le intestazioni e le chiavi giuste, possiamo aggiungere utilizzando le intestazioni. Secondo i risultati di neex, la stringa "ebut", che diventa HTTP_EBUT ha la stessa lunghezza e lo stesso valore FCGI_HASH di PHP_VALUE. Pertanto, inviando una richiesta GET al server simile a
GET /index.php/PHP_VALUE%0Asession_start=1;;; EBUT: tudda nwsec
l'intestazione HTTP_EBUT diventa PHP_VALUE e il valore session_start=1.

Determinare la vulnerabilità di un server

Prerequisiti

La seguente elenca i prerequisiti necessari che devono essere soddisfatti per eseguire l'attacco.

  • Le impostazioni di location nella configurazione NGINX devono essere inoltrate a PHP-FPM
  • La variabile path_info deve essere impostata in accordo con fastcgi_path_info
  • Il path_info è impostato dopo request_uri nella configurazione.
  • L'espressione regolare deve iniziare con ˆ e terminare con $ in modo che env_path_info diventi un valore vuoto quando si analizza un URI con un carattere di nuova riga.
  • Non dovrebbero esserci controlli di esistenza dei file come try_files $uri = 404 nel file di configurazione, poiché ciò impedisce a FastCGI di inoltrare le richieste e non raggiungerà mai PHP-FPM.
  • Questo exploit funziona solo per PHP 7+, per essere più precisi, versioni 7.1.x inferiori a 7.1.33, 7.2.x inferiori a 7.2.24 e 7.3.x inferiori a 7.3.11.

Exploit

Scarica lo strumento