Local File Inclusion (LFI) ni ko‘rib chiqishdan oldin, keling, File Inclusion va Directory Traversal o‘rtasidagi farqlarni qisqacha o‘rganib chiqaylik. Ushbu ikki tushuncha ko‘pincha penetratsion testerlar va xavfsizlik mutaxassislari tomonidan chalkashtirib yuboriladi. Agar biz topgan zaiflik turini noto‘g‘ri aniqlasak, kodni ijro etish imkoniyatini qo‘ldan boy berishimiz mumkin.
O‘tgan o‘quv bo‘limida ko‘rib o‘tganimizdek, directory traversal zaifliklari yordamida veb-serverning veb-root direktoriyasidan tashqaridagi faylning tarkibini olishimiz mumkin. File Inclusion zaifliklari esa faylni ilovaning ishlayotgan kodiga "kiritish" imkonini beradi. Bu shuni anglatadiki, file inclusion zaifliklari yordamida mahalliy yoki masofaviy fayllarni ijro etishimiz mumkin, directory traversal esa faqat fayl tarkibini o‘qishga imkon beradi. File Inclusion zaifliklari bilan fayllarni ilovaning ishlayotgan kodiga kiritishimiz mumkin bo‘lgani uchun, ijro etilmaydigan fayllarning tarkibini ham ko‘rsatishimiz mumkin. Masalan, agar PHP veb-ilovasida directory traversal zaifligini ekspluat qilib, admin.php faylini belgilasak, PHP faylining manba kodi ko‘rsatiladi. Boshqa tomondan, file inclusion zaifligi bilan ishlaganda, admin.php fayli ijro etiladi.
Quyidagi misolda bizning maqsadimiz Local File Inclusion (LFI) zaifligi orqali Remote Code Execution (RCE) ni qo‘lga kiritishdir. Buni Log Poisoning yordamida amalga oshiramiz. Log Poisoning veb-ilovaga yuboradigan ma'lumotlarni o‘zgartirish orqali loglarda ijro etiladigan kodni saqlashga imkon beradi. LFI zaifligi stsenariysida, biz kiritadigan mahalliy fayl, agar unda ijro etiladigan tarkib bo‘lsa, ijro etiladi. Bu shuni anglatadiki, agar biz faylga ijro etiladigan kod yozib, uni ishlayotgan kodga kiritishga muvaffaq bo‘lsak, u ijro etiladi.
Quyidagi amaliy misolda biz Apache’ning access.log fayliga, /var/log/apache2/ direktoriyasida joylashgan ijro etiladigan kodni yozishga harakat qilamiz. Avval Apache tomonidan ushbu logda saqlanadigan va biz tomonidan boshqariladigan ma'lumotlarni ko‘rib chiqishimiz kerak. Bu yerda "boshqariladigan" degani, biz ma'lumotlarni veb-ilovaga yuborishdan oldin uni o‘zgartirishimiz mumkin deganidir. Biz Apache veb-server hujjatlarini o‘qishimiz yoki LFI orqali faylni ko‘rsatishimiz mumkin.
Keling, curl dan foydalanib, log yozuvini tashkil etuvchi elementlarni tahlil qilish uchun ilgari topilgan directory traversal zaifligi yordamida access.log faylini ko‘rsatamiz. Bu shuni anglatadiki, Mountain Desserts veb-ilovasidagi zaif bo‘lgan page parametrida log faylining nisbiy yo‘lini ishlatamiz.
kali@kali:~$ **curl <http://mountaindesserts.com/meteor/index.php?page=../../../../../../../../../var/log/apache2/access.log**>
...
192.168.50.1 - - [12/Apr/2022:10:34:55 +0000] "GET /meteor/index.php?page=admin.php HTTP/1.1" 200 2218 "-" OS{08bd80fbd7336a302bca89bfec18208c**"Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0"**
...
Ro‘yxat 13 - Apache’ning access.log faylidagi log yozuvi
Ro‘yxat 13 da User Agent log yozuvida kiritilganligi ko‘rsatilgan. So‘rov yuborishdan oldin, biz Burp’da User Agent ni o‘zgartirib, access.log fayliga nima yozilishini belgilashimiz mumkin.
Belgilangan fayldan tashqari, bu buyruq o‘tgan o‘quv bo‘limidagi directory traversal hujumiga tengdir. Directory Traversal va LFI zaifliklarini ekspluat qilish asosan ijro etiladigan fayllar yoki tarkib bilan ishlashda farqlanadi.
Keling, Burp’ni ishga tushiramiz, brauzerni ochamiz va Mountain Desserts veb-sahifasiga o‘tamiz. Sahifaning pastki qismidagi Admin havolasini bosamiz, so‘ng Burp’ga qaytib, HTTP history yorlig‘ini bosamiz. Tegishli so‘rovni tanlaymiz va uni Repeater ga yuboramiz.

8-rasm: Burp Repeater’da o‘zgartirilmagan so‘rov
Endi User Agent ni quyidagi ro‘yxatdagi PHP kod parchasini o‘z ichiga olish uchun o‘zgartiramiz. Ushbu parcha cmd parametri orqali buyruqni qabul qiladi va uni PHP system funksiyasi orqali nishon tizimda ijro etadi. Buyruq chiqishini ko‘rsatish uchun echo dan foydalanamiz.
<?php echo system($_GET['cmd']); ?>
Ro‘yxat 14 - User Agent’ga joylashtiriladigan PHP parchas
User Agent ni o‘zgartirgandan so‘ng, Send tugmasini bosamiz.

9-rasm: Burp Repeater’da o‘zgartirilgan so‘rov
PHP kod parchas access.log fayliga yozildi. LFI zaifligi orqali log faylini kiritish orqali biz PHP kod parchasini ijro etishimiz mumkin.
Parchamizni ijro etish uchun avval joriy Burp so‘rovida page parametrini nisbiy yo‘l bilan yangilaymiz.