Malicious File Execution

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

 

Published Friday, May 18, 2007 2:27 AM by Selçuk Yavuz
Filed under: , ,

Comments

# re: Malicious File Execution

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.

Friday, May 18, 2007 10:26 PM by Bedirhan Urgun

# re: Malicious File Execution

$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.

Friday, May 18, 2007 10:27 PM by Bünyamin Demir

# re: Malicious File Execution

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.

Friday, May 18, 2007 10:27 PM by Bedirhan Urgun

# re: Malicious File Execution

Dosyaların mime type larına bakmak ta hiç aklıma gelmemişti. Bu da ilginç miş.

Makale konusu gerçektende basit ve tehlikeli. Başıma geldi ordan biliyorum :)

Yalnız dosya uzantılarını kontrol etmeninde ufak istisnası var şimdi aklıma geldi.

"Turkish I Problem" diye bilinen bir problem yukarıdaki örnekte GIF uzantılı dosyayı kabul etmeyebilir. Türkçe karakter setine göre çalışan bir sistemde ToLower() komutu GIF'i gıf yapacaktır ve Regex ifademizde bir karşılığı bulunmayacak.

Çözümüne bir ara bakıp makaleyi editleyeyim.

Friday, May 18, 2007 10:53 PM by Selçuk Yavuz

# re: Malicious File Execution

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/

Wednesday, May 23, 2007 8:54 AM by Yns

# re: Malicious File Execution

php güvenlik = zend guard + permissions

Thursday, December 13, 2007 11:37 AM by ibrahim

Leave a Comment

(required) 
(required) 
(optional)
(required)