- 13 Ocak 2021
- 218
- 105
LOCAL FİLE INCLUSİON NEDİR ?
“File inclusion” olarak adlandırılan bu zafiyet çeşidi sayfaya eklenen dosyaların kullanıcı girdisi ile alındığı yada herhangi bir şifreleme,filitreleme işlemi olmadan gönderilmesi sonucunda kullanıcının yetkisi olmayan dosyaları görüntüleyebilmesini,okuyabilmesini sağlayan oldukça zararlı bir zafiyet çeşididir.
Bu zafiyetin sömürülme şekli genelde okunmak istenilen dosyanın yolunu deneme yanılma yöntemi ile bularak sömürebildiğimiz bir zafiyet türüdür.
Örnek vermek gerekirse:
Kod:
http://site.com/index.php?sayfa=../../../../../../../../../etc/passwd
Bir sitenin “index.php” sayfasında bulunan “file inclusion” açığı ile linux sistemlerde bulunan “passwd” dosyasının içeriğini görüntüleyebiliyoruz.
“../” ifadesi ise “/etc/passwd” dosyasının hangi klasörlerin içinde olduğunu bilmediğimiz için “/etc/passwd” dosyasından önce var olan dizinleri tahmin etmeye çalıştığımız bir ifadedir.
Aslında bu güvenlik açığı “index.php” içerisindeki php kodunun getirmiş olduğu bir zafiyettir.
Dilerseniz bu kodun ne olduğuna bakalım:
Kod:
<?php
include($_GET[‘sayfa’])
?>
Bu şekilde bir get isteği yapıldığını görüntülüyoruz şimdi bu get isteğinin “url” kısmındaki çıktısını inceleyelim:
Kod:
http://site.com/index.php?sayfa=dosya.php
Yukarıda ki url bir web sitesindeki çalışan php kodunun bizim aracılığımız ile yolladığı get isteğinin url’e yansımış bir görüntüsüdür.
Url’in sonundaki “dosya.php” site içerisinde gitmek istediğimiz başka bir sayfayı temsil etmektedir.
LFİ zafiyetleri bazen waf (web application firewall) araçları tarafından engellenebilir bu yolda encode ve bypass teknikleri denenerek güvenlik duvarları atlatılmaya çalışılabilir.
Encode tekniği ile oluşturulmuş bazı lfi zafiyeti sömürü örnekleri:
Kod:
http://site.com/index.php?page=%252e%252e%252f
http://site.com/index.php?page=etc/passwd%00
http://site.com/index.php?page=….//….//etc/passwd
LFI ZAFİYETİNDEN KORUNMA YÖNTEMLERİ :
1)Kodları daha güvenli hale getirmek.
Zayıf kod örneği:
Güvenli kod örneği:
Güvenli kod örneğinde gönderilecek veriyi fonksiyon tanımlaması yaparak gönderdiğimiz için dışarıdan gelen veri girişlerine izin vermeyecek ve herhangi bir file inclusion zafiyeti oluşmamış olcaktır.
2)php.ini
“/etc/php.ini dosyasının” içerisinde bulunan “disable_function” değerine bazı parametreleri ekleyerek shell scriptlerinin çalışmasını engellemek mümkün olabilir.
Eklenmesi gereken parametreler:
Okuduğunuz için teşekkür ederim
Zayıf kod örneği:
Kod:
<?php
include($ornek. ‘../index.php’);
?>
Güvenli kod örneği:
Kod:
<?php
$ornek = ‘veri’;
include($ornek. ‘../index.php’);
?>
Güvenli kod örneğinde gönderilecek veriyi fonksiyon tanımlaması yaparak gönderdiğimiz için dışarıdan gelen veri girişlerine izin vermeyecek ve herhangi bir file inclusion zafiyeti oluşmamış olcaktır.
2)php.ini
“/etc/php.ini dosyasının” içerisinde bulunan “disable_function” değerine bazı parametreleri ekleyerek shell scriptlerinin çalışmasını engellemek mümkün olabilir.
Eklenmesi gereken parametreler:
Kod:
disable_function = system, passthru, exec, popen, proc_close, proc_get_status, proc_nice, proc_open, allow_url_fopen, shell, shellexec, executeservice
Okuduğunuz için teşekkür ederim
Moderatör tarafında düzenlendi: