LOCAL/REMOTE FILE INCLUSION

 

LOCAL/REMOTE FILE INCLUSION


DEFINISI 

  • Local File Inclusion (LFI) adalah sebuah kerentanan dalam aplikasi web yang memungkinkan penyerang untuk memasukkan file lokal ke dalam eksekusi kode melalui input yang tidak divalidasi. 
  • Sedangkan serangan yang melibatkan upload file lalu mengeksekusi file tersebut disebut Remote File Inclusion (RFI)

TUJUAN SERANGAN
  •  Membaca file sensitif di server.
  •  Mengeksekusi skrip berbahaya. 
  • Mencuri data atau mendapatkan akses lebih lanjut.
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: 
  • Akses http://localhost/lfi/upload.php, pilih file shell.php, dan upload.
  • Setelah file diupload, akses URL untuk mengeksekusi:
     http://localhost/uploads/shell.php

Tambahkan script pada file tersebut agar terhindar dari serangan LFI & RFI
Pada file index.php kita menambahkan script sebagai berikut;
<?php
// index.php
$page = isset($_GET['page']) ? $_GET['page'] : 'home.php';
include($page);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>File Upload</title>
    <script>
        function validateFile() {
            const fileInput = document.getElementById('fileToUpload');
            const filePath = fileInput.value;
            const allowedExtensions = /(\.jpg|\.jpeg|\.png|\.gif|\.pdf)$/i;
            if (!allowedExtensions.exec(filePath)) {
                alert('Please upload file having extensions .jpeg/.jpg/.png/.gif/.pdf only.');
                fileInput.value = '';
                return false;
            }
            return true;
        }
    </script>
</head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data" onsubmit="return validateFile()">
        <label for="fileToUpload">Select file to upload:</label>
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload File" name="submit">
    </form>
</body>
</html>

Pada script diatas bertujuan untuk membatasi file apa saja yang bisa di upload, sehingga file yang du upload tidak sembarangan.

Selanjutnya adalah pada file upload.php kita menambahkan sript atau mengedit script sebelumnya menjadi :
<?php
// Tentukan direktori upload
$target_dir = "uploads/";

// Buat direktori jika belum ada
if (!is_dir($target_dir)) {
    mkdir($target_dir, 0755, true);
}

// Tentukan file yang akan diupload
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$fileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// Cek apakah file adalah file gambar atau tipe file yang diizinkan
$allowedExtensions = array("jpg", "jpeg", "png", "gif", "pdf");
if (!in_array($fileType, $allowedExtensions)) {
    echo "Sorry, only JPG, JPEG, PNG, GIF, & PDF files are allowed.";
    $uploadOk = 0;
}

// Cek apakah $uploadOk sudah diatur menjadi 0 oleh kesalahan
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
} else {
    // Gunakan move_uploaded_file untuk menghindari LFI & RFI
    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>


Serangan Local File Inclusion (LFI) dan Remote File Inclusion (RFI) adalah jenis serangan keamanan web yang mengeksploitasi kerentanan dalam aplikasi web yang memungkinkan penyerang untuk memasukkan file dari sistem lokal atau remote ke dalam aplikasi. Berikut adalah dampak dari kedua jenis serangan ini:

Dampak dari Serangan LFI

1. Pembocoran Informasi Sensitif:
   - Penyerang dapat membaca file sensitif dari server, seperti konfigurasi server (e.g., `php.ini`), file sistem (e.g., `/etc/passwd`), atau file aplikasi yang mengandung informasi rahasia (e.g., file database).

2. Eksekusi Kode Arbitrer:
   - Jika penyerang dapat memasukkan file yang berisi kode berbahaya, mereka bisa menjalankan kode tersebut di server. Ini bisa dilakukan dengan menggabungkan serangan LFI dengan teknik lain, seperti file upload yang tidak aman.

3. Pengambilan Informasi Pengguna:
   - Penyerang dapat mengakses file log yang mungkin mengandung informasi pengguna atau detail sesi yang sensitif.

4. Eskalasi Privilege:
   - Dengan mengakses file yang berisi kredensial atau detail konfigurasi lainnya, penyerang bisa mendapatkan akses yang lebih tinggi dalam sistem.

Dampak dari Serangan RFI

1. Eksekusi Kode Berbahaya:
   - Penyerang dapat memasukkan file dari server remote yang berisi kode berbahaya. Kode ini akan dieksekusi oleh server, memungkinkan penyerang untuk mengontrol server atau melakukan aksi berbahaya lainnya.

2. Deface Website:
   - Penyerang bisa mengganti konten situs web dengan konten berbahaya atau ofensif, merusak reputasi organisasi.

3. Penyebaran Malware:
   - Penyerang dapat menggunakan RFI untuk menyebarkan malware ke pengguna yang mengunjungi situs web tersebut. File remote yang dimasukkan bisa berisi skrip yang menginfeksi pengguna dengan malware.

4. Pengambilan Informasi Pengguna:
   - Mirip dengan LFI, penyerang bisa mengakses informasi sensitif yang bisa diekspos oleh skrip yang mereka masukkan.

Pencegahan LFI dan RFI

1. Validasi Input:
   - Validasi dan sanitasi input pengguna dengan benar. Jangan pernah menggunakan input pengguna langsung dalam fungsi file.

2. Konfigurasi Server yang Aman:
   - Konfigurasi server untuk mencegah inklusi file dari sumber yang tidak dipercaya. Misalnya, menonaktifkan `allow_url_include` dan `allow_url_fopen` di konfigurasi PHP.

3. Penggunaan Fungsi yang Aman:
   - Gunakan fungsi PHP yang aman untuk menangani file, seperti `move_uploaded_file()`.

4. Pengaturan Izin File yang Tepat:
   - Pastikan bahwa file yang tidak perlu diakses oleh aplikasi web memiliki izin yang tepat untuk mencegah akses yang tidak sah.

5. Keamanan Aplikasi yang Komprehensif:
   - Selalu lakukan peninjauan keamanan terhadap aplikasi web dan implementasikan praktik pengkodean yang aman untuk mencegah kerentanan seperti LFI dan RFI.

Tidak ada komentar:

Posting Komentar