Mengenal Local File Inclusion Pada Keamanan Web

Pengantar

Maksud dari artikel ini adalah untuk membantu penguji penetrasi dan mengidentifikasi bahkan menguji kerentanan LFI pada keterlibatan pengujian penetrasi di masa mendatang dengan mengkonsolidasikan penelitian untuk teknik pengujian LFI (local file inclusion). Kerentanan LFI biasanya ditemukan selama pengujian pena aplikasi web menggunakan teknik yang terdapat dalam artikel ini. Selain itu, beberapa teknik yang disebutkan dalam makalah ini juga umum digunakan dalam kompetisi gaya CTF.

Bab Utama

  • Apa yang dimaksud dengan kerentanan Local File Inclusion (LFI)?
  • Mengidentifikasi Kerentanan LFI dalam Aplikasi Web
  • Pembungkus PHP
  • LFI melalui /proc/self/environ
  • Teknik Null Byte
  • Pemotongan LFI Bypass
  • Kontaminasi File Log
  • Email Shell Terbalik

Apa yang dimaksud dengan kerentanan Local File Inclusion (LFI)?

Local File Inclusion (LFI) memungkinkan penyerang memasukkan file di server melalui browser web. Kerentanan ini muncul ketika aplikasi web menyertakan file tanpa membersihkan input dengan benar, memungkinkan dan penyerang memanipulasi input dan memasukkan karakter traversal jalur dan menyertakan file lain dari server web. Berikut ini adalah contoh kode PHP yang rentan terhadap local file inclusion :

<?php

$file = $_GET['file'];

if(isset($file)){

include("pages/$file");

}else{

include("index.php");

}

?>

Mengidentifikasi Kerentanan LFI dalam Aplikasi Web

Kerentanan LFI mudah diidentifikasi dan dieksploitasi. Setiap skrip yang menyertakan file dari server web adalah kandidat yang baik untuk pengujian LFI lebih lanjut, misalnya:

/script.php?page=index.html

Penguji penetrasi akan mencoba mengeksploitasi kerentanan ini dengan memanipulasi parameter lokasi file, seperti:

/script.php?page=../../../../../../../../etc/passwd

Di atas adalah upaya untuk menampilkan isi file /etc/passwd pada sistem berbasis UNIX/Linux. Di bawah ini adalah contoh keberhasilan eksploitasi kerentanan LFI pada aplikasi web

Pembungkus PHP

PHP memiliki sejumlah pembungkus yang sering dapat disalahgunakan untuk mem-bypass berbagai filter input.

PHP Harapkan Pembungkus

PHP expect:// memungkinkan eksekusi perintah sistem, sayangnya modul PHP expect tidak diaktifkan secara default.

php?page=except://ls

Payload dikirim dalam permintaan POST ke server seperti:

/fi/?page=php://input&cmd=ls

Contoh menggunakan php://input terhadap DVWA:

Deskripsi gambar: POST permintaan menggunakan php://input

Respons Aplikasi Web:

Deskripsi gambar: Output dari perintah "ls" ditampilkan di atas spanduk DVWA.

PHP php://filter

php://filter memungkinkan penguji pena untuk memasukkan file lokal dan base64 mengkodekan output. Oleh karena itu, setiap keluaran base64 perlu didekodekan untuk mengungkapkan isinya.

Contoh menggunakan DVWA:

vuln.php?page=php://filter/convert.base64-encode/resource=/etc/passwd

Deskripsi gambar: Gambar yang menunjukkan teks yang disandikan base64 di bagian atas halaman yang dirender.

Base64 mendekode string menyediakan file /etc/passwd:

Deskripsi gambar: Gambar yang menunjukkan keluaran dekode base64 dari /etc/passwd pada sistem UNIX / Linux.

php://filter juga dapat digunakan tanpa base64 menyandikan output menggunakan:

?page=php://filter/resource=/etc/passwd

PHP Pembungkus ZIP LFI

Pembungkus zip memproses file .zip yang diunggah di sisi server yang memungkinkan penguji penetrasi untuk mengunggah file zip menggunakan fungsi unggah file yang rentan dan memanfaatkan filter zip melalui LFI untuk dieksekusi. Contoh serangan tipikal akan terlihat seperti:

  • Buat shell terbalik PHP
  • Kompres ke file .zip
  • Unggah muatan shell terkompresi ke server
  • Gunakan pembungkus zip untuk mengekstrak muatan menggunakan: php?page=zip://path/to/file.zip%23shell
  • Di atas akan mengekstrak file zip ke shell, jika server tidak menambahkan .php ganti namanya menjadi shell.php

Jika fungsi unggah file tidak mengizinkan file zip diunggah, upaya dapat dilakukan untuk melewati fungsi unggah file.

