Neler Yeni

RFI ve LFI Vulnerabilities

Katılım
22 Nis 2020
Mesajlar
86
Tepkime puanı
23
Puanları
150
Remote File Inclusion (RFI)

Merhabalar arkadaşlar bugün sizlere web güvenlik zaafiyetlerinden RFI ve LFI dan bahsedeceğiz. döküman Lojistik Destek adına yazılmıştır. Umarım faydalı olur.
RFI Nedir ?

Uzaktan dosya ekleme (RFI), web uygulamalarındaki harici komut dosyalarına dinamik olarak başvuran güvenlik açıklarını hedef alan bir saldırıdır. Saldırganın amacı, farklı bir etki alanı içinde bulunan uzak bir URL den kötü amaçlı yazılım (ör. backdoor, Shell) yüklemek için bir uygulamada başvuru işlevinden yararlanmaktır. Başarılı bir RFI saldırısının sonuçları arasında bilgi hırsızlığı, tehlike altındaki sunucular. ( yapılan işlemin ve sunucunun güvenlik durumuna göre root olma işlemi ) ve içerik değişikliğine izin veren bir sitenin indexini değiştirme (Hackleme) bulunur. Çoğu örnek savunmasız PHP betiklerini işaret etse de, JSP, ASP ve diğerleri gibi diğer teknolojilerde de yaygın olduğunu akılda tutmalıyız.
Aşağıdaki grafik, bir RFI saldırısının tipik akışını göstermektedir.

MVoRaa.png


Uzaktan Dosya Ekleme (RFI) genellikle, bir uygulama düzgün bir şekilde sterilize edilmeden bir girdi olarak dahil edilmesi gereken dosyanın yolunu aldığında oluşur. Bu, harici bir URL nin include ifadesine sağlanmasına izin verir.

GmP7pV.png


Yukarıdaki örnekte, bir saldırgan, backdoor gibi kötü amaçlı bir komut dosyasını çalıştırması için uygulamayı kandırmak için aşağıdaki isteği yapabilir .

YQqyMj.png


Test nasıl yapılır ?

RFI, "include" ifadelerine iletilen yollar doğru şekilde filtreleme yapılmadan gerçekleştiğinden, bir pentest uygulamasındaki blackbox test yaklaşımında olduğu gibi, dosya adlarını parametre olarak alan komut dosyalarını aramamız gerekir. Aşağıdaki PHP örneğini incelersek;

y6NZon.png


İlk kod satırı, HTTP isteğinden dosya parametresinin değerini çıkarır. İkinci kod satırı, çıkartılan değer kullanılarak dahil edilecek dosya adını dinamik olarak ayarlar. Eğer web uygulaması dosya parametresinin değerini uygun bir şekilde temizlemezse (örneğin bir whitelist kontrol ederek) bu kod kullanılabilir. Aşağıdaki URL yi hedefte yazdığınızda açık çalışacaktır.

26nz8d.png


Bu durumda uzak dosya eklenecek ve içerdiği herhangi bir kod sunucu tarafından çalıştırılacak.

ADnX00.jpg


Remote File Inclusion Örnekleri

RFI penetrasyonlarının nasıl çalıştığını görmek için şu örneklere göz atabilirsiniz:

Bir JSP sayfası bu kod satırını içerir:

1-) Birinci Senaryo

lt;jsp:include page= lt;%=(String)request.getParmeter(ParamName)% gt; gt;

aşağıdaki istekle değiştirilebilir:

Page1.jsp?ParamName=/WEB-INF/DB/password

İsteğin işlenmesi, şifre dosyasının içeriğini saldırgana gösterir.

2-) İkinci Senaryo

Bir web uygulamasının, burada gösterildiği gibi bir URL adresinden içerik isteyen bir import ifadesi vardır:

lt;c:import url= lt;=request.getParameter(conf)% gt; gt;

Doğrulanmadıysa, aynı ifade kötü amaçlı yazılımın enjeksiyonu için kullanılabilir.

Örneğin : Page2.jsp?conf=

RFI Önleme ve Azaltma

