Bosh sahifa Wiki LFI

LFI

LFI — web application user ta’sir qila oladigan path yoki file nomini serverdagi local faylni include qilish uchun ishlatganda yuzaga keladigan zaiflik. To‘liq nomi Local File Inclusion. Zaiflik attackerga application serverining lokal filesystemidagi fayllarni o‘qish, ayrim sharoitlarda esa ularning mazmunini interpreter orqali bajarishga olib kelishi mumkin.

LFI ko‘pincha dinamik sahifa, template, til fayli, theme, plugin yoki document loader funksiyalarida uchraydi.

Zaif kod modeli

Application sahifa nomini requestdan olib, to‘g‘ridan-to‘g‘ri pathga qo‘shishi mumkin:

include(base_path + user_value)

Developer about yoki contact kabi qiymat kutadi. Attacker esa path traversal belgilaridan foydalanib boshqa local faylga murojaat qilishga urinadi.

Path Traversal bilan aloqa

Path Traversal serverdagi ruxsat etilmagan fayl yoki directoryga yo‘l topishni anglatadi.

LFI esa topilgan local faylni applicationning include yoki template mexanizmi orqali qayta ishlaydi.

Har LFI path traversalga tayanishi mumkin, ammo har path traversal code include qilmaydi; ba’zan faqat file download yuz beradi.

Local file disclosure

Zaiflik quyidagi turdagi fayllarni oshkor qilishi mumkin:

Process faqat o‘z permissioni yetgan fayllarni o‘qiy oladi.

Path normalization

Path ichidagi:

kabi holatlar noto‘g‘ri validationni chetlab o‘tishi mumkin.

Path bir marta ishonchli library bilan canonical ko‘rinishga keltiriladi va ruxsat etilgan root ichida qolishi tekshiriladi.

Allowlist

Userdan to‘liq file path olish o‘rniga logical key qabul qilinadi.

Masalan:

page=about

server ichida:

about → templates/about.html

mapping ishlatiladi.

User ixtiyoriy path, extension yoki directory tanlamaydi.

Extension qo‘shish

Ba’zi application user qiymatiga avtomatik extension qo‘shadi:

value + ".html"

Bu himoya sifatida yetarli emas.

Parser, null byte tarixiy xatolari, wrapper yoki normalization farqlari sabab bypasslar mavjud bo‘lishi mumkin.

Asosiy himoya allowlist.

Include va read farqi

Template engine faylni oddiy text sifatida o‘qishi yoki code sifatida execute qilishi mumkin.

Agar server-side script include qilinsa uning code’i bajarilishi ehtimoli bor.

Oddiy system file code bo‘lmasa ham response orqali oshkor qilinishi mumkin.

Log poisoning

Ayrim sharoitlarda attacker application logiga interpreter tushunadigan matn yozdirib, keyin LFI orqali shu logni include qilishga urinadi.

Bu LFI’ni code executionga aylantirishi mumkin.

Logning execute qilinmaydigan storage’da saqlanishi va user inputning structured yozilishi ta’sirni kamaytiradi.

Upload bilan birga

User upload qilgan fayl serverda saqlanadi va uning pathi taxmin qilinsa LFI orqali include qilinishi mumkin.

Upload validationning o‘zi yetarli emas.

Uploaded file:

saqlanadi.

Session fayli

Ayrim platformalarda session data local file’da saqlanishi mumkin.

Attacker sessionga nazorat qilinadigan qiymat yozib, keyin session faylini include qilishga urinishi mumkin.

Session storage va include root bir-biridan ajratiladi.

Ruxsat etilgan directory ichidagi symbolic link tashqi sensitive pathga olib borishi mumkin.

Faqat string prefix tekshiruvi yetarli emas.

Resolved real path ruxsat etilgan base directory ichida ekanini tekshirish kerak.

Container muhiti

Container filesystemi hostdan ajratilgan bo‘lsa ham unda:

mavjud bo‘lishi mumkin.

LFI container ichidagi bu ma’lumotlarni oshkor qilishi ehtimoli bor.

Error message

Include xatosi serverning to‘liq pathi, framework versiyasi va stack trace’ni ko‘rsatishi mumkin.

Production response’da umumiy xato qaytariladi.

Batafsil error faqat himoyalangan logda saqlanadi.

Himoya

Asosiy choralar:

  • file pathni userdan to‘liq olmaslik;
  • logical ID va allowlist;
  • canonical path tekshiruvi;
  • minimal filesystem permission;
  • uploaded file’ni ajratish;
  • include funksiyasini cheklash;
  • template’larni package ichida saqlash;
  • errorlarni yashirish.

Test

Security test quyidagilarni tekshiradi:

  • traversal;
  • encoded separator;
  • absolute path;
  • symbolic link;
  • null va unusual character;
  • upload path;
  • log file;
  • nested directory;
  • platformlar orasidagi separator.

Testlar izolyatsiyalangan muhitda bajariladi va real secretlar ishlatilmaydi.

Incident

LFI orqali secret oshkor bo‘lgan bo‘lsa credential va keylar rotation qilinadi. Access loglar qaysi fayllar so‘ralganini aniqlash uchun tekshiriladi. Faqat path validationni tuzatish oldin olingan tokenlarni bekor qilmaydi.

Framework route

Static file yoki template helper framework tomonidan xavfsiz ko‘rinsa ham user pathini qanday normalize qilishi tekshiriladi. Alias, route parameter va locale fallback birgalikda kutilmagan directoryga olib borishi mumkin. Framework update’lari path security tuzatishlarini ham o‘z ichiga oladi.

Windows va Unix

Path separator, drive letter, UNC path va case sensitivity operatsion tizimga qarab farq qiladi. Faqat / belgisi bo‘yicha validation Windowsda yetarli emas. Cross-platform application har supported platformda test qilinadi.

File descriptor

Yuqori xavfli service oldindan ochilgan aniq file descriptor yoki resource package’dan o‘qishi mumkin. Runtime’da arbitrary path ochish imkoniyati berilmaydi. Bu file selection attack surface’ini keskin kamaytiradi.

Bog‘liq tushunchalar

Local File Inclusion, Path Traversal, File disclosure, Template engine, Log poisoning, File upload, Canonical path, Allowlist, RCE, Web security