21 Ekim 2008

NULL Byte ile Include Saldırıları

Kategori: php — admin @ 01:12

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.

3 Yorum »

  1. 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;
    }

    Yorum yapan ms — 25 Kasım 2008 @ 12:48
  2. evet, alternatif olarak kullanilabilir.

    Yorum yapan admin — 25 Kasım 2008 @ 16:51
  3. ben sizi heyklediydim reklamklik.com :A

    Yorum yapan saho — 26 Ocak 2009 @ 20:00

Bu yazıya yapılan yorumlar için RSS beslemeleri. Geri İzleme URL'si.

Yorum yap