LOCAL/REMOTE FILE INCLUSION

LOCAL/REMOTE FILE INCLUSION


Local File Inclusion (LFI) dan Remote File Inclusion (RFI) adalah dua jenis serangan terhadap aplikasi web yang memanfaatkan kerentanan dalam cara aplikasi web memuat atau menyertakan file. Serangan ini memungkinkan penyerang untuk membaca file sensitif di server atau menjalankan skrip berbahaya, yang dapat menyebabkan pengungkapan data sensitif, eksekusi kode arbitrer, dan pengambilalihan server.

  • Local File Inclusion (LFI): LFI terjadi ketika aplikasi web memungkinkan pengguna untuk menyertakan file lokal dari server melalui parameter input tanpa validasi yang memadai. Ini memungkinkan penyerang untuk membaca file lokal dari sistem server, seperti file konfigurasi atau file sensitif lainnya.

  • Remote File Inclusion (RFI): RFI terjadi ketika aplikasi web memungkinkan pengguna untuk menyertakan file dari server jarak jauh. Ini memungkinkan penyerang untuk menyertakan dan menjalankan skrip berbahaya dari server yang dikontrol oleh penyerang, yang dapat memberikan akses penuh ke server yang ditargetkan.

Tujuan

Tujuan Serangan LFI dan RFI:

  1. Membaca File Sensitif di Server:

    • Penyerang berusaha mengakses file-file yang mengandung informasi penting dan sensitif seperti konfigurasi server, kredensial basis data, file log, dan file lain yang tidak dimaksudkan untuk diakses oleh pengguna biasa.
  2. Mengeksekusi Skrip Berbahaya:

    • Penyerang mencoba menyisipkan dan mengeksekusi skrip atau perintah berbahaya pada server target. Dalam serangan RFI, penyerang dapat mengunggah skrip berbahaya dari server yang dikontrol oleh mereka sendiri dan menjalankannya pada server target.
  3. Mencuri Data atau Mendapatkan Akses Lebih Lanjut:

    • Penyerang bertujuan untuk mencuri data penting, seperti informasi pribadi pengguna, kredensial login, atau data keuangan. Selain itu, penyerang dapat menggunakan informasi yang diperoleh untuk mendapatkan akses lebih lanjut ke sistem, meningkatkan hak akses mereka, atau bahkan mengambil alih seluruh sistem.


DEMO:

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:
<?php
echo "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 


Catatan: Penyerang bisa mencoba berbagai path untuk menemukan file yang bisa diakses.

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:
<?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.";
}
}
?>

<!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>

• Buat file PHP berbahaya (shell.php) dengan isi:
<?php
echo "Shell executed!";
?>

•Akses http://localhost/lfi/upload.php, pilih file shell.php, dan upload.


• Setelah file diupload, akses URL untuk mengeksekusi: http://localhost/uploads/shell.php



Tugas

1. Tambahkan Script pada File agar Terhindar dari Serangan LFI & RFI

Untuk menghindari serangan LFI (Local File Inclusion) dan RFI (Remote File Inclusion), kita perlu menambahkan langkah-langkah keamanan pada script PHP yang ada. Berikut adalah script yang telah diperbarui:

index.php

<?php
// index.php

// Daftar file yang diizinkan untuk dimasukkan
$allowed_pages = ['home.php', 'about.php', 'contact.php'];

// Ambil parameter 'page' dari URL dan filter
$page = isset($_GET['page']) ? basename($_GET['page']) : 'home.php';

// Pastikan file yang diminta ada dalam daftar yang diizinkan
if (in_array($page, $allowed_pages)) {
    include($page);
} else {
    echo "Page not found.";
}
?>

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


upload.php
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $target_dir = "uploads/";
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $fileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

    // Check if file is an actual file
    if(isset($_POST["submit"])) {
        $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
        if($check !== false) {
            echo "File is an image - " . $check["mime"] . ".";
            $uploadOk = 1;
        } else {
            echo "File is not an image.";
            $uploadOk = 0;
        }
    }

    // Allow certain file formats
    $allowedTypes = array("jpg", "png", "jpeg", "gif", "pdf"); // Add more as needed
    if(!in_array($fileType, $allowedTypes)) {
        echo "Sorry, only JPG, JPEG, PNG, GIF, & PDF files are allowed.";
        $uploadOk = 0;
    }

    // Check if file already exists
    if (file_exists($target_file)) {
        echo "Sorry, file already exists.";
        $uploadOk = 0;
    }

    // Check file size
    if ($_FILES["fileToUpload"]["size"] > 5000000) { // 5MB limit
        echo "Sorry, your file is too large.";
        $uploadOk = 0;
    }

    // Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
        echo "Sorry, your file was not uploaded.";
    // If everything is ok, try to upload file
    } else {
        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.";
        }
    }
}
?>

<!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>






Dampak Serangan LFI (Local File Inclusion)

  1. Pengungkapan Informasi Sensitif:

    • Penyerang dapat membaca file konfigurasi yang berisi informasi sensitif seperti kredensial basis data, konfigurasi server, dan kunci rahasia.
    • Penyerang dapat mengakses dan membaca kode sumber aplikasi, yang dapat mengungkapkan kerentanan lain dan logika bisnis aplikasi.
  2. Eksekusi Perintah Arbitrary:

    • Jika file yang dimasukkan mengandung kode eksekusi atau skrip yang berbahaya, penyerang dapat mengeksekusi perintah pada server dan mengambil alih kontrol penuh.
  3. Bypassing Otentikasi:

    • Penyerang dapat membaca file sesi atau cookie pengguna yang tersimpan secara lokal, memungkinkan mereka untuk meniru identitas pengguna yang sah.

Dampak Serangan RFI (Remote File Inclusion)

  1. Eksekusi Kode Berbahaya:

    • Penyerang dapat memasukkan skrip berbahaya dari server jarak jauh yang kemudian dieksekusi oleh server target. Ini dapat memberikan kendali penuh kepada penyerang atas server tersebut.
    • Penyerang dapat menyisipkan backdoor yang memungkinkan akses terus-menerus ke server target tanpa terdeteksi.
  2. Pengambilalihan Situs Web:

    • Dengan eksekusi kode jarak jauh, penyerang dapat mengubah konten situs web, mencuri informasi pengguna, atau mengarahkan pengunjung ke situs berbahaya lainnya.
  3. Distribusi Malware:

    • Penyerang dapat memasukkan malware yang akan diunduh oleh pengguna yang mengakses aplikasi web, menginfeksi perangkat mereka dan menyebarkan infeksi lebih lanjut.
  4. Pencurian Data:

    • Penyerang dapat memasukkan skrip yang mencuri data dari server atau dari pengguna yang berinteraksi dengan aplikasi web, termasuk informasi login, data pribadi, dan data keuangan.






Komentar

Postingan populer dari blog ini

Operator Pembanding MongoDB

UTS

UTS BIG DATA 8801202103