Local File Inclusion (LFI) & Remote File Inclusion (RFI) - Sabilla Ardani Putri


Local File Inclusion (LFI) & Remote File Inclusion (RFI)


Definisi Local File Inclusion (LFI) 

Local File Inclusion (LFI) adalah celah keamanan yang terjadi ketika aplikasi web memungkinkan pengguna untuk memasukkan file lokal dari server melalui input yang tidak divalidasi. Penyerang bisa mengeksploitasi ini untuk membaca file sensitif atau bahkan mengeksekusi kode berbahaya di server.

 

Definisi Remote File Inclusion (RFI)

Remote File Inclusion (RFI) terjadi saat penyerang mengunggah file berbahaya (biasanya file PHP) ke server, kemudian mengeksekusinya dari jarak jauh. Ini biasanya memanfaatkan celah upload file tanpa validasi yang tepat.

Tujuan Serangan

  • Membaca file konfigurasi atau file sensitif seperti password.

  • Mengeksekusi skrip berbahaya.

  • Mendapatkan akses tidak sah atau kontrol atas server.



DEMO Local File Inclusion (LFI)


Langkah 1: Persiapan Folder & File

Buat folder di C:\xampp\htdocs\ dengan nama lfi.

Langkah 2: Buat file index.php

<?php // index.php $page = isset($_GET['page']) ? $_GET['page'] : 'home.php'; include($page); ?>

📌 Keterangan: File ini akan memasukkan file PHP berdasarkan parameter page. Karena tidak ada validasi, maka file apa pun bisa dimasukkan.

Langkah 3: Buat file home.php

<?php echo "Welcome to the home page!"; ?>

Langkah 4: Akses dari browser

Buka browser dan akses: http://localhost/lfi/index.php

Simulasi Serangan

Akses file lain melalui parameter: http://localhost/lfi/index.php?page=C:/xampp/htdocs/lfi/home.php

Atau coba baca file sensitif: http://localhost/lfi/index.php?page=C:/xampp/apache/conf/httpd.conf

📌 Keterangan: Serangan berhasil jika isi file ditampilkan. Penyerang bisa menjelajah file penting sistem.


Output yang tampil di browser adalah isi file konfigurasi Apache httpd.conf, yang seharusnya tidak bisa diakses oleh pengguna biasa melalui browser.

Beberapa hal penting dari file ini:

  1. ServerRoot sudah diatur ke C:/xampp/apache, sesuai dengan struktur XAMPP.

  2. Listen 80 menunjukkan Apache mendengarkan di port 80 — default HTTP.

  3. DocumentRoot "C:/xampp/htdocs" berarti file web kamu akan diload dari folder htdocs.

  4. ServerName localhost:80 disarankan di-uncomment agar tidak muncul warning saat Apache dijalankan.

  5. AllowOverride All dan Require all granted sudah disiapkan agar .htaccess dan akses file berjalan dengan baik.

  6. Banyak module yang di-comment, jadi tidak aktif. Jika kamu butuh fitur tertentu, mungkin perlu mengaktifkan beberapa modul tambahan.



DEMO Remote File Inclusion (RFI)


Langkah 1: Buat folder uploads

Di C:\xampp\htdocs\, buat folder uploads untuk menampung file upload.

Langkah 2: Buat file upload.php

<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $target_dir = "../uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ?>

Langkah 3: Buat Form Upload (HTML)

<!DOCTYPE html> <html> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> Select file to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload File" name="submit"> </form> </body> </html>

Langkah 4: Buat file berbahaya shell.php

<?php echo "Shell executed!"; ?>

Langkah 5: Upload dan Eksekusi

1. Akses upload.php dari browser.


2. Upload file shell.php.


3. Akses URL: http://localhost/uploads/shell.php

 

Pencegahan LFI & RFI


Untuk mencegah LFI:

Gantilah script di index.php:

<?php $allowed_pages = ['home.php', 'about.php']; // whitelist $page = isset($_GET['page']) ? $_GET['page'] : 'home.php'; if (in_array($page, $allowed_pages)) { include($page); } else { echo "Akses tidak diperbolehkan."; } ?>

Untuk mencegah RFI:

Tambahkan validasi MIME type dan ekstensi file:

$allowed_ext = ['jpg', 'png', 'pdf']; // hanya izinkan file tertentu $file_ext = strtolower(pathinfo($target_file, PATHINFO_EXTENSION)); if (!in_array($file_ext, $allowed_ext)) { die("Ekstensi tidak diperbolehkan."); }

Dampak dari Serangan

  • LFI bisa menyebabkan path traversal yang memungkinkan pembacaan file konfigurasi, kredensial, dan script internal.

  • RFI bisa menyebabkan server dijalankan oleh script jahat, shell injection, bahkan mengakses database.

Komentar

Postingan populer dari blog ini

TIDAK TERPAKAI - Footprinting dan Reconnaissance menggunakan Whois, Web History, Google Dork, GHDB

Manajemen Data Master - Sabilla Ardani Putri