LFI to RCE with File Upload

Cezeri

Yönetici
1) LFI nedir ?
2) LFI to RCE
3) Demo



1) LFI NEDIR ?

Local File Inclusion (LFI), bir çoğunuzun bildiği üzere web sitelerinde bulunan local dosyaları okuyabilmemize olanak sağlayan bir web güvenlik zafiyetidir.

include, require, include_once, require_once gibi PHP fonksiyonlarından kaynaklanır. Burada ki mantık sistemi kodlayan kişinin başka bir sayfayı siteye dahil etmek istemesidir. Saldırgan ise bunu manipüle ederek kendi çıkarına uygun dosyaları okuyarak siteyi ele geçirmeye çalışır.

Basit manada aşağıdaki gibi bir php betiğinden kaynalanır.

<?php include($_GET["page"]); ?>

Bu şekilde yazılmış bir scripti ;

vulnerable.php?page=sifreler.txt şeklinde manipüle ederek sifreler.txt dosyasını okuyabilmektedir.

LFI Nedir? sorusu üzerinde çok fazla durmayacağım, zira bir çoğunuz temel manada ne olduğuna hakimsiniz diye tahmin ediyorum.


2) LFI to RCE ?

LFI sadece dosya okumaktan ibaret bile olsa kritik bir açıkken birde bu açıktan yürüyerek RCE gibi daha kritik zafiyetler elde etmek mümkün. Bunun birbirinden farklı 8-10 tane yöntemi sayılabilir. Biz bunlardan bir tanesi olan “File Upload” ile ilgili kısmını anlatacağız.

Uygulanacak senaryo ;

1- LFI zafiyeti bulunan bir dosya
2- ".jpg" uzantısı hariç dosya kabul etmeyen bir upload mekanizması

Bu senaryo da yapılacak olan iş “.jpg” uzantılı resim dosyamız içerisine RCE elde etmemizi sağlayan PHP kodlarını yerleştirip sisteme yüklendikten sonra, LFI zafiyeti bulunan dosya üzerinden “.jpg” dosyamızı çağırım PHP kodlarımızın çalışmasını sağlamaktır.

".jpg" dosyası bir PHP fonksiyonu içerisinde çağırılacağı için PHP dosyası olarak yorumlanacak ve sonuç itibariyle jpg dosyamız içerisindeki PHP komutlarımız çalışmış olacaktır.


Aşağıdaki gibi JPG dosyasının en alt satırına PHP kodlarımızı ekliyoruz ;

2020-03-18 21-44-15 ekran görüntüsü


Daha sonra dosyamızı yüklüyoruz.

2020-03-18 21-44-34 ekran görüntüsü


ve LFI zafiyeti bulunan dosya üzerinden JPG dosyamızı çağırıp PHP kodlarımızı çalıştırıyoruz ve “id” komutunun çıktısını elde ediyoruz.

2020-03-18 21-45-18 ekran görüntüsü



3) Demo

 
Moderatör tarafında düzenlendi:
Öncelik teşekkürler.

Burada sayfa php’yi kabul etmiyor fakat php olarak yorumluyor anladığım kadarıyla. Yani aslında sayfa php yüklemeye kapalı fakat jpg yükleyincede göstermiyor yine php olarak yorumluyor.

Eğer mümkün ise PHP kodlarınıda görebilir miyim?
 

Cezeri

Yönetici
Öncelik teşekkürler.

Burada sayfa php’yi kabul etmiyor fakat php olarak yorumluyor anladığım kadarıyla. Yani aslında sayfa php yüklemeye kapalı fakat jpg yükleyincede göstermiyor yine php olarak yorumluyor.

Eğer mümkün ise PHP kodlarınıda görebilir miyim?
aslında JPG uzantısını örnek olarak verdim, yüklenen dosyanın uzantısının önemi olmaksızın PHP fonksiyonu içerisinde çağrılan dosya PHP olarak yorumlanır.


2020-04-02 21-23-13 ekran görüntüsü


Resimde basitçe örneklediğim üzere “lfi.php” dosyası üzerinden çağırdığım TXT uzantılı dosyanın içerisine PHP system fonksiyonu ile “cat /etc/passwd” komutunu yazdım ve lfi.php dosyasını tarayıcıda açtığımda “jon.txt” dosyası içerisinde ki komutumuz PHP olarak yorumlandı ve /etc/passwd dosyasının içeriğine ulaştık.
 
Moderatör tarafında düzenlendi:
Üst