NULL Byte ile Include Saldırıları
Geçen gün mesut ile include üzerine muhabbet ediyordum. $_GET ile gelen datayı nasıl sayfaya include
ettiğini sordum, addslashes() ile gelen veriyi kontrol ediyormuş.
<? include addslashes($_GET['site']).".php"; ?>
Bu betikte yapılan tek şey “.php” uzantısını eklemek, asıl konumuz null byte kısmına gelelim. null byte, ascii ve unicode karakter setlerinden oluşur ve sonu geçersiz karakter ile biter, %00 gibi.
yukarıda yazdığım kod örneği ile bu mümkün, bu şekilde sunucunuz üzerine gezintiye çıkabilirler.
şöyle ki;
http://siteadi.com/git.php?adres=../../../../etc/passwd%00
Genel olarak bu problemi bazı kişiler file_exists() ile çözmeye çalışır. Girdiğimiz path “../../../../etc/passwd” http 200 döndürmüyor mu? Dosyanın var olup olmadığını kontrol etmemizde herhangi bir anlam taşımıyor.
Mevzuyu çok uzattım
Bu olayın kesin çözümü beyaz listedir. Array içine dosya isimlerini girdikten sonra in_array ile tanımlı olup olmadığını kontrol etmenin faydalı/yeterli olacağını kanısındayım.
Değişkene /.. vs koyulmasını önlemek ve sadece küçük harflerden oluşup oluşmadığını basitçe kontrol etmek için;
if (ereg(“[^a-z]“,$_GET['loc']))
{
echo “Yanlış bir adres denediniz.”;
exit;
}
evet, alternatif olarak kullanilabilir.
ben sizi heyklediydim reklamklik.com :A