Local File Inclusion Nedir ?
“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.
Local file inclusion ise local yani yerel makinamızdan dosya ekleyerek kod çalıştırdığımız file inclusion çeşitlerinden bir tanesidir.
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:
http://site.com/index.php?sayfa=../../../../../../../../../etc/passwd
Yukarıda örnek olarak vermiş olduğum kodda 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.
Bu kodun çıktısı şu şekilde oluyor:
“/etc/passwd” dosyası Linux sistemlerde kayıtlı olan kullanıcıları gösteren bir dosyadır ve buradaki file inclusion güvenlik açığından yararlanarak passwd dosyasını okumayı başardık.
“../” 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:
<?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:
http://site.com/index.php?sayfa=dosya.php
Yukarıda görmüş olduğunuz 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.
Bu ve bu tarz sayfa yönlendirmelerinde her zaman bir “file inclusion” zafiyeti olma olasılığı bulunmaktadır dikkatli bir şekilde kontrolü yapılmalı eğer zafiyet varsa hemen kapatılmalıdır.
Sizlere “LFİ” zafiyetlerinin kontrol işlemleri için oluşturulmuş github üzerinde bulunan ayrıntılı bir payload listesinin linkini bırakacağım incelemek isteyenler linke tıklayıp inceleyebilirler:
https://github.com/payloadbox/rfi-lfi-payload-list
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:
- 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
Rot 13 ve base64 encode php://filter tekniği ile lfi zafiyeti sömürü örneği:
- http://site.com/index.php?page=php://filter/read=string.rot13/resource=index.php
- http://site.com/index.php?page=php://filter/convert.base64-encode/resource=index.php
- http://site.com/index.php?page=php://filter/zlib.deflate/convert.base64-encode/resource=/etc/passwd
LFI Zafiyetinden Korunma Yöntemleri
1)Kodları daha güvenli hale getirmek.
Zayıf kod örneği:
<?php
include($ornek. ‘../index.php’);
?>
Güvenli kod örneği:
<?php
$ornek = ‘veri’;
include($ornek. ‘../index.php’);
?>
Yukarıdaki 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:
disable_function = system, passthru, exec, popen, proc_close, proc_get_status, proc_nice, proc_open, allow_url_fopen, shell, shellexec, executeservice
LFI Zafiyet Sömürü Araçları Nelerdir ?
Lfi zafiyetinin manuel yollar ile kontrolü sağlanıp sömürülebildiği gibi hazır araçlar ile de kontrol edilebilir ve sömürülebilir bu araçlardan bazılarının github linkini sizlere bırakacağım incelemek isterseniz linke tıklayıp inceleyebilirsiniz.
Evet yazımızın sonuna geldik arkadaşlar bu yazımızda “local file inclusion (lfi)” zafiyetinden bahsettik umarım sizlere faydalı bir yazı olmuştur vaktinizi ayırıp okuduğunuz için teşekkürler.