Hacker101 - Cody’s First Blog Çözümü

Merhaba herkese, bugün Hacker101 üzerindeki Cody’s First Blog makinesini çözeceğiz. Makine çok zor olmamakla birlikte, web uygulaması üzerindeki fonksiyonların nasıl çalıştıklarını temelde iyi analiz etmek çözüme giden yolu bir hayli kolaylaştıracaktır.

PHP Kod Enjeksiyonu
Admin Authentication
Bypass PHP Dosya Okuma


PHP Kod Enjeksiyonu​

Untitled.png
Web sitesine ilk eriştiğimde beni en başta yukarıdaki gibi bir sayfa karşılıyor. Verilen bilgiye göre ortam PHP ile oluşturulmuş.
Untitled 1.png

Hızlıca kullanılan altyapıyı tespit etmek adına wappalyzer uygulamamı açıyorum ve sayfanın PHP tabanlı olduğunu doğruluyorum. Comment fonksiyonunu test etmek adına bir yorum giriyorum:

Untitled 2.png
Yorum girildikten sonra beni approval sürecine yönlendiriyor, yani yorumun yetkili bir kişi tarafından onaylanması lazım.
Untitled 3.png
Ortamın PHP ile kodlanmasından dolayı belki bir PHP kodu girerek sistem üzerinde bir şeyler tetikleyebilirim diye düşünüyorum ve aşağıdaki kodu giriyorum:
PHP:
<?PHP
$command = "ls -l";
$output = exec($command);

Untitled 4.png

Flag’i verdi ama herhangi çalışan bir şey yok çünkü yorum daha onay mekanizmasından daha geçmedi. Ancak doğru yolda olduğumu düşünerek ilk flag’imi almış oluyorum.

Admin Authentication Bypass​

Untitled 5.png
Sayfa kaynağına girip incelediğimde şu şekilde bir yorum olduğunu görüyorum:
<!--<a href="?page=admin.auth.inc">Admin login</a>-->
Sonrasında bu adrese erişiyorum:
Untitled 6.png
Adrese geldiğimde yukarıdaki gibi bir admin login sayfasına erişiyorum. Burada ilk akla gelen SQLi oluyor ancak denemeler fayda etmiyor. page parametresi üzerinde çeşitli denemeler yapıyorum ve buranın aldığı değerin bir dosya ismi olduğunu görüyorum. Yani ben şu an admin.auth.inc dosyasının içindeyim. Bu durum potansiyel bir LFI zafiyetinin olabileceğini aklıma getiriyor.
O zaman bu page parametresine bir fuzzing yapıp acaba içerisinde hangi sayfalar barınıyor görmeyi deniyorum. Bunun için aşağıdaki komutu kullanıyorum.
ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -u https://7cc44d64095fc8e890664351a61c5d77.ctf.hacker101.com/?page=FUZZ -e ".PHP,.inc" -fr "Undefined"
Burada Kali Linux üzerinde varsayılan olarak bulunan directory-list-2.3-small.txt wordlist’ini kullanarak .PHP ve .inc uzantılı dosyalar arıyorum.
Untitled 7.png
Çıktılara göz attığımda admin.inc sayfasının olduğunu görüyorum. Yani bulunduğum sayfa olan admin.auth.inc’nin auth’suz hali.
Untitled 8.png
Admin yetkisinin bulunduğu sayfaya yani admin paneline erişmiş oluyorum. Burada da yazdığım yorumun beklemede olduğunu ve onaylayabileceğimi görüyorum. Böylelikle ikinci flag’imi de elde etmiş oldum.

PHP Dosya Okuma​

PHP:
<?PHP echo file_get_contents('index.PHP') ?>
İlk flag’imizi aldığımızda PHP çalıştırarak almıştık. Bu fonksiyonelliği kullanarak acaba web uygulamasının kaynak kodlarına erişebilir miyim diye düşünüyorum. Ardından PHP ile kaynak kodu okumaya dair yukarıdaki gibi komutlar gönderiyorum ancak görüyorum ki admin panelinden onayladığım yorumlar birer yorum satırı olarak düşüyor.
Untitled 9.png
Gönderdiğim kod parçaları çalışmıyor ve bu durum beni farklı çözümler aramaya itiyor. Sistem dışarısı ile iletişim kurmuyor ve local taraftaki dosyalarla iletişimini sürdürüyor olduğundan (page parametresi içerideki dosyaları çekip getiriyor) tekrardan bu çerçevede düşünmem gerektiğini bir kenara not ediyorum.
Yorum satırına enjekte ettiğim PHP kodu üzerinden kaynak kodu okuyamadığım için bu sefer sistemin içine erişimi olan başka bir atak vektörü olan page parametresini tekrardan devreye sokuyorum. İsteği sistemin içerisine yapacağım için localhost üzerinden sayfaya erişmeye deniyorum ve okumak istediğim sayfayı dizin olarak belirtiyorum.
Belirtimi yaptıktan sonra yukarıdaki gibi bir URL ortaya çıkmış oluyor. Tarayıcıda bu adresi ziyaret ediyorum ve ardından sayfanın kaynak kodunu okuyorum:
Untitled 10.png
Böylelikle kodları leak etmiş olduk ve üçüncü flag’imizi de aldık.
Okuduğunuz için teşekkürler.
 
Üst