Ana SayfaBlogHakkımdaİletişim

Malicious File Execution

18.05.2007 02:27

Kötü Niyetli Dosya Çalıştırma

 

Web uygulamanıza FileUpload ile dosya yüklemesi yapmak durumunda iseniz gelen dosyanın türünü mutlaka denetlemek gerekir. Örneğin bir Forum uygulaması yaptınız ve kullanıcılar kendi resimlerini resimler klasörüne upload edebilmekteler. Saldırgan hazırlamış olduğu bir asp sayfasını resimler klasörüne upload eder ve www.siteniz.com/resimler/foo.asp şeklinde tam yolu yazarak dışardan göndermiş olduğu bir dosyayı sisteminizde çalıştırabilir.

 

Bu şekilde sisteminizin izin verdiği ölçüde yeni dosyalar oluşturabilir. Örneğin anadizinde ki default.aspx dosyasını silip yerine bir default.asp dosyası oluşturabilir. Böylece siteniz açıldığında “hacked by hacker ana” yazısı ile karşılaşabilirsiniz.

 

Böyle üzücü durumların yaşanmaması için sisteminize upload edilen dosyaların türünü denetlemek gerek.

 

Bunun için System.IO.Path ve System.Text.Regex namespacelerinden yararlanacağız.

 Önce upload edilen dosyasın uzantısı nı alacağız ve kabul ettiğimiz dosya türleri içerisinde olup olmadığını denetleyeceğiz. 
string uzanti = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);

System.IO.Path.GetExtension metodu uzntıyı bize “.jpg” gibi noktalı bir şekilde verir.

 

Kullanıcı tarafından gönderilen dosya ismi büyük harfler ile yazılmış olabilir. Buda birazdan yapacağımız karşılaştırmada farklıymış gibi algılanmasına sebep olur. Bu yüzden uzantı harflerini küçültelim.

uzanti = uzanti.ToLower(); 

Kabul edeceğimiz dosya uzantıları için teker teker if kontrolü yazmamak için Regular Expression ifadelerinden yararlacağız.  

 
using System.Text.RegularExpressions;
.....
if(Regex.IsMatch(uzanti,".jpg|.jpeg|.gif|.png|.bmp") == false)
{
    // gönderilen dosya formatı uygun değil
}
else
{
    // gönderilen dosya formatı uygun.
}

 

Kaynak

http://www.owasp.org/index.php/Top_10_2007-A3

 

Bu yazı 19122 kere okundu.

Yorumlar

Bedirhan Urgun
18
May
2007

Bedirhan Urgun said:

Basit ama cok etkili.

Belki yukaridakilere bir de sunlari ekleyebiliriz (genellikle Banka uygulamarinda karsima cikiyor, fatura, cek v.b.); - karsidan yuklenen dosyalar web dizini disinda bir yere konulabilir ve/veya uzantilari degistirilebilir - cogu zaman mumkun olmasa da karsidan yuklenen dosyanin icerigi uzerinde duzenli ifadeler (regex) uygulanabilir.

Bünyamin Demir
18
May
2007

$boyut = $_FILES['dosya']['size'];
$tip = $_FILES['dosya']['type'];

if ($dosyam)
{
# Dosya tıpı dogruysa ...
if(
$tip != "image/pjpeg" and
$tip != "image/jpg" and
$tip != "image/jpeg" and
$tip != "image/gif" and
$tip != "text/plain" and
$tip != "application/pdf" and
$tip != "application/msword" and
$tip != "application/octet-stream" and
$tip != "application/vnd.ms-excel" and
$tip != "application/x-zip-compressed" and
$tip != "application/postscript" and
$tip != "application/rft" and
$tip != "application/x-dvi" and
$tip != "application/x-latex" and
$tip != "application/x-tar" and
$tip != "image/tiff" and
$tip != "text/html" and
$tip != "text/htm" and
$tip != "application/vnd.ms-powerpoint" and
$tip != "image/x-png"
)
{
echo "Ekleme Yaptığınız Dosya Uygun dosya değildir";
exit;
}
# Dosya boyutu dogruysa ...
else if($boyut > 9946709 )
{ echo "Dosya Boyutu Maksimum (8 MB) Olmalıdır"; exit; }

en az bukadar kontrol yapmak lazım... Karşıdan gelen dosya üzerinde düzenli ifade uygulanması ilginç.. Hoşuma gitti, buna biraz bakacağım.

Bedirhan Urgun
18
May
2007
Katiliyorum.

$_FILES['dosya']['type'] icin php.net'te soyle bi ifade var;

"...This mime type is however not checked on the PHP side and therefore don't take its value for granted." Belki de dosya uzantisina bakip kisitlamak daha mantikli gibi.

Veya bilemiyorum, sunucu tarafinda upload edilen dosyanin mime tipini otomatik olarak algilayabilecek bi mekanizma olabilir.

Herneyse... Riske gore kisitlamalar yapilmali.
Yns
23
May
2007
Bunyamin'in verdigi ornek spoof edilebilir; bakınız ( Mime-type spoofing - google ) Önlem önerisi güzel - tabi IO modulunun uzantiyi mantikli bir sekilde aldigini varsayiyorum - birkac sistemde uzantıyı son noktadan sonrasi olarak alan birkac fonksiyon gormustum.Bu da x.jpg.php gibi dosya isimleriyle geçilebilir bu durumda. Eğer sadece grafik dosyaları kabul edilecekse herhangi bir grafik manipule modülü şart gibi, zira Internet Explorer GIF89A diye başlayıp zararlı Javascript kodlarıyla devam eden x.jpg|gif|.. dosyalarını html gibi yorumluyor. Bu da cookie çalınmasına falan yol açabiliyor.Dolayısıyla gelen dosyanın sadece birkaç satırının "grafik" değil tamamının grafik olup olmadığına bakmak lazım. Ben PHP için GD ile konfrol sınıfı yazmıştım; http://code.google.com/p/imagesecurity/
ibrahim
13
Ara
2007
php güvenlik = zend guard + permissions

Yorum Ekle

sen dinliyorum ??

Ad Soyad ( kimlik arayışındaki ergenler nick girebilir )

Web Site ( http ile başlayan ! )

E-posta ( spam ve reklam göndermek için )

Yorum ( XSS atack scriptleri eklenecek alan )

Blog yazılarına geri dön