TR | File Include
Bir çok açık gibi bunlar da Input Validition alanlarından kaynaklanmaktadır, her dil de görülebilen bir açık olup en fazla PHP‘de meydana gelmektedir.
File Include kelime anlamı olarak Dosya “Dahil Etmek, Çağırmak” anlamlarına gelmektedir, bu çağırma işlemi iki farklı yoldan gerçekleştirilebilir, bunlar “Local ve Remote“.
Açığın anlatımına girmeden önce meydana getiren fonksiyon’dan bahsedelim.
File Include saldırılarına include fonksiyonu sebep olmaktadır, bu fonksiyon PHP’de 4.3 sürümünde gelmiştir.
Örnek 1;
Fonksiyonumuz ek olarak bir parametre alabilir. Parametre’nin işlevi şudur; Kullanıcıdan aldığı dosyaismi’ne .php uzantısı eklemek. Tabi ki bu durum da /etc/passwd’u çekmek istediğimiz de sonuna .php ekleyeceği için başarısız bir işlem olacaktır. Bu durum da bypass etmek için NULL Byte tekniği kullanılmaktadır.
Hata örneğimiz;
Input’da görüldüğü gibi .txt dosyası çağırmak istedim fakat parametrem’de “.php” olduğundan sonuna onu ekledi. Öyle bir dosya da bulunamadığından ve açamadığından bize sunamadı.
Alternatif olarak;
include_once()
require()
require_once()
file()
fopen()
readfile()
Fonksiyonları da kullanılabilir.
Remote File Include
Uzaktan dosya Çağırma anlamına gelmektedir, fakat bu artık günümüzde pek mümkün değildir. Bu açık uzak bir sunucu da ki dosyayı kendi sunucunuza çekebilmenizi sağlar. Neden artık mümkün değil dersek, PHP’de wrapper‘lar mevcuttur, bunlardan birisi de, http:// – https:// Wrapper’dır. Bu wrapper input’a eklenen URL’e erişmeye uğraşır.
Benim php.ini konfigurasyonun da http:// wrapper disabled ve allow_url_include kapalı olduğundan dosya çekmek mümkün olmuyor.
Açık olduğun da ise size dosyayı çekecektir. Bu gibi sorunlar sebebi ile popüleritesini, LFI’a bıraktı.
Trick 1:
Sadece http:// wrapper disabled ise File Include mevcut ve allow_url_include ON ayarın da ise bu durum da alternatif olarak data:// ve ftp:// wrapper’larını kullanabilirsiniz.
Local File Include
Lokal Dosya Çağırma anlamına gelmektedir, aynı sunucu da ki dosyaları çağırabilirsiniz. Bahsettiğim include fonksiyonu sebebi ile meydana gelmektedir. Büyük olasılıkla bir input bir dosya çağırıyorsa orada LFI testleri yapılabilir. Bazı durumlar da direk include fonksiyon hatası verebileceği gibi bazen de blind olabilmekte yani hafif de olsa sayfada değişmeler meydana gelebilmektedir.
Parametre ile örnek verelim.
Localhost’un ana sayfa dosyasını böylelikle çağırmış olduk. Kullanıcıdan bir değer almasını istedik ve sonuna .php parametresini ekledik. Bu durum da bize local’de bulunan index’i çağırdı.
Tespit;
Hata Tabanlı Tespit;
Hatamız kullanıcıdan aldığı değerin sonuna .php eklediğini söylüyor bu developer’a değişebilir illaki .php olabilecek kaidesi yoktur. .htm de olabilirdi. Öncelikle yapacağımız işlem .php uzantısını ekletmemek olacaktır.
Hatamızı olduğunu anladık ve sonuna .php karakterini ekletmemeye çalışalım.
“% 00” null byte injection olarak geçmektedir esasen, bu karakter string sonlandırma karakteri olarak bilinir.
Blind Hata;
Bu durum da ilk önce bilinen bir dosya çağırılır mesela news nesnesi eğer nesneyi çağırmakta sorun yok ise path eklenerek devam edilebilir. Fakat size bize bozuk hali ile response veriyor ise bu durum da parametre mevcuttur diyebiliriz. Bu durumda NULL Byte karakterine başvurulur.
İşletim sistemleri Path;
İşletim sistemlerinde path mevcuttur bu dosya yolları olarakta geçmektedir.
<strong>Linux:</strong> ../
<strong>Windows:</strong> ..\
Linux’da /etc/passwd Nesnesi;
Linux sunucular da vazgeçilmez nesnedir, sunucu da ki kullanıcı isimlerini size vermektedir. Defacer’lar içinde bu dosya hayati önem almaktadır, bir public sunucu’ya backdoor attığı vakit bu dosyayı çekip, symlink saldırısı yapmaktadır.
Yanlış Filtrelemeler
STR_Replace Yanlış Fix
str_replace('../', '', $_GET['file']);
1: URL Encoding: ..%2Fetc%2Fpasswd
2: Wrapper: file://etc/passwd
STR_Replace Yanlış Fix
str_replace('.', '', $_GET['file']);
1: file://etc/passwd
PHP Wrapper
file:// — Local dosyalar
http:// — URL erişim
ftp:// — FTP erişim
php:// — Dosya okutmak yazdırmak gibi işlemler yapılır.
zlib:// — Compression Streams
data:// — Data (RFC 2397)
phar:// — Arşiv
expect:// — Komut çalıştırır
Birşeyler karaladık. Umarım öğretici ve faydalı olur.
Wrapperları kullanmak ve Shell Upload için ikinci serisi olucak. (:
Onu da en yakın zamanda yazarım. (:
Hata gördüğünüz yerlerde benimle iletişime geçerseniz memnun olurum. (Y)