Cara mengupload file PHP di Joomla



Secara default, Joomla tidak mengizinkan upload file dengan ekstensi .php. Kenapa? Karna itu memang sengaja dibatasi dengan alasan keamanan sistem.


Pada umumnya, Joomla hanya mengizinkan upload file dengan ekstensi gambar dan dokumen umum seperti .jpg, .png, .pdf, .docx, dll.


File yang berekstensi seperti .php, .js, .exe, dan file eksekusi lainnya biasanya diblokir.


Walau pun kalian mengubah pengaturan yang ada di kontrol, seperti: System → Global Configuration → Media


Di situ juga ada opsi "Legal Extensions (File Types)" dan "Restrict Uploads".

Tapi, walau pun kamu tambahkan ekstensi .php ke daftar legal extensions, Joomla tetap saja menolak upload file dengan ekstensi tersebut.


Nah, ada juga beberapa plugin yang bisa mengupload file .php jika plugin tersebut memiliki celah keamanan. Karna, beberapa plugin terkadang memiliki file upload sendiri dan kadang tanpa validasi yang ketat, terutama plugin versi lama.


Contoh plugin yang pernah memiliki kerentanan:


- com_media (versi lama)

- JCE File Manager

- com_joomlaupdate

- com_fabrik

- com_extplorer

- com_elfinder


Jika plugin semacam ini punya celah, file PHP bisa diupload dan dijalankan di server, itulah yang biasanya dimanfaatkan untuk exploit RCE atau shell uploader.


Bisa juga mengupload file PHP melalui server, tapi sudah jelas tidak bisa jika melalui Joomla secara langsung.


💡 Apa sih itu Joomla? cocok untuk website apa saja?
Baca selengkapnya di sini »


Nah, ada satu cara untuk mengupload file dengan ekstensi .php secara langsung melalui Joomla.


Pertama kalian harus membuat file .zip yang berisi file dan folder dengan struktur seperti ini:


com_uploader.zip 

├── com_uploader.xml

├── index.html

├── uploader.php

├── site/

│ └── index.html

└── admin/

└── index.html


Penjelasan:

com_uploader.zip >> ini adalah nama file .zip yang akan kita upload

com_uploader.xml >> ini adalah manifest XML, agar Joomla bisa menerima package

index.html >> buat index dummy kosong aja biar kelihatan normal.

uploader.php >> ini file .php yang ingin kalian upload

site/ >> ini adalah folder pelengkap, isi folder ini dengan index.html (kosongin aja gpp)

admin/ >> folder ini juga pelengkap, sama seperti folder site, isi juga dengan index.html kosong.


Kenapa harus mengupload menggunakan file .zip?

Karna kita akan menguploadnya di extension Joomla, struktur yang saya berikan adalah cara agar Joomla melihat file itu sebagai ekstensi atau komponen yang akan kita install.

Jika kita mengupload file .zip dengan struktur yang berbeda atau hanya ada file .php saja di dalamnya, maka Joomla akan langsung menolak file tersebut. Karna, Joomla akan melihat isi dari file .zip yang kalian upload, jika isinya tidak sesuai dengan struktur komponen pada umumnya, maka Joomla akan langsung menolaknya file tersebut.


Isi dari file penting, seperti: xml, html, dan php


1. com_uploader.xml 

nama file ini disamain aja sama nama file .zip yang akan kalian upload.

Isi:


<?xml version="1.0" encoding="utf-8"?>

<extension type="component" version="3.0" method="upgrade">

    <name>com_uploader</name>

    <author>Component</author>

    <creationDate>2025-09-05</creationDate>

    <version>1.0.0</version>

    <description>Uploader component for test</description>

    <files>
        <filename>index.html</filename>
        <filename>uploader.php</filename>
    </files>

    <administration>
        <files folder="admin">
            <filename>index.html</filename>
        </files>
    </administration>

    <files folder="site">
        <filename>index.html</filename>
    </files>

</extension>


Note: tanggalnya disesuaikan ya.


2. Index.html

Ini adalah file pelengkap, supaya file .zip yang kita upload keliatan normal seperti komponen pada umumnya.

Isi:


<html><body>Nothing here</body></html>


3. uploader.php (file .php yang ingin kalian upload)

Isinya, misal:


<?php

echo "Hello from inside Joomla!";

phpinfo();

?>


Terserah kalian mau di isi apa, misalkan kerang juga gpp.


3. folder site/ dan folder admin/

Isi dengan index.html dimasing-masing folder itu (index.html nya kosongin aja juga gpp).

Kenapa harus ada 2 folder ini? Karna biasa Joomla tidak mau install komponen kalau di manifest jika tidak ada blok <administration>.

Untuk type="component", Joomla selalu butuh struktur minimal site (folder site/) untuk frontend dan administrator (folder admin/) untuk backend.


Dengan begini file .zip untuk menginstall komponen kalian sudah lengkap.


Nah jika sudah, kalian juga harus pastikan jika semua nama file dan folder dari struktur file kalian sesuai dengan nama yang ada di file .xml nya. Jika berbeda sudah pasti akan error atau di tolak oleh Joomla.


Kalo sudah berhasil di upload.


Kalian bisa coba akses seperti ini:


https://target.com/index.php?option=com_uploader


Biasanya akan muncul isi dummy kosong dari index.html yang kalian buat tadi


Untuk akses file .php nya, kalian bisa akses seperti ini:


https://target.com/components/com_uploader/uploader.php


Harusnya isi dari file .php kalian berjalan atau muncul disini.


Tapi, jika aksesnya diblok oleh .htaccess atau muncul tampilan blank putih.

Kalian biasa ubah aja nama file .php kalian, misalnya uploader.php menjadi index.php


Karna, biasanya file .php di dalam folder komponen itu kadang gak dibolehin akses langsung oleh browser.


Jadi, saat kalian akses:


https://target.com/components/com_uploader/uploader.php


Hasilnya blank putih atau 403.


Tapi, jika nama file kalian index.php maka itu akan menjadi file default yang dimana kalian gak perlu tulis nama file .php kalian.


Karna, saat kalian akses:


https://target.com/components/com_uploader/


Kalian akan langsung di arahkan ke index.php nya. Biasanya juga lebih aman dan gak kena blok oleh htaccessnya.



Sekian Tutorial dari saya.

Wassalamualaikum.