Simple File Path Traversal

Arlen Luman
MII Cyber Security Consulting Services
4 min readSep 28, 2020
Image from portswigger.net

Definisi

Directory Traversal atau yang biasa disebut Path Traversal merupakan sebuah jenis serangan HTTP exploit. Dimana attacker (penyerang) dapat mengakses direktori dan dapat mengeksekusi perintah diluar dari direktori root web server. Hal tersebut dikarenakan lemahnya validasi / sanitasi input yang disediakan oleh server.

Directory traversal atau Path traversal sendiri merupakan teknik yang digunakan oleh attacker untuk dapat memanipulasi input yang akan dikirim ke server, sehingga dapat mengakses direktori lain diluar direktori website, seperti akses /etc/passwd yang mengandung informasi credential pada server. Dalam beberapa kasus, attacker dapat menulis ke arbitrary files di server, memungkinkan mereka mengubah data atau perilaku aplikasi, dan pada akhirnya mengambil kendali penuh server tersebut.

Mari kita ambil sebuah contoh, dimana website ingin menampilkan sebuah gambar dengan cara sebagai berikut:

<img src = “/ loadImage? filename = 218.png”>

Dapat kita lihat, pada url loadImage menggunakan parameter filename sebagai penentu gambar mana atau file mana yang akan ditampilkan atau dikirim oleh aplikasi. Pada contoh ini, file gambar disimpan di direktori /var/www/images/ . Untuk dapat menampilkan file gambar yang diinginkan oleh user, maka aplikasi akan menggabungkan nama file yang sudah diinput pada parameter filename di atas dengan base direktori yaitu /var/www/images/. Sehingga untuk menampilkan gambar yang diinginkan, aplikasi akan mencari direktori sebagai berikut:

/var/www/images/218.png

Apabila aplikasi tidak menerapkan validasi, atau memiliki sanitasi yang buruk terhadap input dari user atau attacker, maka attacker dapat melakukan request URL sebagai berikut untuk dapat mengambil arbitrary file dari filesystem server.

https://insecure-website.com/loadImage?filename=../../../etc/passwd

Request tersebut menyebabkan aplikasi mencari file dari direktori berikut:

/var/www/images/../../../etc/passwd

Penggunaan format ../ akan dimengerti oleh server dan memiliki fungsi untuk naik satu tingkat atau mundur satu direktori. Dengan menambahkan tiga ../ berturut-turut akan menyebabkan aplikasi membaca tiga direktori ke atas, yaitu dari /var/www/images/ menjadi root filesystem. Sehingga, file yang akan dibaca oleh aplikasi menjadi /etc/passwd

Pada sistem operasi berbasis Unix, file passwd merupakan file standar yang menyimpan detail tentang user yang terdaftar di server.

Sistem operasi Windows juga mengenal format ../ dan ..\ untuk navigasi direktori, sehingga kita dapat melakukan hal yang sama pada sistem operasi Windows dengan cara berikut:

https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini

Contoh

Berikut merupakan contoh sederhana terkait kerentanan File Path Traversal atau Directory Traversal. Pada contoh ini penulis menggunakan lab dari website portswigger. Pada lab tersebut terdapat kerentanan File Path Traversal yang dapat kita eksploitasi.

Halaman Dashboard Lab

Target merupakan lab insecure web application dari PortSwigger.

Ketika mengakses website tersebut, terdapat item — item yang menampilkan gambar. Hal ini menarik perhatian penulis, sehingga penunlis melakukan intercept menggunakan burp suite terhadap request yang dikirimkan. Selanjutnya terdapat request bertujuan untuk menampilkan gambar pada website tersebut.

Original Request Filename

Sesuai penjelasan diatas, penulis mencoba untuk melakukan serangan Path Traversal. Sehingga penulis mengubah value parameter filename menjadi ../../../etc/passwd.

Edited Request Filename

Setelah mengubah value dari parameter filename, maka penulis dapat mengakses file /etc/passwd pada server.

Response Request Filename

Dapat dilihat dari hasil request tersebut, server menampilkan isi dari /etc/passwd. Sehingga dapat disimpulkan bahwa website tersebut rentan terhadap serangan File Path Traversal atau Directory Traversal.

Sebagai catatan, aplikasi yang menerapkan validasi / sanitasi namun belum cukup baik membuat aplikasi memfilter dengan cara menghapus ../. Disini attacker dapat mengelabui validasi tersebut dengan menggunakan beberapa contoh format berikut:

  • Menggunakan Nested Traversal Format : …./ atau …\/ atau ….//….//….//etc/passwd
  • Melakukan encode terlebih dahulu : ..%252f..%252f..%252fetc/passwd

Remediasi

Cara yang paling efektif untuk menhindari serangan Path Traversal adalah mengurangi input langsung yang memungkinkan attacker dapat memanipulasi parameter yang akan langsung di eksekusi oleh server.

Namun apabila tidak memungkinkan, maka pastikanlah bahwa server atau aplikasi dapat melakukan validasi atau sanitasi terhadap input yang diberikan oleh user. Aplikasi harus bisa membedakan format — format yang memang sesuai dengan tujuan dari parameter atau request tersebut. Serta membuat daftar format yang dilarang atau yang tidak sesuai dengan tujuan request tersebut.

Selanjutnya aplikasi harus dapat memastikan bahwa direktori yang akan diakses harus lah base direktori dimana file tersebut disimpan.

Referensi: https://portswigger.net/web-security/file-path-traversal

--

--