Vulnarena

📁 Path Traversal

Path Traversal (Directory Traversal) adalah kerentanan yang memungkinkan penyerang mengakses file di server yang seharusnya tidak boleh diakses, misalnya file konfigurasi atau password.

💥 Contoh Kode Berbahaya (Rentan)

<?php
// Ambil input nama file dari user
$file = $_GET['file'];

// Langsung gabungkan ke path
$content = file_get_contents("/var/www/files/" . $file);
echo $content;
?>
    

🔎 Penjelasan: Input user (file) langsung digunakan untuk membaca file di server. Penyerang bisa masukkan ../../../../../etc/passwd untuk mencuri data penting!

🔍 Contoh Payload Berbahaya

?file=../../../../../../etc/passwd
    

🔎 Payload ini akan membaca file sistem /etc/passwd yang berisi data user Linux!

🛡️ Cara Mencegah Path Traversal

1️⃣ Validasi Nama File

<?php
$allowed_files = ['file1.txt', 'file2.txt'];
$file = $_GET['file'];

if (in_array($file, $allowed_files)) {
  echo file_get_contents("/var/www/files/" . $file);
} else {
  echo "File tidak diizinkan!";
}
?>
    

🔎 Penjelasan: Hanya file tertentu yang diizinkan (pakai whitelist).

2️⃣ Gunakan Fungsi Realpath & Cek Direktori

<?php
$file = $_GET['file'];
$base_dir = '/var/www/files/';
$realpath = realpath($base_dir . $file);

if (strpos($realpath, $base_dir) === 0) {
  echo file_get_contents($realpath);
} else {
  echo "Akses ditolak!";
}
?>
    

🔎 Penjelasan: realpath() memastikan file benar-benar berada di direktori yang diizinkan, mencegah traversal ke luar folder.

3️⃣ Jangan Tampilkan Error Path!

🔎 Penjelasan: Matikan error detail di production. Jika error path muncul, itu akan membantu penyerang tahu struktur file.

🧠 Studi Kasus Nyata & Referensi