Assalamualaikum w.b.t.,

Pernahkah anda mendengar terminologi seperti berikut: (Blind) SQL Injection, Local File Inclusion (LFI), Remote File Inclusion(RFI), Cross Site Scripting (XSS), Cross Site Request Forgery (XSRF atau CSRF), dan Shell Script? Kebanyakannya ialah berkenaan dengan sekuriti website dan berkait rapat dengan pengujian kelemahan atau pencerobohan dan juga penggodaman.

Semakin hari sudah semakin sibuk dengan kerja yang ke arah pengurusan menyebabkan Dekan ingin mengepos berkenaan di atas supaya pengetahuan tersebut dapat disimpan dan boleh dirujuk oleh diri sendiri nanti. Local File Inclusion (LFI) ialah satu teknik *untuk menggunakan sesuatu file di dalam web server tersebut. Dengan menggunakan teknik ini, sesuatu server tersebut boleh dikompromis dengan mengeluarkan output fail yang menyimpan username admin dan password dan mengeksploitasikan server tersebut dan sebagainya.

*selalunya ia disalah faham dengan teknik memasukkan fail ke dalam web tersebut. terdapat pelbagai cara untuk memasukkan fail, sebagai contoh yang senang ialah menggunakan register dan ‘file upload’ sendiri selain menggunakan teknik LFI (yang juga boleh).

Local File Inclusion (LFI)

Teknik ini adalah web-based dan menggunakan kelemahan coding dalam laman web itu sendiri untuk melakukannya. Contohnya, katakan laman web tersebut mempunyai link seperti berikut:

http://www.formatkomputer.net/ref.php?nama=dekan.php

atau

http://www.formatkomputer.net/?nama=dekan.php

Output yang mungkin ialah:


Salam, Dekan.

Terima kasih kerana melayari laman web ini. Berikut ialah kredit yang anda ada: RM100.50
Berikut ialah rekod transaksi terakhir anda: bla bla bla…

Dalam kes ini dekan.php ialah nama fail yang terdapat di dalam server formatkomputer.net. Jika Dekan tukarkan nama “dekan.php” di alamat di browser kepada “fazira.php” atau “fairuz.php“, mungkin Dekan akan mendapat page atau portfolio mereka. Jadi secara tidak langsung, link tersebut akan membuka fail tersebut.

Bagaimana pula jika Dekan meletakkan link seperti berikut:

http://www.formatkomputer.net/?nama=../../etc/passwd atau
http://www.formatkomputer.net/?nama=../../../etc/passwd atau
http://www.formatkomputer.net/?nama=../../../../etc/passwd

Berkemungkinan, jika berjaya, Dekan akan dapat output seperti berikut:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
dekan:x:2:2:usr:/sbin:/sbin/nologin

Hal ini adalah kerana Dekan merujuk kepada fail passwd di dalam server laman web tersebut. Maka kandungan dalam fail passwd itu akan terpapar seperti di atas.

Penjelasan ../../etc/passwd:

1. Dalam linux, tempat untuk simpan password terletak dalam fail /etc/passwd
2. Output di atas yang dipaparkan menunjukkan nama akaun untuk server tersebut dan juga attribute lain seperti user id, group id, info dan juga password.
3. Jika anda mendapat seperti di atas: root:x:….. kolum ‘x’ adalah kolum untuk password hash. Namun ‘x’ menunjukkan password tersebut diletakkan di dalam /etc/shadow yang mana ia lebih dienkrip
4. tanda ../ menunjukkan lokasi asal folder tersebut diupkan one level.

Bagaimana ia boleh terjadi?

Ia terhasil disebabkan kelemahan dalam koding laman tersebut yang memberikan kemudahan meng’include’ (memasukkan) fail seperti dalam bahasa pengaturcaraan PHP. Contoh kod PHP tersebut ialah seperti berikut:

require_once($LANG_PATH . ‘/’ . $_GET[‘lang’] . ‘.php’);

Kod tersebut menunjukkan variable ‘lang’ (untuk language) dimasukkan ke fail tersebut mungkin kerana pengguna diberi kebenaran untuk memilih bahasa. Kod itu juga menambah .php untuk setiap input yang dimasukkan. Untuk di atas, jika parameter ‘malay’ atau ‘eng’ dihantar, kemungkinan laman web tersebut akan memaparkan kandungan dalam Bahasa Melayu dan Bahasa Inggeris masing-masing. Contohnya:

http://www.formatkomputer.net/index.php?lang=malay

http://www.formatkomputer.net/index.php?lang=eng

Dalam kes ini, tiada .php sekali dengan parameter, dan ia menyukarkan proses file inclusion untuk yang bukan fail php. Tidak benar. Terdapat pelbagai cara lain untuk melakukannya. Antaranya ialah penggunaan Null Byte. Jadi apa yang boleh dilakukan ialah dengan cubaan menghantar parameter lain seperti berikut sebagai contoh:

http://www.formatkomputer.net/index.php?lang=../../etc/passwd%00

Jika bernasib baik, kandungan fail passwd akan terpapar sama seperti di atas. Hal ini adalah kerana “%00” yang dikenali dengan nama NULL byte ditafsir oleh PHP interpreter untuk mengakhiri sesuatu line. Ia seperti noktah di situ. Jadi sebarang perkataan atau coding selepas %00 tidak akan dilayan. Maka ia ditafsirkan sebagai satu fail yang sah dan wujud dan kemudian dipaparkan.

Bersambung.

Post Yang Berkaitan