Bir dereceye kadar, uygun girdi doğrulaması ve filtrelenmesi yoluyla RFI saldırıları riskini en aza indirebilirsiniz. Bunu söyledikten sonra, kullanıcı tarafından sağlanan / kontrol edilen girdileri mümkün olan en iyi şekilde sterilize etmek her zaman tercih edilir. Bu girişler şunları içerir:
1-) GET/POST parametreleri
2-) URL parametreleri
3-) Cookie Bilgileri
4-) HTTP Header Bilgileri

Uzaktan Dosya Ekleme (RFI) açıklarını ortadan kaldırmanın en iyi yolu, kullanıcı girdisine dayanan dosyalar dahil olmak üzere, dinamik veri girişinden kaçınmaktır. Bu mümkün değilse, uygulama saldırganın dahil edilecekleri üzerinde kontrolünü sınırlamak için bir whitelist oluşturulmalıdır. Temizlik sürecinde, girdi alanları blacklist yerine (izin verilmeyen kötü amaçlı karakterler) whitelist (izin verilen karakter kümesi) karşı kontrol edilmelidir. Genel olarak, blacklist doğrulaması zayıf bir çözüm olarak kabul edilir, çünkü saldırganlar şifreli veya onaltılık formatlar gibi farklı bir formatta girdi sağlamayı seçebilir. mevcut zaafiyeti bypass edebilir. Son olarak, yükleme dizinleri için yürütme iznini kısıtlamayı göz önünde bulundurmalı (dizinlerin chmod değerlerini minimal düzeyde tutmalı) ve yüklenen dosya boyutlarını kısıtlarken, izin verilen dosya türlerinin (örneğin PDF, DOC, JPG vb.) Bir whitelist tutmalısınız. RFI güvenlik açığından yararlanılmasını önlemek için, programlama dillerinin yapılandırmasına uzaktan dahil etme özelliğini, özellikle ihtiyacınız olmadığında devre dışı bıraktığınızdan emin olun.

PHP.ini Konfigurasyonu

php.ini dosyası, sunucudaki php ayarlarını yapabileceğiniz bir yapılandırma dosyasıdır. Sunuculara kurulan yazılımlara göre php.ini üzerinden ayar değişikliği yapılması gerekebilir.Standart bir sunucuda php.ini ayarları bir kere yapıldıktan sonra özel bir durum olmadıkça düzenleme yapılmasına ihtiyaç duyulmaz.Ancak özel yazılımlar için değerlerde ya da fonkisyonlarda değişiklik yapılması gerekebilir. php.ini dosyasını /usr/local/lib/php.ini altında bulabilirsiniz.
allow_url_include = off olarak ayarlayabilirsiniz. Bu değer kapalı yapıldığında "require" ve "include" ile uzaktan dosya çağırılması engellenmiş olur.
allow_url_fopen = off ayarı web ve internet üzerinden dosyaların sistemdeki bir dosya gibi açılabilmesini etkinleştirir ya da etkisizleştirir. açık olması "file_get_contents()", "include()", "require()" fonksiyonlar uzaktaki dosyaları da işlemesine olanak tanır. Bunu Off yaparak yine RFI saldırılarının önüne geçebilirsiniz.
register_globals = off ayarı php.ini dosyasında bulunan "post" "get" ile gönderilen değerlere kullanıcı adlarıyla ulaşılıp ulaşılamayacağını belirtir. Session, cookie değerlerini kendi adıyla tanımlayarak birer değişken olmasına neden olur. "Off" olarak ayarlanırsa bu gibi değerlere kendi tanımladığı şekilde ulaşılamaz.

Local File İnclusion (LFI) nedir?

Yerel Dosya ekleme (LFI) veya yalnızca Dosya Dahil Etme, bir saldırganın, yerel dosyaları veya komut dosyalarını dinamik işlevsellikten yararlanarak, web uygulamasını web sunucusuna dosya ekleme konusunda kandırabilecekleri bir saldırı anlamına gelir. Başarılı bir LFI saldırısının sonucu, Dizin Geçiş ve Bilgilerin Açıklanması ile Uzaktan Kod Yürütülmesini içerir. Genelde, Yerel Dosya Dahil Etme (LFI), bir uygulama güvenilir olmayan girdi olarak değerlendirilmeden girdi olarak dahil edilmesi gereken dosyanın yolunu aldığında oluşur. Bu, yerel bir dosyanın include ifadesine sağlanmasına izin verir. Yerel Dosya Ekleme, Uzak Dosya Ekleme (RFI) ile çok benzer. Aşağıdakiler, PHP de Yerel Dosya Eklemeye (LFI) açık olan bir örnektir.

