HTTP Dir Traversal Saldırısı
Önem derecesiYüksek
enRead this article in EnglishDir traversal saldırısı ile saldırganlar kötü programlama ya da eksik güvenlik uygulamalarından istifade ederek döküman kökü dışındaki dosya ve dizinlere erişim sağlamayı hedefler. Eğer sunucunuz aşağıdaki gibi bir kullanım sağlıyorsa, saldırgan denemeler yaparak sunucudaki dosya ve dizinlere ulaşmayı deneyebilir.
http://site.com/get-file?f=main.php
Aşağıdaki örnekte get-file komutunun f değişkeninin aldığı dosyayı getiren bir komut olduğunu varsayalım. Bu durumda saldırgan böyle bir GET URL ile deneme yapabilir:
http://site.com/get-file?f=../etc/passwd
Saldırganlar bu şekilde GET ve POST istekleri ile yaparak dosyalar erişim sağlayabilirler. Bu şekilde birkaç dizin kontrol ederek sunucudaki dosyaların yeri belirlenebilir.
Çözüm
Genelde yazılımsal olarak yapılacak değişiklikler ile bu sorunu çözmek daha kolaydır. Halk açık bir URL’den doğrudan sayfa açmak için kullanılan GET ifadeleri, bu ifadeleri denetleyen bir yönlendiriciye iletilmelidir. Bu yönlendirici hem talepleri şifrelenmiş halde alıp çözebilir, hem de talepleri tamamlamak için kullanılabilir. Bu durumda http://site.com/get-file?f=main.php yerine içerik uzantısız olarak çağırılıp http://site.com/get-file?f=main şeklinde çağırılıp, .php eki, yönlendirmenin yapıldığı script içerisinde yapılabilir.

Yukarıdaki ekran görüntüsünde buna bir örnek verilmiştir.
Ek güvenlik adımları için aşağıdakileri uygulayabilirsiniz:
- Sitenin düşük yetkili bir kullanıcı hesabı ile sunulmasını sağlayın: Eğer web siteniz root ya da Administrator gibi her türlü erişim hakkına sahip kullanıcı hesapları ile çalışıyorsa, dışarıdan gelen bir atak sonucunda web erişilebilir dizininin üstündeki dizinler de okunabilir olabilir.
- Sistem ve uygulamalarınız için en son güncellemeleri uygulayın. Programlama dillerinin eski versiyonlarının bu saldırıya karşı açık olduğu bilinir.
- PHP dilindeki realpath() komutu gibi programlama dilinin sağladığı GET ve POST filtreleme fonksiyonları kullanın.
- Programlama dilinin kullanmadığı shell komutlarına iznini kapatın. Örneğin PHP’de disable_functions komutu için örnek aşağıda verilmiştir:
disable_functions = "apache_get_modules,apache_get_version,apache_getenv,apache_note,
apache_setenv,disk_free_space,diskfreespace,dl, highlight_file,ini_alter,ini_restore,
openlog,passthru,phpinfo, proc_nice,shell_exec,show_source,symlink,system, exec,
proc_close,proc_open,popen,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,
c99_sess_ put,fpassthru"
- Web kullanıcılarının derleyiciye (compiler) iznini kaldırın.
chmod 700 /usr/bin/wget
chmod 700 /usr/bin/telnet
chmod 700 /usr/local/bin/lynx
chmod 700 /usr/bin/links
chmod 700 /usr/bin/bcc
chmod 700 /usr/bin/byacc
chmod 700 /usr/bin/cc
chmod 700 /usr/bin/gcc
chmod 700 /usr/bin/i386-redhat-linux-gcc
chmod 700 /usr/bin/perlcc
chmod 700 /usr/bin/yacc
chmod 0700 /usr/bin/curl
chmod 700 /usr/bin/lwp-*
chmod 700 /usr/bin/*ncftp*
-
Web kullanıcılarının dışarıya açık dosyalarda yazma ve çalıştırma izni olmadığına emin olun. PHP yerine php-fpm gibi sınırlı kullanıcı hesapları ile çalışabilen yeni nesil motorlar kullanın.
-
WAF (Web Uygulama Güvenlik Duvarı / Web Application Firewall) kullanın.
Yasal Uyarı
Copyright (c) 2019 – 2026 ONLAYER Bilişim Teknolojileri A.Ş.
Bu sayfadaki içeriğin kullanımı sadece bu sayfaya link ile atıf yapılarak mümkündür. Yazılı izin olmadan değiştirilemez ve alıntı yapılamaz.
Kullanım Uyarısı: Burada belirtilen direktifler olduğu gibidir ve uygulanması sonucunda oluşabilecek servis kesintileri ve veri kaybından ONLAYER sorumlu değildir. Sistemlerin daha iyi çalışabileceği ya da daha güvenli olacağına dair hiç bir garanti verilmemektedir. Ne firma ne de yazar kullanımdan dolayı hiçbir sorumluluk kabul etmemektedir.