Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Canyoupwn.me ~

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 DosyaDahil 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.

1

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;

11-300x186

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.

2

Hata örneğimiz;

12

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ı.

13

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.

3-1024x158

Benim php.ini konfigurasyonun da http:// wrapper disabled ve allow_url_include kapalı olduğundan dosya çekmek mümkün olmuyor.

14-1024x171

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.

2-1

15

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.

16

Hatamızı olduğunu anladık ve sonuna .php karakterini ekletmemeye çalışalım.

19-1024x199
“% 00” null byte injection olarak geçmektedir esasen, bu karakter string sonlandırma karakteri olarak bilinir.

Blind Hata;

17

18
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.

20

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)

 

 

 

 

 

 

 

 

About CanYouPwnMe

Hero!

Follow Me