File Inclusion Zafiyeti, Önlemler, Bypass ve Saldırı İzleri

Amaç

DVWA Lab. ortamında File Inclusion zafiyetinin bir saldırgan tarafından nasıl istismar edileceği ve saldırı neticesinde erişim log kayıtlarında nasıl izler oluşacağını öğrenmek.

File Inclusion Nedir ?

Bu zafiyet türünü örnek ile açıklayacak olursak; ilgili internet sitesinin sunucularında olan fakat kullanıcıların ziyaretine sunmadığı bir dosyanın görüntülenebilmesi ya da farklı bir dosyanın sisteme dahil edilmesi ile oluşan bir zafiyet türüdür.

Bu zafiyet karşımıza iki şekilde çıkmaktadır.

Local File Inclusion : Sitede ziyaretçilere sunulmamış dosyaların site üzerinden görüntülenmesi ile oluşan bir zafiyet türüdür.

Remote File Inclusion : Hedef sitede başka dosyaların dışarıdan dahil edilerek görüntülenmesi ile oluşan zafiyet türüdür.

DVWA File Inclusion – {Low Level}

Yukarıda ekran görüntüsünde görüldüğü üzere ilgili sayfayı ziyaret ettiğinizde URL adresi aşağıdaki şekilde karşımıza çıkmaktadır.

  • http://localhost/dvwa/vulnerabilities/fi/?page=include.php

Bu URL adresinde;

  • ? işareti parametrelerin sıralanacağı kısmın başlangıcını,
  • = işareti parametreye değer atanacağını ifade etmektedir.

Bu tanımlamalardan yola çıkarak parametrenin adı page, bu parametreye atanan değer ise bir dosya ismi olan include.php’dir.

Şimdi sayfada bağlantıları verilen file1.php, file2.php ve file3.php linklere tıklayarak içerikteki değişiklikleri gözlemleyebilirsiniz. Bir de normalde bağlantısı verilmeyen file4.php adlı bir dosya mevcut. Bunu bir saldırgan olarak tahmin ederek URL adres satırına file4.php yazarak bu dosyayı görüntüleyebilirsiniz.

Local File Inclusion zafiyetinin nasıl istismar edileceğine değinmeden önce kaynak kodlara bakarak bu zafiyetin neden kaynaklandığına değinelim.

Düşük seviyedeki zafiyetin kaynak kodlara göz attığımızda page parametresine gelen dosya adının herhangi bir denetleme mekanizmasına sokulmadan işleme alındığı görülüyor. Bu nedenle saldırgan burada page parametresine görüntülemek istediği istediği dosya adını vererek görüntüleyebilir.

Bu zafiyetin açıklamasından yola çıkarak hedef sitenin kurulu olduğu linux sunucuda /etc/passwd dosyasını görüntülemek için page parametresinin değerine doğru bir şekilde dizin yolunu belirterek (üst dizinlere çıkarak) /etc/passwd yazıyoruz.

Remote File Inclusion zafiyeti ile de farklı bir yerdeki dosyayı siteye dahil ederek ilgili site üzerinden görüntüleyebilirsiniz. Bu bir hacklendiğine dair sayfa, görsel, yazı olabileceği gibi shell dosyasıda olabilir. Page parametresinin değeri olarak dahil edilecek URL adresini belirtmeniz yeterli olacaktır.

DVWA File Inclusion – {Medium Level}

Bu zafiyetin orta seviyesinde önce kaynak kodları inceleyerek ne tarz önlemler aldıklarını inceleyelim.

  • ilk str_replace() fonksiyonu ile page parametresine değer olarak girilen dosya isminde “http://” ve “https://” yazılması halinde silinmesi belirtilerek RFI zafiyetine karşı bir önlem alınmıştır.
  • İkinci str_replace() fonksiyonu ile page parametresine değer olarak girilen dosya isminde “../” ve “..\“” yazılması halinde silinmesi belirtilerek LFI zafiyetine karşı bir önlem alınmıştır.