Nnlaaa.png


Yukarıdaki örnekte, saldırgan, web sunucusuna yüklemeyi başardığı shell gibi kötü amaçlı bir komut dosyasını çalıştırması için uygulamayı kandırmak için aşağıdaki isteği yapabilir.

oX0GLX.png


Yukarıdaki örnekte, saldırgan, dizin geçiş saldırısı gerçekleştirmek için yerel dosya içeriği (LFI) güvenlik açığını kullanarak sunucudaki kullanıcıların listesini içeren / etc / passwd dosyasının içeriğini alabilir yada okuyabilir. Benzer şekilde, saldırgan, yaptığı saldırının ilerlemesine yardımcı olabilecek kimlik bilgilerine, günlüklere, kaynak kodlarına ve diğer hassas bilgilere erişmek için dizin geçiş güvenlik açığından yararlanabilir.

Test nasıl yapılır

LFI, "include" ifadelerine iletilen yollar doğru şekilde filtreleme yapılmadan gerçekleştiğinden, bir pentest uygulamasındaki blackbox test yaklaşımında olduğu gibi, dosya adlarını parametre olarak alan komut dosyalarını aramamız gerekir. Aşağıdaki PHP örneğini incelersek;

9ag629.png


Bu açık LFI denemek için güzel bir yer gibi görünüyor. Saldırgan burada sunucuda eğer yeterli güvenlik önlemleri alınmamışsa herhangi bir dizine geçip dosya okuması yapabilir. örnek olarak;

YQq1V2.png


saldırgan yukarıdaki dosyayı okumak için gerekli komutu çalıştırdığında aşağıdaki gibi bir sayfa ile karşılaşacaktır.

WqglXm.png


Yerel Dosya Ekleme (LFI) güvenlik açıklarını önleme

Yerel Dosya Ekleme (LFI) güvenlik açıklarını ortadan kaldırmanın en iyi yolu, kullanıcı girdisine dayanan dosyalar dahil olmak üzere dinamik olarak önlemektir. Bu mümkün değilse, uygulama saldırganın dahil edilecekler üzerindeki kontrolünü sınırlamak için dahil edilebilecek beyaz bir dosya listesi tutmalıdır. RFI açıklarına benzer şekilde güvenlik önlemlerinin alınması LFI içinde bir önlem olacaktır.

Bazı önemli dosya konumları aşağıda belirtilmiştir. Saldırgan sunucu tipine göre girdiği yerdeki bilgilere ulaşmak için bu konumları kullanabilir. Ve hassas verileri çalabilir.

ADLQX0.png


RFI ve LFI Arasındaki Farklar Nelerdir ?

RFI ye benzer şekilde, yerel dosya ekleme (LFI), web tarayıcıları aracılığıyla kötü amaçlı dosyaların sunuculara yüklenmesini içeren bir işlemdir. İki işlemde de genellikle dosya dahil etme saldırıları bağlamında birlikte başvurulur. Her iki durumda da, başarılı bir saldırı, kötü amaçlı yazılımın hedeflenen sunucuya yüklenmesine neden olur. Bununla birlikte, RFI nın aksine, LFI saldırıları, kullanıcı tarafından sağlanan / kontrol edilen girişi doğrulayamayan güvensiz yerel dosya yükleme işlevlerinden yararlanmayı amaçlar. Sonuç olarak, kötü amaçlı karakter yüklemeleri ve dizin / yol geçişi saldırılarına izin verilir. Saldırganlar, uzak bir yerden temperli bir dış referanslama işlevini kullanarak almak yerine, doğrudan bir sisteme kötü amaçlı yazılım yükleyebilir.
 

Konuyu görüntüleyen kullanıcılar

Üst