LFI melalui /proc/self/environ

Jika mungkin untuk menyertakan /proc/self/environ melalui kerentanan inklusi file lokal, maka memperkenalkan kode sumber melalui header Agen Pengguna adalah kemungkinan vektor. Setelah kode disuntikkan ke dalam header Agen Pengguna, kerentanan inklusi file lokal dapat dimanfaatkan untuk mengeksekusi /proc/self/environ dan memuat ulang variabel lingkungan, menjalankan shell terbalik Anda.

Kerang yang Berguna

Pintu belakang PHP kecil yang berguna untuk teknik di atas:

<? system('uname -a');?>

Teknik Null Byte

Injeksi byte nol melewati pemfilteran aplikasi dalam aplikasi web dengan menambahkan URL yang disandikan “Bytes nol” seperti %00. Biasanya, ini melewati filter daftar hitam aplikasi web dasar dengan menambahkan karakter null tambahan yang kemudian diizinkan atau tidak diproses oleh aplikasi web backend. Beberapa contoh praktis injeksi byte nol untuk LFI:

vuln.php?page=/etc/passwd%00
vuln.php?page=/etc/passwd%2500

Pemotongan LFI Bypass

Pemotongan adalah teknik bypass daftar hitam lainnya. Dengan menyuntikkan parameter panjang ke dalam mekanisme penyertaan file yang rentan, aplikasi web dapat "memotongnya" (memotong) parameter input, yang dapat melewati filter input.

Kontaminasi File Log

Kontaminasi file log adalah proses penyuntikan kode sumber ke file log pada sistem target. Ini dicapai dengan memperkenalkan kode sumber melalui layanan terbuka lainnya pada sistem target yang akan disimpan oleh sistem operasi/layanan target dalam file log. Misalnya, menyuntikkan kode shell terbalik PHP ke dalam URL, menyebabkan syslog membuat entri di log akses apache untuk halaman 404 tidak ditemukan entri. File log apache kemudian akan diurai menggunakan kerentanan inklusi file yang ditemukan sebelumnya, mengeksekusi shell terbalik PHP yang disuntikkan.

Setelah memasukkan kode sumber ke file log sistem target, langkah selanjutnya adalah mengidentifikasi lokasi file log. Selama tahap pengintaian dan penemuan pengujian penetrasi server web dan kemungkinan sistem operasi target telah diidentifikasi, titik awal yang baik adalah mencari jalur log default untuk sistem operasi dan server web yang diidentifikasi (jika belum diketahui oleh konsultan). Daftar muatan Burp LFI FuzzDB dapat digunakan bersama dengan penyusup Burp untuk dengan cepat mengidentifikasi lokasi file log yang valid pada sistem target.

Beberapa layanan yang umum terekspos pada sistem Linux / UNIX tercantum di bawah ini:

Apache / Nginx

Menyuntikkan kode ke dalam akses server web atau log kesalahan menggunakan netcat, setelah injeksi berhasil mengurai lokasi file log server dengan memanfaatkan kerentanan LFI yang ditemukan sebelumnya. Jika akses server web / log kesalahan panjang, mungkin diperlukan beberapa waktu untuk mengeksekusi kode yang Anda masukkan.

Email Shell Terbalik

Jika mesin target merelai email baik secara langsung atau melalui komputer lain di jaringan dan menyimpan email untuk pengguna www-data (atau pengguna apache) pada sistem, maka dimungkinkan untuk mengirim email shell terbalik ke target. Jika tidak ada data MX untuk domain tetapi SMTP terbuka, Anda dapat terhubung ke server email target dan mengirim email ke pengguna www-data/apache. Email dikirim ke pengguna yang menjalankan apache seperti www-data untuk memastikan izin sistem file akan memungkinkan akses baca file /var/spool/mail/www-data yang berisi kode shell terbalik PHP yang disuntikkan.

Pertama menghitung sistem target menggunakan daftar nama akun UNIX / Linux yang dikenal:

Deskripsi gambar: Gambar di atas menggunakan skrip smtp-user-enum yang mengonfirmasi bahwa pengguna www-data ada di sistem.

Screenshot berikut menunjukkan proses pengiriman email melalui telnet ke pengguna www-data:

Deskripsi gambar: Gambar di atas menunjukkan proses pengiriman shell PHP terbalik melalui SMTP menggunakan telnet

Deskripsi gambar: Gambar di atas menunjukkan penyertaan file spool email www-data yang berisi kode shell terbalik PHP yang dikirim melalui email :

Deskripsi gambar: Gambar di atas menunjukkan shell terbalik PHP yang dikirim melalui email yang terhubung ke pendengar netcat

Penutup

Sampai di sini saja penjelasan local file inclusion pada keamanan web. Semoga bermanfaat!