RFI zafiyetine alınan önlemi bypass etmek için aşağıdaki gibi bir istek gerçekleştirebiliriz. Burada http:// otomatik olarak str_replace fonksiyonu sayesinde silinecektir. htt ve p:// sonrasında birleşecek ve ilgili shell dosyası görüntülenebilecektir.

  • localhost/dvwa/vulnerabilities/fi/?page=htthttp://p://localhost/c99.php

Aynı mantıktan yola çıkarak LFI zafiyetine karşı alınan önlemi bypass etmek için aşağıdaki gibi istek gerçekleştirebilirsiniz. Burada ../ otomatik olarak str_replace fonksiyonu ile silinecektir. Sonrasında . ve ./ birleşerek görüntüleme işlemi gerçekleşecektir.

  • localhost/dvwa/vulnerabilities/fi/?page=..././etc/passwd

DVWA File Inclusion – {High Level}

Bu zafiyetin yüksek seviyesinde önce kaynak kodları inceleyerek ne tarz önlemler aldıklarını inceleyelim.

Burada kaynak kodları incelediğimizde güvenlik denetimlerinin sıklaştırıldığını görüyoruz. Sadece file ile başlayan dosyaları ve include.php dosyasının görüntülenmesine izin verilmiştir. Burada kullanılan fnmatch() işlevi, belirtilen dizge’nin belirtilen dosya kalıbı ile eşleşip eşleşmediğine bakmaktadır. Bu kısımda tam olarak güvenlik sağlanmış sayılmaz. Hatırlayacağınız üzere ilk düşük seviyede file4.php URL adresinin bağlantı linki normalde sayfada gösterilmiyordu. Fakat URL satırında o dosyaya istek yaparak başarılı bir şekilde içeriği görüntülemiştik. Yine burada file ile başlayan her dosya görüntüleneceği için kolayda file4.php dosyasını açarak zafiyeti istismar edebiliriz. Bu sorunun nasıl çözüleceği noktasına impossible seviyesinde değinilecektir.

DVWA File Inclusion – {impossible Level}

Bu zafiyetin imkansız seviyesindeki kaynak kodları inceleyerek ne tarz önlemler aldıklarını inceleyelim.

Kaynak kodları incelediğimizde burada sıkı bir güvenlik önleminin alınmış olduğunu görüyoruz. Sadece include.php, file1.php, file2.php ve file3.php adlı dosyaların görüntülenmesine izin verilerek denetim mekanizmasının sıkılaştırıldığı görülmektedir.

File Inclusion Saldırı Sonrasında Oluşan Erişim Log Kayıtları

Yukarıda ekran görüntüsü verilen log satırları incelendiğinde LFI zafiyetinden faydalanarak /etc/passwd dosyasının görüntülenmeye çalışıldığı görülmektedir. Bir access log dosyası incelerken; ../ ve ..\ gibi dizin atlatma karakterleri aratılarak bu tarz log kayıtları ile karşılaşılması halinde IP adresinin diğer hareketleri mutlaka incelenmelidir. Ayrıca yine RFI zafiyetinden faydalanılarak site üzerinde farklı dosyaların görüntülenebileceği de unutulmamalıdır.

İlk iki satırda; çeşitli dizin atlatma denemeleri yapılarak LFI zafiyeti istismar edilmeye çalışılmış ve 3. yapılan deneme sonucunda byte boyutunda artış gerçekleşerek bir değişiklik meydana geldiği görülmektedir. Burada analiz işlemini yapan kişi; /etc/passwd dosyasının da boyutunu düşünerek ve HTTP durum kodlarına göre fikir yürütebilir. (Burada yapmış olduğumuz son deneme de zaten ilgili dosya tarayıcı üzerinde görüntülenmişti. Bir de DVWA Labs. ortamında denediğimiz için durum kodları sürekli olarak 200 alıyordu, normal şartlarda  ilk denemelerde sayfa açılamayacağından 404 vb. durum kodu alması daha muhtemeldi.) 

Faydalı ve Faydalanılan Kaynaklar

  • http://www.includekarabuk.com/kategoriler/DVWAUygulamasi/Ders-10—File-Inclusion-High-Level.php
  • http://php.net/manual/tr/function.fnmatch.php

Site Footer