TOPIK 08 : LOCAL / REMOTE FILE INCLUSION
LOCAL / REMOTE FILE INCLUSION
Local File Inclusion (LFI)
Definisi: LFI adalah kerentanan yang terjadi ketika sebuah aplikasi web memungkinkan pengguna untuk memasukkan file dari sistem file server lokal tanpa validasi yang tepat. Ini bisa dimanfaatkan untuk membaca file sistem yang sensitif atau bahkan menjalankan kode berbahaya.
Cara Kerja:
- Inklusi File: Aplikasi web mengambil nama file dari input pengguna dan menggunakannya untuk menyertakan file dalam halaman web.
- Eksekusi: File tersebut kemudian dieksekusi atau ditampilkan sebagai bagian dari respon web.
Dampak:
- Pengungkapan Informasi: Penyerang dapat membaca file sensitif seperti
/etc/passwd
atau file konfigurasi aplikasi. - Eksekusi Kode: Dalam beberapa kasus, penyerang dapat menjalankan kode berbahaya dengan menyertakan file yang berisi skrip PHP.
Mitigasi:
- Validasi Input: Memastikan bahwa input pengguna hanya mengarah ke file yang diizinkan.
- Penggunaan Fungsi Secure: Menggunakan fungsi yang lebih aman dan membatasi akses file, seperti
readfile()
dengan daftar putih. - Pembatasan Direktori: Membatasi akses hanya ke direktori tertentu dengan
open_basedir
pada PHP.
Remote File Inclusion (RFI)
Definisi: RFI adalah kerentanan yang terjadi ketika aplikasi web memungkinkan pengguna untuk memasukkan file dari lokasi remote (server lain) tanpa validasi yang tepat. Ini dapat dimanfaatkan untuk menjalankan kode berbahaya dari server lain.
Cara Kerja:
- Inklusi File: Aplikasi web mengambil URL dari input pengguna dan menggunakannya untuk menyertakan file dalam halaman web.
- Eksekusi: File tersebut kemudian dieksekusi sebagai bagian dari respon web.
Dampak:
- Eksekusi Kode Jarak Jauh: Penyerang dapat menjalankan skrip berbahaya dari server mereka.
- Pengambilalihan Sistem: Penyerang dapat mengambil alih server dengan menjalankan perintah sistem.
Mitigasi:
- Nonaktifkan Inklusi URL: Pada PHP, atur
allow_url_include
keOff
dalam file konfigurasi. - Validasi Input: Memastikan bahwa input pengguna hanya mengarah ke file yang diizinkan.
- Penggunaan Fungsi Secure: Menggunakan fungsi yang lebih aman dan membatasi akses file.
DEMO 1: SERANGAN LFI
- Buat sebuah folder di C:\xampp\htdocs\ bernama lfi.
- Di dalam folder lfi, buat file bernama index.php dengan isi sebagai berikut:
- <?php// index.php$page = isset($_GET['page']) ? $_GET['page'] : 'home.php';include($page);?>
- Buat file home.php di folder yang sama dengan isi:
- <?phpecho "Welcome to the home page!";?>
- Buka browser dan akses http://localhost/lfi/index.php.
- Untuk membaca file di sistem Windows, kita bisa mencoba membaca file C:\xampp\htdocs\lfi\home.php
- dengan mengubah parameter
- URL: http://localhost/lfi/index.php?page=C:/xampp/htdocs/lfi/home.php
- Coba akses file sensitif seperti konfigurasi Apache: http://localhost/lfi/index.php?page=C:/xampp/apache/conf/httpd.conf
Penjelasan:
- Daftar File yang Diizinkan: Menggunakan array
$allowed_pages
untuk menyimpan nama file yang diizinkan dan kunci yang sesuai dengan nilai$_GET['page']
. - Validasi Input: Menggunakan
array_key_exists
untuk memeriksa apakah nilai$_GET['page']
ada dalam daftar yang diizinkan. - Include File yang Valid: Jika valid, include file yang sesuai dari daftar.
Dengan pendekatan ini, dapat menghindari kemungkinan serangan LFI karena hanya file yang ada dalam daftar yang dapat di-include.
DEMO 2: SERANGAN RFI
Buat folder di C:\xampp\htdocs\ bernama uploads.
Buat file upload.php di C:\xampp\htdocs\lfi\ dengan isi sebagai berikut:
Buat file PHP berbahaya (shell.php) dengan isi:
Untuk mengamankan skrip unggahan file Anda dari serangan Remote File Inclusion (RFI), Anda perlu menerapkan beberapa langkah untuk memastikan hanya file yang sah yang dapat diunggah. Berikut adalah langkah-langkah kunci untuk meningkatkan keamanan skrip Anda:
- Batasi jenis file: Hanya izinkan jenis file tertentu untuk diunggah (misalnya, gambar, PDF).
- Periksa ekstensi file: Validasi ekstensi file.
- Periksa tipe MIME: Validasi tipe MIME dari file yang diunggah.
- Sanitasi nama file: Hapus karakter khusus dari nama file.
- Batasi ukuran file: Tetapkan ukuran maksimum file untuk unggahan.
Berikut adalah versi yang ditingkatkan dari skrip Anda yang mencakup langkah-langkah keamanan ini:
Penjelasan Penambahan:
- Jenis File yang Diizinkan: Hanya mengizinkan ekstensi file tertentu (
jpg
,jpeg
,png
,gif
,pdf
). - Batas Ukuran File: Memastikan file tidak lebih besar dari 5MB.
- Periksa Apakah File Sudah Ada: Mencegah penimpaan file yang sudah ada.
- Periksa Tipe MIME: Memastikan tipe MIME file sesuai dengan yang diizinkan.
- Sanitasi Nama File: Menghapus karakter berbahaya dari nama file.
Peningkatan ini akan membantu melindungi aplikasi Anda dari berbagai kerentanan unggahan file, termasuk serangan Remote File Inclusion (RFI).
Tidak ada komentar: